我想用ImageMagick压缩一个JPG图像文件,但在大小上不能得到太大的差异。默认情况下,输出大小大于输入。我不知道为什么,但添加了一些+配置文件选项和设置质量后,我可以得到一个较小的尺寸,但仍然类似于原始。
输入图像为255kb,处理图像为264kb(使用+profile删除profile,设置质量为70%)。有没有办法将图像压缩到至少150kb ?这可能吗?我可以使用哪些ImageMagick选项?
我想用ImageMagick压缩一个JPG图像文件,但在大小上不能得到太大的差异。默认情况下,输出大小大于输入。我不知道为什么,但添加了一些+配置文件选项和设置质量后,我可以得到一个较小的尺寸,但仍然类似于原始。
输入图像为255kb,处理图像为264kb(使用+profile删除profile,设置质量为70%)。有没有办法将图像压缩到至少150kb ?这可能吗?我可以使用哪些ImageMagick选项?
当前回答
对于那些在PHP中使用Imagick类的人
$im -> gaussianBlurImage(0.8, 10); //blur
$im -> setImageCompressionQuality(85); //set compress quality to 85
其他回答
如果图像有很大的尺寸,不调整大小很难得到好的结果,下面是60%的调整大小,对于大多数目的不会破坏太多的图像。
我用这个对灰度图像有很好的效果(我从PNG转换过来):
ls ./*.png | xargs -L1 -I {} convert {} -strip -interlace JPEG -sampling-factor 4:2:0 -adaptive-resize 60% -gaussian-blur 0.05 -colorspace Gray -quality 20 {}.jpg
我使用这个扫描的B&W页面,让他们到灰度图像(额外的参数清除阴影从以前的页面):
ls ./*.png | xargs -L1 -I {} convert {} -strip -interlace JPEG -sampling-factor 4:2:0 -adaptive-resize 60% -gaussian-blur 0.05 -colorspace Gray -quality 20 -density 300 -fill white -fuzz 40% +opaque "#000000" -density 300 {}.jpg
我在彩色图像中使用这个:
ls ./*.png | xargs -L1 -I {} convert {} -strip -interlace JPEG -sampling-factor 4:2:0 -adaptive-resize 60% -gaussian-blur 0.05 -colorspace RGB -quality 20 {}.jpg
@JavisPerez——有什么方法可以把图片压缩到至少150kb ?是, 可能吗?我可以使用哪些ImageMagick选项?
请参阅以下链接,其中ImageMagick中有一个选项,用于指定写入JPG文件所需的输出文件大小。
http://www.imagemagick.org/Usage/formats/#jpg_write http://www.imagemagick.org/script/command-line-options.php#define
——jpeg:程度上={大小} 从IM v6.5.8-2开始,您可以为JPEG图像指定最大输出文件大小。大小由后缀指定。例如“400kb”。
convert image.jpg -define jpeg:extent=150kb result.jpg
通过解压和重新压缩,除了由于降低输入的质量值而造成的损失外,还会损失一些质量。
我在建议的命令中添加了-adaptive-resize 60%,但添加了-quality 60%。
convert -strip -interlace Plane -gaussian-blur 0.05 -quality 60% -adaptive-resize 60% img_original.jpg img_resize.jpg
这是我的结果
img_original.jpg = 13,913KB jpg = 845KB
我不确定这种转变是否严重破坏了我的形象,但说实话,我不认为我的转变看起来像垃圾。这是一个广角全景,我不介意一丝不苟的阻碍。
我在这里做了一些实验,孩子,高斯模糊是一个很好的不同。我使用的最后一个命令是:
mogrify * -sampling-factor 4:2:0 -strip -quality 88 -interlace Plane -define jpeg:dct-method=float -colorspace RGB -gaussian-blur 0.05
如果没有0.05的高斯模糊,它大约是261kb,对于我正在测试的图像,它大约是171KB。在1440p显示器上,只有当你把图像放大时,才会发现视觉上的差异。
下面是在PHP中使用Imagick的完整解决方案:
$im = new \Imagick($filePath);
$im->setImageCompression(\Imagick::COMPRESSION_JPEG);
$im->setImageCompressionQuality(85);
$im->stripImage();
$im->setInterlaceScheme(\Imagick::INTERLACE_PLANE);
// Try between 0 or 5 radius. If you find radius of 5
// produces too blurry pictures decrease to 0 until you
// find a good balance between size and quality.
$im->gaussianBlurImage(0.05, 5);
// Include this part if you also want to specify a maximum size for the images
$size = $im->getImageGeometry();
$maxWidth = 1920;
$maxHeight = 1080;
// ----------
// | |
// ----------
if($size['width'] >= $size['height']){
if($size['width'] > $maxWidth){
$im->resizeImage($maxWidth, 0, \Imagick::FILTER_LANCZOS, 1);
}
}
// ------
// | |
// | |
// | |
// | |
// ------
else{
if($size['height'] > $maxHeight){
$im->resizeImage(0, $maxHeight, \Imagick::FILTER_LANCZOS, 1);
}
}