我发现有多种方法可以使用convert
更改图像的分辨率:
-sample
-resample
-scale
-resize
-adaptive-resize
-thumbnail
那些有什么区别?
如果我需要制作具有固定宽高比(需要裁剪)的各种尺寸的大图片缩略图 - 我最好的选择是什么?
调整
-resize 400x300+20+30
(如下面的-scale
和-sample
示例)将输入转换为输出图像,其像素尺寸为400x300
。它还将输出向右移动20个像素,向下移动30个像素。此外,还有一些与-scale
的差异:
-resize
确实支持-filter
的额外设置(在使用-resize
之前应该在命令行上发生!)。-filter
确定在放大的情况下用于添加像素的颜色的精确算法,或者用于在缩小的情况下移除其一些邻居时用于剩余像素的颜色。convert -list filter
即可。-filter point -resize 400x300
创建的结果与-sample 400x300
完全相同,但运行速度仍然有点慢。-resize
旁边(之前),转换将默默地默认为-filter Lanczos
,它更慢,但是它产生的质量要好得多(因为它考虑了所有新添加的像素的所有周围像素的颜色),而不是-filter point
产生的(使用最近邻规则来确定新添加像素的颜色。样品
-sample 400x300
将输入图像转换为输出图像,其像素尺寸为400x300
。但是,-resize
有一些非常重要的区别:
-sample
不支持-filter
的额外设置;无论如何设置,然后-filter
被忽略。400x300
),像素将以块的形式复制。400x300
),使用非常简单的算法对像素进行子采样:简单地跳过一些行和列。-sample
的几何参数不支持任何偏移部分(与-resize
不同,-sample
遵循输出的偏移指令)。-resize
非常快(比blocking快) - 但输出质量(通常)更差:你可以轻松地在结果输出中得到极端的aliasing和-sample
效果。-resample
的一个重要特征是新图像不包含任何新颜色,但原始图像中的某些颜色可能会消失。重采样
XxY
使用所需的XxY
分辨率作为参数,而不是目标图像的-resample 72
像素几何。此运算符的目的是保留图像的渲染大小:假设您的图像在设备上的尺寸为4英寸x 3英寸,使其处于300 DPI。然后要求-resample 72x72
或-density
将调整图像大小,使其在72 DPI设备上再次测量4英寸×3英寸。
-resample
分辨率之前通过命令行上的-scale 400x300
指定图像的(假定的)原始分辨率。规模
-filter box -resize 400x300
产生相同的结果(但更快,因为它避免了所有的过滤处理),就像使用-filter
一样。它也完全忽略了任何当前的-adaptive-resize 400x300
设置。
自适应调整大小
-gravity
不支持(或忽略,如果设置)几何参数的偏移部分,并且如果存在则忽略data-dependent triangulation设置。
-filter [something]
(除非通过另外指定-thumbnail
来覆盖resize方法)。缩略图
-resize
就像-resize
一样工作,但有一些区别:
以下答案显示了ImageMagick crop command not giving perfect result指令的一些(图解!)示例。每个插图显示不同的结果,具体取决于精确调整大小方法的“精细细节”: