ユーザーがプロフィール画像をアップロードできるWebアプリケーションを作成しました。ユーザーが携帯電話のカメラを使用して画像をキャプチャすると、向きが変わります。私は、次のコードを使用して、それを解決するために管理:正しい向きのPHPアップロード画像 - imagerotateはiPhone用には機能しません
$path[0] = $_FILES['image_upload_file']['tmp_name'];
$exif = exif_read_data($path[0]);
// $exif['Orientation'] = 6;
if(isset($exif['Orientation'])){
$image = imagecreatefromjpeg($path[0]);
file_put_contents("img_data.txt",print_r($image,true));
$ort = $exif['Orientation'];
switch($ort)
{
case 3: // 180 rotate left
$image = imagerotate($image, 180,0);
break;
case 6: // 90 rotate right
file_put_contents("img_before.txt",print_r($exif,true));
$image = imagerotate($image, -90, 0);
file_put_contents("img_after.txt",print_r($ort,true));
break;
case 8: // 90 rotate left
$image = imagerotate($image, 90, 0);
break;
}
imagejpeg($image, $path[0], 90);
}
は画像がAndroidデバイスまたはコンピュータからキャプチャされたときしかし、それだけで動作しますPHP read_exif_data and Adjust Orientation
からこのコードを手に入れました。画像がiPhoneデバイスからキャプチャされている場合は動作しません。
デバッグ中に、私は$image = imagerotate($image, -90, 0);
がiphoneに問題があることに気付きました。 この行が実行されなかったので(これは作成されるはずの場所にimg_after.txtが作成されていないため)、これを確実に言うことができます。
file_put_contents("img_after.txt",print_r($ort,true));
お勧めします。
UPDATE:アンドロイドから読み取る
Array
(
[FileName] => phpYBaC5W
[FileDateTime] => 1467207697
[FileSize] => 1430214
[FileType] => 2
[MimeType] => image/jpeg
[SectionsFound] => ANY_TAG, IFD0, EXIF
[COMPUTED] => Array
(
[html] => width="3264" height="2448"
[Height] => 2448
[Width] => 3264
[IsColor] => 1
[ByteOrderMotorola] => 1
)
[Orientation] => 6
[Exif_IFD_Pointer] => 38
[ColorSpace] => 1
[ExifImageWidth] => 3264
[ExifImageLength] => 2448
)
EXIFデータ:iPhoneから読み取る
EXIFデータ
Array
(
[FileName] => phpMQHUgW
[FileDateTime] => 1467207789
[FileSize] => 1842753
[FileType] => 2
[MimeType] => image/jpeg
[SectionsFound] => ANY_TAG, IFD0, THUMBNAIL, EXIF, GPS, INTEROP
[COMPUTED] => Array
(
[html] => width="3264" height="1836"
[Height] => 1836
[Width] => 3264
[IsColor] => 1
[ByteOrderMotorola] => 0
[ApertureFNumber] => f/2.4
[Thumbnail.FileType] => 2
[Thumbnail.MimeType] => image/jpeg
[Thumbnail.Height] => 288
[Thumbnail.Width] => 512
)
[ImageWidth] => 3264
[ImageLength] => 1836
[Make] => SAMSUNG
[Model] => SM-G7102
[Orientation] => 6
[XResolution] => 72/1
[YResolution] => 72/1
[ResolutionUnit] => 2
[Software] => G7102DDUBOB1
[DateTime] => 2016:06:29 19:12:59
[YCbCrPositioning] => 1
[Exif_IFD_Pointer] => 238
[GPS_IFD_Pointer] => 870
[THUMBNAIL] => Array
(
[ImageWidth] => 512
[ImageLength] => 288
[Compression] => 6
[Orientation] => 6
[XResolution] => 72/1
[YResolution] => 72/1
[ResolutionUnit] => 2
[JPEGInterchangeFormat] => 1018
[JPEGInterchangeFormatLength] => 5829
)
[ExposureTime] => 1/17
[FNumber] => 240/100
[ExposureProgram] => 2
[ISOSpeedRatings] => 1000
[ExifVersion] => 0220
[DateTimeOriginal] => 2016:06:29 19:12:59
[DateTimeDigitized] => 2016:06:29 19:12:59
[ComponentsConfiguration] =>
[ShutterSpeedValue] => 405/100
[ApertureValue] => 252/100
[BrightnessValue] => -169/100
[ExposureBiasValue] => 0/10
[MaxApertureValue] => 253/100
[MeteringMode] => 2
[LightSource] => 0
[Flash] => 0
[FocalLength] => 293/100
[MakerNote] => 0100 Z @ P
[FlashPixVersion] => 0100
[ColorSpace] => 1
[ExifImageWidth] => 3264
[ExifImageLength] => 1836
[InteroperabilityOffset] => 840
[SensingMethod] => 2
[SceneType] =>
[ExposureMode] => 0
[WhiteBalance] => 0
[FocalLengthIn35mmFilm] => 31
[SceneCaptureType] => 0
[ImageUniqueID] => E08QLGI01CH
[GPSVersion] =>
[InterOperabilityIndex] => R98
[InterOperabilityVersion] => 0100
)
私は、画像を回転させるためのコードをスキップする場合は、それiPhoneを含むすべての携帯電話で正常に動作します。
は、PHPがクライアント上で実行されていないことを考える:
は上のここでの長いスレッドがSOあなたが読みたいかもしれませんがありました。いくつかのデバッグを入れて、何が異なって送られているのかを見つけてください。 –クライアントOSはなぜサーバーにとって重要なのでしょうか? '$ exif ['Orientation']'はiPhoneで正しく設定されていますか? – apokryfos
はい。 $ exif ['Orientation']がiPhoneまたはAndoirdからアップロードされたときに正しく設定されています –