0x01 开启EXIF扩展支持检查是否有PHP中的EXIF扩展库,有的话就修改php.ini中:
1.在php.ini文件中找到;extension=php_exif.dll,去掉前面的分号
2.在php.ini文件中找到;extension=php_mbstring.dll,去掉前面的分号,并将此行移动到extension=php_exif.dll之前,使之首先加载*。
3.找到[exif]段,把下面语句的分号去掉。
;exif.encode_unicode = ISO-8859-15
;exif.decode_unicode_motorola = UCS-2BE
;exif.decode_unicode_intel = UCS-2LE
;exif.encode_jis =
;exif.decode_jis_motorola = JIS
;exif.decode_jis_intel = JIS
0x02 使用exif判断图片是否需要进行旋转//需要判断的文件路径
$imgfile = $__root__.'/'.$returnDir;
if (!function_exists('exif_read_data')) {
return;
}
//好像iphone拍照的都是jpg格式,所以这里直接处理jpg图像
$img = @imagecreatefromjpeg($imgfile);
if($img === false){
return;
}
//用exif获取图像信息,并判断是否需要旋转
$exif = exif_read_data($imgfile);
if (!empty($exif['Orientation'])) {
switch ($exif['Orientation']) {
case 8:
$image = imagerotate($img, 90, 0);
break;
case 3:
$image = imagerotate($img, 180, 0);
break;
case 6:
$image = imagerotate($img, -90, 0);
break;
}
}
imagedestroy($img);
if (isset($image)) {
imagejpeg($image, $imgfile);
imagedestroy($image);
}
//旋转完毕后,进行图片缩放,一定要先判断旋转原图,然后在进行其他图片处理,
//缩放图片(采用的CI框架的图片缩放类)
$config['image_library'] = 'gd2';
$config['source_image'] = $__root__.'/'.$returnDir;
$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width'] = 250;
$this->load->library('image_lib', $config);
if ($this->image_lib->resize()){
unlink($__root__.'/'.$returnDir);//删除原图,只保留缩略图
return $__root__.'/'.$Dir.'/'.date('ymd').'/'.$fileName.'_thumb.'.$postfix;
}
0x03 其他问题我当时在测试的时候,遇到了报下面这个错。
Allowed memory size of 134217728 bytes exhausted (tried to allocate 12096 bytes)
这个需要将php.ini的memory_limit = 128M;改为一个更大的值。
一个php脚本一次请求的内存空间就要超过128M,那不管将memory_limit设置成多大,以后肯定有出问题的时候。
究其原因,是我在编码时,仅仅对变量赋值,却从来没有 unset ($var) 过。导致了内存占用越来越多,所以以后一个变量不再使用之后,一定要记得unset掉它。