Use the auto-orient option of ImageMagick's convert
to do this.
convert your-image.jpg -auto-orient output.jpg
Or use mogrify
to do it in place
mogrify -auto-orient your-image.jpg
문제
Canon DSLRs appear to save photos in landscape orientation and uses exif::orientation
to do the rotation.
Question: How can imagemagick be used to re-save the image into the intended orientation using the exif orientation data such that it no longer requires the exif data to display in the correct orientation?
해결책
Use the auto-orient option of ImageMagick's convert
to do this.
convert your-image.jpg -auto-orient output.jpg
Or use mogrify
to do it in place
mogrify -auto-orient your-image.jpg
다른 팁
The PHP Imagick way would be to test the image orientation and rotate/flip the image accordingly:
function autorotate(Imagick $image)
{
switch ($image->getImageOrientation()) {
case Imagick::ORIENTATION_TOPLEFT:
break;
case Imagick::ORIENTATION_TOPRIGHT:
$image->flopImage();
break;
case Imagick::ORIENTATION_BOTTOMRIGHT:
$image->rotateImage("#000", 180);
break;
case Imagick::ORIENTATION_BOTTOMLEFT:
$image->flopImage();
$image->rotateImage("#000", 180);
break;
case Imagick::ORIENTATION_LEFTTOP:
$image->flopImage();
$image->rotateImage("#000", -90);
break;
case Imagick::ORIENTATION_RIGHTTOP:
$image->rotateImage("#000", 90);
break;
case Imagick::ORIENTATION_RIGHTBOTTOM:
$image->flopImage();
$image->rotateImage("#000", 90);
break;
case Imagick::ORIENTATION_LEFTBOTTOM:
$image->rotateImage("#000", -90);
break;
default: // Invalid orientation
break;
}
$image->setImageOrientation(Imagick::ORIENTATION_TOPLEFT);
}
The function might be used like this:
$img = new Imagick('/path/to/file');
autorotate($img);
$img->stripImage(); // if you want to get rid of all EXIF data
$img->writeImage();