ImageMagick convert 中的 sample/resample/scale/resize/adaptive-resize/thumbnail 运算符有啥区别?

Posted

技术标签:

【中文标题】ImageMagick convert 中的 sample/resample/scale/resize/adaptive-resize/thumbnail 运算符有啥区别?【英文标题】:What is the difference for sample/resample/scale/resize/adaptive-resize/thumbnail operators in ImageMagick convert?ImageMagick convert 中的 sample/resample/scale/resize/adaptive-resize/thumbnail 运算符有什么区别? 【发布时间】:2012-01-20 23:37:38 【问题描述】:

我发现了多种使用 convert 更改图像分辨率的方法:

-sample
-resample
-scale
-resize
-adaptive-resize
-thumbnail

它们有什么区别?

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

【问题讨论】:

这个 URL - ImageMagick v6 Examples -- Resize or Scaling 应该可以帮助你。 有关更多信息,请参阅imagemagick.org/Usage/filter 和imagemagick.org/Usage/filter/nicolas 【参考方案1】:

调整大小

-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),使用非常简单的算法对像素进行二次采样:简单地跳过一些行和列。

-samplegeometry 参数不支持任何 offset 部分(与 -resize 不同,它尊重 offset 指令输出)。

输出永远不会有比输入图像更多(不同)的颜色;不过它的颜色可能会更少。

因此-sample 非常快(比-resize 快)- 但输出质量(通常)更差:您很容易在结果输出中获得极端的blocking 和aliasing 效果。

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

重采样

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

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

如果源图像的格式缺少对图像分辨率的内部支持,则必须通过命令行上的-density 指定(假定的)图像原始分辨率优先指定-resample 分辨率。

规模

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

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

放大时,它只是复制相应的输入像素以获得所需的附加像素。

自适应调整大小

-adaptive-resize 400x300 不支持(或忽略,如果设置)geometry 参数的 offset 部分,也忽略 @ 987654364@ 设置(如果存在)。

在调整大小时默认使用data-dependent triangulation(除非通过另外指定-filter [something] 覆盖调整大小方法)。

缩略图

-thumbnail 的工作方式与 -resize 类似,但有一些区别:

它针对速度进行了优化。

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


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

ImageMagick crop command not giving perfect result

【讨论】:

谢谢,这比 ImageMagick 文档更有意义。 如果你有示例图片,那就更完美了:-) @KurtPfeifle:首先,感谢您提供的信息丰富的回答。拜托,你能为Imagemagick推荐任何好书或文档pdf。我现在最好的方法是刮掉 Imagemagick 的所有页面以减少阅读时间,但它包含大量信息(在我看来,这些信息并不总是足够具有描述性)。任何帮助都非常感谢。 我知道已经过了一分钟,但我只是想让你知道这个答案有多么有用。您是否碰巧知道ImageMagick 的最新版本是否改变了这一切?

以上是关于ImageMagick convert 中的 sample/resample/scale/resize/adaptive-resize/thumbnail 运算符有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

使用 ImageMagick/convert 创建半透明 PNG

Linux使用imagemagick的convert命令压缩图片节省服务器空间

使用convert(ImageMagick)批量压缩图像

Imagemagick convert -fill不会更改特定调色板区域的边缘

图片处理命令行工具ImageMagick介绍

神奇手imagemagick学习笔记