個人的メモ iPhoneなどから画像をアップロードするときなどに、画像が回転して表示されてしまう場合がある。 原因はExifのOrientationの値だが、これをPHPのImageMagickを使って修正する。
以下例。 <?php $image = new Imagick($imagePath); $orientation = $image->getImageOrientation(); switch ($orientation) { case imagick::ORIENTATION_UNDEFINED: break; case imagick::ORIENTATION_TOPLEFT: break; case imagick::ORIENTATION_TOPRIGHT: $image->flopImage(); $image->setimageorientation(imagick::ORIENTATION_TOPLEFT); $image->writeImage(); break; case imagick::ORIENTATION_BOTTOMRIGHT: $image->rotateImage(new ImagickPixel(), 180); $image->setimageorientation(imagick::ORIENTATION_TOPLEFT); $image->writeImage(); break; case imagick::ORIENTATION_BOTTOMLEFT: $image->rotateImage(new ImagickPixel(), 180); $image->flopImage(); $image->setimageorientation(imagick::ORIENTATION_TOPLEFT); $image->writeImage(); break; case imagick::ORIENTATION_LEFTTOP: $image->rotateImage(new ImagickPixel(), 90); $image->flopImage(); $image->setimageorientation(imagick::ORIENTATION_TOPLEFT); $image->writeImage(); break; case imagick::ORIENTATION_RIGHTTOP: $image->rotateImage(new ImagickPixel(), 90); $image->setimageorientation(imagick::ORIENTATION_TOPLEFT); $image->writeImage(); break; case imagick::ORIENTATION_RIGHTBOTTOM: $image->rotateImage(new ImagickPixel(), 270); $image->flopImage(); $image->setimageorientation(imagick::ORIENTATION_TOPLEFT); $image->writeImage(); break; case imagick::ORIENTATION_LEFTBOTTOM: $image->rotateImage(new ImagickPixel(), 270); $image->setimageorientation(imagick::ORIENTATION_TOPLEFT); $image->writeImage(); break; } $image->destroy(); $image = null; ?>
<?php $image = new Imagick($imagePath); $orientation = $image->getImageOrientation(); switch ($orientation) { case imagick::ORIENTATION_UNDEFINED: break; case imagick::ORIENTATION_TOPLEFT: break; case imagick::ORIENTATION_TOPRIGHT: $image->flopImage(); $image->setimageorientation(imagick::ORIENTATION_TOPLEFT); $image->writeImage(); break; case imagick::ORIENTATION_BOTTOMRIGHT: $image->rotateImage(new ImagickPixel(), 180); $image->setimageorientation(imagick::ORIENTATION_TOPLEFT); $image->writeImage(); break; case imagick::ORIENTATION_BOTTOMLEFT: $image->rotateImage(new ImagickPixel(), 180); $image->flopImage(); $image->setimageorientation(imagick::ORIENTATION_TOPLEFT); $image->writeImage(); break; case imagick::ORIENTATION_LEFTTOP: $image->rotateImage(new ImagickPixel(), 90); $image->flopImage(); $image->setimageorientation(imagick::ORIENTATION_TOPLEFT); $image->writeImage(); break; case imagick::ORIENTATION_RIGHTTOP: $image->rotateImage(new ImagickPixel(), 90); $image->setimageorientation(imagick::ORIENTATION_TOPLEFT); $image->writeImage(); break; case imagick::ORIENTATION_RIGHTBOTTOM: $image->rotateImage(new ImagickPixel(), 270); $image->flopImage(); $image->setimageorientation(imagick::ORIENTATION_TOPLEFT); $image->writeImage(); break; case imagick::ORIENTATION_LEFTBOTTOM: $image->rotateImage(new ImagickPixel(), 270); $image->setimageorientation(imagick::ORIENTATION_TOPLEFT); $image->writeImage(); break; } $image->destroy(); $image = null; ?>
PHP逆引きレシピ 第2版 (PROGRAMMER’S RECiPE)
関連記事がみつかりませんでした
フリーエンジニアしてます。 担当言語は日本語(ほぼ)・英語(勉強中)・Java語(なんとなく)・PHP語(…)などなど。 好きなものはアニメ・マンガ・映画など。
お問い合わせ