我想用ImageMagick压缩JPG图像文件,但大小差异不大。默认情况下,输出大小大于输入大小。我不知道为什么,但是在添加了一些+ profile选项并设置了质量后,我可以得到较小的尺寸,但仍然与原始尺寸相似。
输入图像为255kb,处理后的图像为264kb(使用+ profile删除配置文件并将质量设置为70%)。有什么办法可以将该图像至少压缩到150kb?那可能吗?我可以使用哪些ImageMagick选项?
我想用ImageMagick压缩JPG图像文件,但大小差异不大。默认情况下,输出大小大于输入大小。我不知道为什么,但是在添加了一些+ profile选项并设置了质量后,我可以得到较小的尺寸,但仍然与原始尺寸相似。
输入图像为255kb,处理后的图像为264kb(使用+ profile删除配置文件并将质量设置为70%)。有什么办法可以将该图像至少压缩到150kb?那可能吗?我可以使用哪些ImageMagick选项?
Answers:
我总是使用:
在imagemagick中应该是
convert -strip -interlace Plane -gaussian-blur 0.05 -quality 85% source.jpg result.jpg
或在较新版本中:
magick source.jpg -strip -interlace Plane -gaussian-blur 0.05 -quality 85% result.jpg
希望这会有用。
来源连结:http : //www.yuiblog.com/blog/2008/12/05/imageopt-4/
来自@Fordi的评论(如果愿意,请不要忘记竖起他的评论):如果您不喜欢模糊,请-sampling-factor 4:2:0
改用。这样做是将色度通道的分辨率降低到一半,而不会干扰您的眼睛锁定的亮度分辨率。如果要在转换中获得更好的保真度,则可以通过指定-define jpeg:dct-method=float
-即使用更准确的浮点离散余弦变换而不是默认的快速整数版本来在不增加文件大小的情况下进行一些改进。
mogrify -strip -interlace Plane -gaussian-blur 0.05 -quality 85% *.jpg
。在运行该命令之前,请确保已备份。它将在适当位置写入。
-strip
为我做了。谢谢
mogrify -strip -quality 75% *.jpg
。脱衣舞很好。0质量损失,并节省大量空间。质量为75%的产品与100%的产品几乎没有区别,但占据了一半的空间。
我正在使用Google Pagespeed Insights图像优化指南,对于ImageMagick,他们建议以下内容:
-sampling-factor 4:2:0
-strip -quality
85 [它可以变化,我使用范围60-80,这里的数字越小意味着文件越小]
-interlace
-colorspace RGB
ImageMagick中的命令:
convert image.jpg -sampling-factor 4:2:0 -strip -quality 85 -interlace JPEG -colorspace RGB image_converted.jpg
使用这些选项,我可以节省多达40%的JPEG大小,而不会造成太多可见损失。
只是对那些在PHP中使用Imagick类的人说:
$im -> gaussianBlurImage(0.8, 10); //blur
$im -> setImageCompressionQuality(85); //set compress quality to 85
一旦我需要调整相机的照片大小以进行显影:
命令:
mogrify -quality "97%" -resize 2048x2048 -filter Lanczos -interlace Plane -gaussian-blur 0.05
而且我的1920x1080分辨率监视器在全屏上看不到任何变化。2048分辨率最适合以360 dpi的最大质量显影10厘米的照片。我不想剥离它。
编辑:我注意到我甚至得到更好的结果而不会模糊。不模糊文件大小是原始大小的50%,但是质量更好(缩放时)。
我会添加一个有用的旁注和一个一般性建议,以最小化JPG和PNG。
首先,ImageMagick读取(或更好的“猜测”)输入的jpeg压缩级别,因此,如果根本不添加-quality NN
,则输出应使用与输入相同的级别。有时可能是一个重要功能。否则,默认级别为-quality 92
(请参见www.imagemagick.org)
这个建议是关于一个非常棒的免费工具ImageOptim,它也适用于批处理。
您可以获得较小的jpg(以及png),尤其是在使用免费的ImageAlpha(不是批处理)或免费的Pngyu(如果需要批处理)之后)。
这些工具不仅适用于Mac和Win,而且适用于命令行(我建议使用Brew进行安装,然后在Brew公式中进行搜索)。
@JavisPerez-有什么方法可以将该图像至少压缩到150kb?那可能吗?我可以使用哪些ImageMagick选项?
请参阅以下链接,其中ImageMagick中有一个选项可以指定用于写入JPG文件的所需输出文件大小。
http://www.imagemagick.org/ 用法/ formats /#jpg_write http://www.imagemagick.org/script/command-line-options.php#define
-define jpeg:extent={size}
As of IM v6.5.8-2 you can specify a maximum output filesize for the JPEG image. The size is specified with a suffix. For example "400kb".
convert image.jpg -define jpeg:extent=150kb result.jpg
除了由于降低输入中的-quality值而导致的任何损失之外,您还将通过解压缩和重新压缩而损失一些质量。
在这里做了一些实验,男孩做过高斯模糊带来了很大的不同。我使用的最后一条命令是:
mogrify *-采样因子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);
}
}
如果图像尺寸较大,不调整大小就很难获得良好的结果,下面是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
我将其用于扫描的黑白页面,使它们成为灰度图像(额外的参数会清除前一页的阴影):
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