Exif 画像の向き 回転/反転による調整

1~8段階のExif Orientationに基づき回転/反転より位置を調整

Exif Orientation

Exif Orientation(画像の向き)が1~8で定義されている。

  • 1.
    □□■
    ■■■
    ■■■
  • 2.
    ■□□
    ■■■
    ■■■
  • 3.
    ■■■
    ■■■
    ■□□
  • 4.
    ■■■
    ■■■
    □□■
  • 5.
    □■■
    □■■
    ■■■
  • 6.
    ■■■
    □■■
    □■■
  • 7.
    ■■■
    ■■□
    ■■□
  • 8.
    ■■□
    ■■□
    ■■■

1: 通常、 2: 水平反転、 3: 180°回転、 4: 垂直反転、 5: 水平反転、 反時計回りに90°回転(1→2→5) 6: 反時計回りに90°回転 7: 垂直反転後、反時計回りに90°回転(1→4→7) 8: 反時計回りに270°回転

スマートフォンなどで撮影した際に、カメラの向きによって1~8の値が自動付与。 画像のプロパティからはOrientationの確認できない。

PHP

/** * * Exif 画像の向き 回転/反転による調整 * @param string $file_name * @param text $mode */ function imageRotation($file_name) { // 存在チェック if (! file_exists($file_name)) { exit; } // EXIFヘッダを読み込み $exif = exif_read_data($file_name, 'EXIF'); // コンテントタイプ header('Content-type: image/jpeg'); // 読み込み $im = imagecreatefromjpeg($file_name); $degrees = 0; $mode = ''; switch($exif['Orientation']) { case 1: // 通常 break; case 2: // 水平反転 $mode = 'IMG_FLIP_HORIZONTAL'; break; case 3: // (反時計回りに)180°回転 $degrees = 180; break; case 4: // 垂直反転 $mode = 'IMG_FLIP_VERTICAL'; break; case 5: // 水平反転、 反時計回りに90°回転(反時計回りに270°回転で正常) $degrees = 270; $mode = 'IMG_FLIP_HORIZONTAL'; break; case 6: // 反時計回りに90°回転(反時計回りに270°回転で正常) $degrees = 270; break; case 7: // 垂直反転、 反時計回りに90°回転(反時計回りに270°回転で正常) $degrees = 270; $mode = 'IMG_FLIP_VERTICAL'; break; case 8: // 反時計回りに270°回転(反時計回りに90°回転で正常) $degrees = 90; break; } // 反転 if (! empty($mode)) { $im = imageflip($im, $mode); } // 回転(反時計回り) if ($degrees > 0) { $im = imagerotate($im, $degrees, 0); } // 出力 imagejpeg($im); // メモリの解放 imagedestroy($im); }

反転時にPHP5.5以上は標準のimageflipを使用。PHP5.4以下はimageflipを使用。

最新の記事

プロフィール

流されるままにウェブ業界で仕事しています。主にLAPP環境でPHPを書いています。最近はjQueryで遊んでいます。
※動作確認について