2011-12-02 113 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