ImageMagick转换中的sample/resample/scale/resize/adaptive-resize/thumbnail运算符有什么区别?

est*_*est 83 imagemagick thumbnails

我找到了多种方法来改变图像的分辨率convert:

-sample
-resample
-scale
-resize
-adaptive-resize
-thumbnail
Run Code Online (Sandbox Code Playgroud)

那些有什么区别?

如果我需要制作具有固定宽高比(需要裁剪)的各种尺寸的大图片缩略图 - 我最好的选择是什么?

Kur*_*fle 133

调整

-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) - 但输出质量(通常)更差:您可以轻松地在结果输出中获得极端阻塞混叠效果.

  • 一个重要的特征-sample是新图像不包含任何新颜色,尽管原始图像中的某些颜色可能会消失.

重采样

-resample使用所需XxY 分辨率作为参数,而不是目标图像的XxY像素几何.此运算符的目的是保留图像的渲染大小:假设您的图像在设备上的尺寸为4英寸x 3英寸,使其处于300 DPI.然后要求a -resample 72-resample 72x72将调整图像大小,使其在72 DPI设备上再次测量4英寸×3英寸.

  • 此操作仅适用于已在其元数据中存储所需分辨率的图像(并非所有图像格式都支持图像分辨率的概念 - JPEG,PNG和TIFF).

  • 如果源图像是在用于图像分辨率内部支撑缺少格式,则图像的(假设的)原始分辨率必须通过指定-density在命令行上之前,以指定-resample的分辨率.

规模

-scale 400x300产生相同的结果(但更快,因为它避免了所有的过滤处理),就像使用-filter box -resize 400x300.它也完全忽略了任何当前-filter设置.

  • 在缩小时,它仅通过将各个输入像素颜色平均在一起来替换像素颜色来改变图像大小.

  • 放大时,它只是复制所需的附加像素的相应输入像素.

自适应调整大小

-adaptive-resize 400x300不支持(或忽略,如果设置)几何参数的偏移部分,并且如果存在则忽略该设置.-gravity

缩略图

-thumbnail工作就像-resize那样,有一些差异:

  • 它针对速度进行了优化.

  • 它还会删除任何嵌入的颜色配置文件,以减少缩略图的文件大小.


以下答案显示了该-resize指令的一些(图示!)示例.每个插图显示不同的结果,具体取决于精确调整大小方法的"精细细节":

  • 谢谢,这比ImageMagick文档更有意义. (3认同)