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
),使用非常简单的算法对像素进行二次采样:简单地跳过一些行和列。
-sample
的 geometry 参数不支持任何 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
设置。
在缩小时,它只是通过将各个输入像素颜色平均在一起来替换像素颜色来改变图像大小。
放大时,它只是复制相应的输入像素以获得所需的附加像素。
自适应调整大小
在调整大小时默认使用data-dependent triangulation(除非通过另外指定
-adaptive-resize 400x300
不支持(或忽略,如果设置)geometry 参数的 offset 部分,也忽略 @ 987654364@ 设置(如果存在)。
-filter [something]
覆盖调整大小方法)。
缩略图
-thumbnail
的工作方式与-resize
类似,但有一些区别:
它针对速度进行了优化。
它还会删除任何嵌入的颜色配置文件以减小缩略图的文件大小。
以下答案显示了-resize
指令的一些(图解!)示例。每个插图显示不同的结果,具体取决于精确调整大小方法的“细节”:
【讨论】:
谢谢,这比 ImageMagick 文档更有意义。 如果你有示例图片,那就更完美了:-) @KurtPfeifle:首先,感谢您提供的信息丰富的回答。拜托,你能为Imagemagick推荐任何好书或文档pdf。我现在最好的方法是刮掉 Imagemagick 的所有页面以减少阅读时间,但它包含大量信息(在我看来,这些信息并不总是足够具有描述性)。任何帮助都非常感谢。 我知道已经过了一分钟,但我只是想让你知道这个答案有多么有用。您是否碰巧知道ImageMagick
的最新版本是否改变了这一切?以上是关于ImageMagick convert 中的 sample/resample/scale/resize/adaptive-resize/thumbnail 运算符有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
使用 ImageMagick/convert 创建半透明 PNG
Linux使用imagemagick的convert命令压缩图片节省服务器空间