ImageMagick转换中的sample / resample / scale / resize / adaptive-resize / thumbnail运算符有什么区别?
我发现了多种方法来改变使用convert
的图像分辨率:
-sample -resample -scale -resize -adaptive-resize -thumbnail
那些有什么不同?
如果我需要制作具有固定宽高比(裁剪需要)的各种尺寸的大图片缩略图 – 我最好的select是什么?
调整
-resize 400x300+20+30
(如-resize 400x300+20+30
和示例示例)将input转换为像素尺寸为400x300
的输出图像。 它还将输出向右移动20个像素,向底部移动30个像素。 另外,还有一些不同之处在于:
-
-resize
确实支持-filter
的额外设置( 在使用-resize
之前 ,这应该发生在命令行上)。 -
-filter
确定在放大的情况下用于添加像素的颜色的精确algorithm,或者在缩小的情况下删除其中一些邻居时用于其余像素的颜色。 -
有关支持的filter列表,只需运行
convert -list filter
。 -
-filter point -resize 400x300
创build与-filter point -resize 400x300
完全相同的结果,但运行速度仍然较慢。 -
如果没有设置(之前)
-resize
,转换将默默地默认为 –-filter Lanczos
这是较慢,但生成一个更好的质量(因为它考虑到所有周围的像素为新添加的颜色)比-filter point
产生(使用最近邻居规则来确定新添加的像素的颜色)。
样品
-sample 400x300
将input图像转换为像素尺寸为400x300
的输出图像。 但是,有一些非常重要的差异,
-
-sample
不支持-filter
的附加设置; 如果无论如何设置,那么简单地忽略-filter
器。 -
放大时(因为input的图像尺寸可能小于
400x300
),像素会以块的forms进行复制。 -
缩小时(因为input的图像尺寸可能大于
400x300
),像素采用一种非常简单的algorithm进行400x300
采样:一些行和列被简单地跳过。 -
-resize
的几何参数不支持任何偏移量部分(不同于-resize
,它表示输出的偏移量指令)。 -
输出永远不会有比input图像更多(不同)的颜色; 它可能会有更less的颜色。
-
因此 –
-resize
非常快(比-resize
),但是输出质量(通常)更糟糕:在结果输出中可以很容易地得到极端的阻塞和混叠效应。 -
一个重要的特征是新图像不会包含任何新的颜色,尽pipe原始图像中的一些颜色可能会消失。
重采样
-resample
使用所需的-resample
分辨率作为参数,而不是目标图像的XxY
像素几何体 。 这个操作符的目的是为了保留一个图像的渲染大小:假设你的图像尺寸为4英寸乘3英寸的设备呈现在300 DPI。 然后,要求“-resample 72
或“-resample 72x72
将调整图像大小,使其在72 DPI设备上再次测量4英寸x 3英寸。
-
此操作仅适用于已经在其元数据中存储了所需分辨率的图像(并非所有图像格式都支持图像分辨率的概念 – JPEG,PNG和TIFF)。
-
如果源图像的格式缺less对图像分辨率的内部支持,则必须在指定“
-resample
分辨率” 之前通过命令行上的-resample
指定图像的(假定的)原始分辨率。
规模
-scale 400x300
产生相同的结果(但速度更快,因为它避免了所有的filter处理),就像使用-filter box -resize 400x300
。 它也完全忽略了任何当前的-filter
设置。
-
缩小时,只需通过将各个input像素颜色平均在一起来replace像素颜色,即可改变图像大小。
-
放大时,只需复制所需的附加像素的相应input像素。
自适应resize
-adaptive-resize 400x300
不支持(或者忽略,如果设置) 几何参数的偏移量部分,并且还忽略-gravity
设置(如果存在)。
- 它在resize时默认使用与数据相关的三angular剖分 (除非通过额外指定
-filter [something]
覆盖resize方法)。
缩略图
-thumbnail
工作方式就像-resize
一样,有一些不同之处:
-
它针对速度进行了优化。
-
它还会删除任何embedded的颜色configuration文件以减less缩略图的文件大小。
以下答案显示了-resize
指令的一些(说明!)示例。 每个插图显示了不同的结果,具体取决于精确resize方法的“细节”:
- ImageMagick裁剪命令没有给出完美的结果