iPhone图像方向 - 使用PHP,PEL,Image_moo自动旋转图像

时间:2011-12-02 13:17:54

标签: php iphone exif pel

我正在尝试根据EXIF ORIENTATION标记在保存之前轮换上传的图像。

我已经分别检查了代码的每个部分,一切似乎都在自己的工作上。

$ new是正确的路径和文件名。

已加载Image_moo。

已加载PEL(PHP EXIF库)[http://lsolesen.github.com/pel/]。

图像包含EXIF数据,包括旋转。

我相信我的开关声明正确。

代码不会导致任何错误,只是不会旋转图像。

我错过了什么或做错了什么?

标记

 $new = the file that was just uploaded
 ...
 $ext = strtolower($path_parts['extension']);
 ...

  if($ext == 'jpg'){
  $input_jpg = new PelJpeg($new);
  $exif = $input_jpg->getExif();
  if($exif !== NULL){
  $tiff = $exif->getTiff();
  $ifd0 = $tiff->getIfd();
  if($orient = $ifd0->getEntry(PelTag::ORIENTATION)){
     $this->image_moo->load($new);
     $orient = str_replace(' ', '', $orient);
     if (($tmp = strstr($orient, 'Value:')) !== false) {
          $str = substr($tmp, 6, 1);//Get the value of the ORIENTATION tag
     }
     $this->image_moo->load($new);
     switch ($str)
     {
     case 8:
        $this->image_moo->rotate(270);
        break;
     case 3:
        $this->image_moo->rotate(180);
        break;
     case 6:
        $this->image_moo->rotate(90);
        break;
     case 1:
        break;
     }
     $this->image_moo->save($new, TRUE);
 }
 $output_jpg = new PelJpeg($new);
 $output_jpg->setExif($exif);
 $output_jpg->saveFile($new);
}
}

1 个答案:

答案 0 :(得分:3)

我不确定PelJpeg,但在Imagick我这样做:

...
switch( $imagick->getImageOrientation() ){
    case 6:
        $imagick->rotateImage(new ImagickPixel(), 90);
        $imagick->setImageOrientation(1);
    break;
    case 8:
        $imagick->rotateImage(new ImagickPixel(), 270);
        $imagick->setImageOrientation(1);
    break;
}
...