ペチパーノート

WEB系Tipsブログです。PHP、MySQL、Linux、js等。なんだかよくわからないけどやってみる。がポリシーです。

ケータイで撮った写真をPHPで回転する

サーバに画像をアップロードさせるサービスを構築する場合
ケータイで撮った写真などが横になってる事があります。
そんな時はシステム側で調整してやると親切かと思います。

画像には様々な情報(EXIF)が保存されているので、
画像方向情報(Orientation)を見て回転させてやります。

※拡張モジュールのImageMagickExifを使用します。

test.php

<?php
$file = 'test.jpg';
fixOrientation($file);

function fixOrientation($file)
{
    $is_exists = file_exists($file);
    if ($is_exists === false) {
        return false;
    }

    $exif = exif_read_data($file);
    $orientation = isset($exif['Orientation']) ? $exif['Orientation'] : 0;

    $image = new Imagick($file);
    switch ($orientation) {
        // EXIF情報なし
        case 0:
            return;
        // そのままでOK
        case 1:
            return;
        // 上下反転
        case 2:
            $image->flopimage();
            break;
        // 180度反転
        case 3:
            $image->rotateimage(new ImagickPixel(), 180);
            break;
        // 左右反転
        case 4:
            $image->flipimage();
            break;
        // 270度回転&上下反転
        case 5:
            $image->rollimage(new ImagickPixel(), 270);
            $image->flipimage();
            break;
        // 90度回転
        case 6:
            $image->rotateimage(new ImagickPixel(), 90);
            break;
        // 90度回転&上下反転
        case 7:
            $image->rotateimage(new ImagickPixel(), 90);
            $image->flipimage();
            break;
        // -90度回転
        case 8:
            $image->rotateimage(new ImagickPixel(), -90);
            break;
    }

    $image->writeimages($file, true);
    $image->destroy();
}