我想用ImageMagick压缩JPG图像文件,但是不能在尺寸上有太大差异。默认情况下,输出大小大于输入。我不知道为什么,但在添加一些+配置文件选项并设置质量后,我可以获得更小的尺寸,但仍然与原版相似。
输入图像为255kb,处理后的图像为264kb(使用+ profile删除配置文件,设置质量为70%)。有没有办法将该图像压缩到150kb至少?那可能吗?我可以使用哪些ImageMagick选项?
答案 0 :(得分:383)
我总是使用:
应该是
convert -strip -interlace Plane -gaussian-blur 0.05 -quality 85% source.jpg result.jpg
希望这很有用。
来源链接:http://www.yuiblog.com/blog/2008/12/05/imageopt-4/
来自@Fordi的评论(如果你愿意的话,不要忘了竖起他的评论):
如果您不喜欢模糊,请改用-sampling-factor 4:2:0
。这样做可以将色度通道的分辨率降低一半,而不会影响眼睛锁定的亮度分辨率。如果你想在转换中获得更好的保真度,你可以通过指定-define jpeg:dct-method=float
来获得略微改进而不增加文件大小 - 也就是说,使用更精确的浮点离散余弦变换,而不是默认的快速整数版本。 / p>
答案 1 :(得分:40)
我使用Google Pagespeed Insights图片优化指南,对于ImageMagick,他们建议使用以下内容:
- 采样因子4:2:0
-strip
- 质量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尺寸而不会有明显的损失。
答案 2 :(得分:16)
对于那些在PHP中使用Imagick类的人说:
$im -> gaussianBlurImage(0.8, 10); //blur
$im -> setImageCompressionQuality(85); //set compress quality to 85
答案 3 :(得分:12)
我需要调整相机中的照片以进行开发:
命令:
mogrify -quality "97%" -resize 2048x2048 -filter Lanczos -interlace Plane -gaussian-blur 0.05
我用1920x1080分辨率显示器无法看到全屏变化。 2048分辨率最适合以360 dpi的最高质量拍摄10厘米的照片。我不想剥夺它。
编辑:我注意到,即使没有模糊,我甚至可以获得更好的效果。没有模糊文件大小是原始的50%,但质量更好(缩放时)。
答案 4 :(得分:9)
我会添加一个有用的旁注和一般建议,以尽量减少JPG和PNG。
首先, ImageMagick 读取(或更好的"猜测" ...)输入jpeg压缩级别,所以如果你没有&#39 ; t添加-quality NN
,输出应使用与输入相同的级别。有时候可能是一个重要的特征。否则,默认级别为-quality 92
(请参阅www.imagemagick.org)
建议是关于一个非常棒的免费工具ImageOptim,也适用于批处理
您可以获得更小的jpgs(以及pngs,尤其是在使用免费的ImageAlpha [非批处理]或免费的Pngyu之后,如果您需要批处理)。
不仅如此,这些工具适用于Mac和Win以及命令行(我建议使用Brew进行安装,然后使用Brew公式进行搜索)。
答案 5 :(得分:7)
我在建议的命令中添加了-adaptive-resize 60%
,但是-quality 60%
。
convert -strip -interlace Plane -gaussian-blur 0.05 -quality 60% -adaptive-resize 60% img_original.jpg img_resize.jpg
这些是我的结果
我不确定这种转换是否会破坏我的形象,但老实说,我认为我的转换看起来不像废话。这是一个广角全景,我不关心细致的阻碍。
答案 6 :(得分:4)
@JavisPerez - 有没有办法将该图像压缩到150kb至少?就是它 可能?我可以使用哪些ImageMagick选项?
请参阅以下链接,其中ImageMagick中有一个选项,用于指定写入JPG文件所需的输出文件大小。
http://www.imagemagick.org/Usage/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
除了因输入降低质量值而导致的任何损失外,您还会通过解压缩和重新压缩来降低质量。
答案 7 :(得分:3)
有些人在这里试验自己和男孩做了Gausian模糊做了一个很好的不同。我使用的最后一个命令是:
mogrify * -sampling-factor 4:2:0 -strip -quality 88 -interlace Plane -define jpeg:dct-method = float -colorspace RGB -gaussian-blur 0.05
没有Gausian模糊0.05,它大约是261kb,对于我正在测试的图像,它大约是171KB。具有大型复杂图像的1440p显示器的视觉差异在您缩放方式之前不明显。
答案 8 :(得分:3)
以下是在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);
}
}
答案 9 :(得分:1)
一个非常古老但很有帮助的答案。
我要说的是,对于严肃的大型摄影,-gaussian-blur
是不可接受的,而不是压缩率。
在下面比较,带有 -gaussian-blur 0.05
的 %95 与没有模糊的 %85。原始 17.5MB(8MP 有很多失败),%95 不模糊 5MB,%85 不模糊 3036KB,%95 模糊 3365KB。
Comparing between blurring and compress ratio
也许像 0.02 这样的低模糊效果会更好。
答案 10 :(得分:0)
如果图像尺寸大,如果不调整大小就很难获得好的结果,下面是60%的调整大小,在大多数情况下不会破坏太多图像。
我将其用于灰度图像(从PNG转换)效果很好:
[
{
EventStartDate: "2019-12-03T00:00:00",
IsFeatured: false,
EventCategories: [
"Exhibition"
],
Location: "{"values":{"en-GB":"Paris, France"},"dtdGuid":"1355073c-2e61-439a-a8a7-2f3c1263d6a2"}",
SyncId: "17119-PGPI"
}
]
我将其用于扫描的黑白页面,使它们成为灰度图像(多余的参数清除了前一页的阴影):
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