2011-12-02 97 views
1

我试图旋转上传的图像保存之前,基于EXIF ORIENTATION标记。iPhone的图像方向 - 自动旋转图像与PHP,PEL,Image_moo

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

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

Image_moo已被加载。

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

图像包含旋转的EXIF数据。

我相信我得到了正确的switch语句。

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

我在想什么或做错了什么?

马克

$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); 
} 
} 

回答

3

林不知道有关PelJpegImagick我做的:

... 
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; 
} 
... 
+0

我用的是测试页面中显示的旋转图像得很好,但图片库未正确显示这些。出于某种原因,它在我改变它的方向后开始工作,在旋转'$ orient-> setValue(1);'之后将方向设置为1。测试页面上没有必要执行此步骤。我一定错过了一些东西,但至少现在起作用了。感谢您的示例代码! – Mark

+0

setImageOrientation基本上重置EXIF。如果将图像旋转90度并且EXIF说它总共旋转90度,则它是180 – RolandasR

+0

这非常有帮助。谢谢。 +1。 – CDR