Memo

メモ > 技術 > プログラミング言語: PHP > 画像

■画像
スマホから写真を撮影したものを保存すると、画像が回転した状態で表示されることがある Exif回転情報を読み取り、それに従って画像を回転させる必要がある PHPで写真のExif回転に対応する https://blog.ver001.com/php_exif_orientation/ ブラウザによる画像向き補正確認用ページ https://blog.knjcode.com/browser-image-rotation-test/ UIImageOrientation / EXIF orientation sample images - Matt Galloway https://www.galloway.me.uk/2012/01/uiimageorientation-exif-orientation-sample-images/ GDまたはImagick拡張でexif情報を削除する - Qiita https://qiita.com/mgng/items/416eaacf01e424cdca29 iPhoneで縦向き撮った画像が横向きに回転しちゃうよーん! - Qiita https://qiita.com/HorikawaTokiya/items/7d469ec5b6660a7e4c96 iPhoneで撮影したHEIC型式の画像ファイルのExif情報をExifToolで取得する - ふぁメモ https://fa.hatenadiary.jp/entry/20200502/1588373190 ■回転情報を読み取る
<?php $file_path = 'path/to/image.jpg'; $exif_data = exif_read_data($file_path); if (isset($exif_data['Orientation'])) { $flip = ''; $rotate = ''; switch($exif_data['Orientation']) { case 1: $flip = '反転していない'; $rotate = '回転していない'; return; case 8: $flip = '反転していない'; $rotate = '右に90度回転している'; break; case 3: $flip = '反転していない'; $rotate = '180度回転している'; break; case 6: $flip = '反転していない'; $rotate = '右に270度回転している'; break; case 2: $flip = '反転している'; $rotate = '回転していない'; break; case 7: $flip = '反転している'; $rotate = '右に90度回転している'; break; case 4: $flip = '反転している'; $rotate = '180度回転している'; break; case 5: $flip = '反転している'; $rotate = '右に270度回転している'; break; } echo '画像 ' . $file_path . ' は[' . $flip . '][' . $rotate . ']画像です。'; } else { echo '画像 ' . $file_path . ' はOrientationの無い画像です。'; } echo 'Exif情報は以下のとおりです。'; print('<pre>'); print_r($exif_data); print('</pre>'); exit;
■画像を回転&反転させる GDのimageflip関数やimagerotate関数で回転させ、それをimagejpegで保存する…のような方法で対応できる ただしHEIC形式には有効な手段では無いと思われる。詳細は後述の「HEICの対応」を参照 PHPで写真のExif回転に対応する https://blog.ver001.com/php_exif_orientation/ ■HEICの対応 ※若干釈然としないまま 最近のiOSでは「HEIF」という画像形式が採用されている(拡張子は「.heic」となっている) これは「High Efficiency Image File Format」の略で、高効率のフォーマット画像となっている HEIFとJPEGどっちを選ぶ?空き容量対策にもなるiPhoneカメラの保存形式を比較してみた | あいこうらのさくっとふぉとらいふ https://photolog.aiko15.com/10141/ このファイルの場合、アップロードすると「Exifを削除したうえでJpeg形式に変換する」とされてしまうらしい iPhoneの高効率フォーマット(HEIC)だとinput[type=file]でExifが読み取れない - Qiita https://qiita.com/dameyellow/items/1ed487216f563c871cb5 以下のページによると ・iOSがExifを削除するのは意図された挙動 ・ユーザのプライバシーを保護するため、Exifを削除している ・この挙動は、現状どうすることもできない らしい アップロードした後に、ユーザ自身で画像を回転させたりできるUIを用意する…くらいしか無いか php - Image upload from iPhone strips exif data - Stack Overflow https://stackoverflow.com/questions/16297730/image-upload-from-iphone-strips-exif-data …と思ったが、2023年3月時点でiPhone12mini実機で試すと、普通にExifでOrientationを参照できた 「保存処理を書かずに $_FILES['upfile']['tmp_name'] の画像を直接参照すると駄目なのでは」という意見もあったが、それでも参照できた プライバシーの都合でExifを削除するようにしたが、不満が多かったのでその後のiOSアップデートで削除しないようにした …のかもしれないが、詳細は不明

Advertisement