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掉它。