PHP で EXIF データを読み取り、画像の向きを調整する
問題:
アップロードされた画像を回転するEXIF データを使用した向きに基づく機能は、iPhone および Android の画像では正しく機能しません。
コード:
次のコードは、EXIF に基づいて画像を回転しようとします。 orientation:
<code class="php">if(move_uploaded_file($_FILES['photo']['tmp_name'], $upload_path . $newfilename)){ chmod($upload_path . $newfilename, 0755); $exif = exif_read_data($upload_path . $newfilename); $ort = $exif['IFD0']['Orientation']; switch($ort) { case 3: // 180 rotate left $image->imagerotate($upload_path . $newfilename, 180, -1); break; case 6: // 90 rotate right $image->imagerotate($upload_path . $newfilename, -90, -1); break; case 8: // 90 rotate left $image->imagerotate($upload_path . $newfilename, 90, -1); break; } imagejpeg($image, $upload_path . $newfilename, 100); $success_message = 'Photo Successfully Uploaded'; }else{ $error_count++; $error_message = 'Error: Upload Unsuccessful<br />Please Try Again'; }</code>
var_dump($exif) 出力は、iPhone および Android からの画像の EXIF データに Orientation フィールドが存在することを示します。
解決策:
この問題を解決するには、iPhone と Android で使用される特定の方向の値を処理できるように方向補正関数を最適化する必要があります。
GD を使用した方向補正関数の改良版は次のとおりです。
<code class="php">function image_fix_orientation(&$image, $filename) { $exif = exif_read_data($filename); if (!empty($exif['Orientation'])) { switch ($exif['Orientation']) { case 3: $image = imagerotate($image, 180, 0); break; case 6: $image = imagerotate($image, 90, 0); break; case 8: $image = imagerotate($image, -90, 0); break; } } }</code>
この関数を使用するには、保存または表示する前に画像に適用するだけです:
<code class="php">image_fix_orientation($image, $upload_path . $newfilename); imagejpeg($image, $upload_path . $newfilename, 100);</code>
この最適化された関数により、iPhone と Android の画像が EXIF 方向データに基づいて正しく回転されるようになりました。 .
以上がEXIF データに基づく画像の回転が iPhone および Android デバイスで機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。