是否可以在PHP中对JPEG图像执行无损旋转?

时间:2010-07-27 11:51:18

标签: php image-manipulation lossless

我需要旋转一些现有的JPG图像。他们已经丢失了一些细节,但我现在想要旋转它们而不再遗漏任何细节。

通过一些研究,似乎PHP的唯一无损图像旋转库是使用jPegTran库。

在进行无损jpg旋转时还有其他选择吗?

谢谢!

3 个答案:

答案 0 :(得分:5)

是不是可以通过exec('commandline')调用外部程序说losslessrotator;

jpegclub

的另一个选项是 jpegtran

答案 1 :(得分:1)

在将cw或ccw旋转90度时要小心jpegtran,它不会像预期的那样旋转所有像素,因为它只能在尺寸是jpeg块大小的倍数的区域内进行无损旋转(通常为8x8像素) 。它在内部旋转每个块内的像素,以避免重新压缩图像,但边缘块不能像这样旋转。因此,使用jpegtran -rotate 90或270,你将在边缘留下一小块未旋转的像素,你需要使用-trim选项来摆脱它们,但随后生成的图像会小几个像素比原来的。

因此,虽然它是无损旋转,但您仍然会在此过程中丢失一些像素。

答案 2 :(得分:-6)

JPEG是一种有损格式,所以答案是否定的,你不能在任何应用程序,编程语言或大师冥想上创建JPEG的无损旋转。

但是,如果您将保存旋转的JPEG格式保存为JPEG格式,则可以使用$quality参数最大限度地减少图像数据丢失。如果您以无损格式保存它,那么您已经将图像数据丢失最小化了。

示例:

$img = imagecreatefromjpeg($file);
$rot = imagerotate($img, 90, 0);
imagejpeg($rot, $output, 100); /* set quality to 100% */