ImageMagick 示例 -
常见图像格式
许多图像文件格式都有其特殊之处,在使用这些格式时需要牢记。本页面介绍了这些特殊需求以及改进这些格式结果的方法。
如您所见,此图像使用了透明灰色('
如您所见,即使图像已修改(所有 '
如果您想更改 GIF 文件格式使用的透明颜色,可以使用 "
如您所见,即使结果与原始图像在视觉上没有区别,透明颜色也已更改为 '
请注意,设置 "
如您所见,左侧绘制的圆圈的边缘(以 PNG 格式)在图像边缘看起来非常干净(尽管有点模糊)。您可以在其放大图中看到半透明像素。现在让我们使用 "GIF" 图像格式输出相同的图像...
结果是圆圈在圆圈外边缘沿有一个非常锐利的阶梯效果,而内部仍然正确地进行反锯齿。基本上,虽然 PNG 格式可以保存半透明像素信息,但 GIF 格式无法保存。GIF 图像格式只能保存单个纯透明颜色。换句话说...
您可能希望自己进行阈值处理,如果您不确定正在使用哪个版本的 IM(特别是较旧的版本),则建议您这样做。
如果您只是将此字母直接转换为 GIF 格式,甚至使用 "
第一张图像是正常保存到 GIF 格式的图像,如您所见,它将半透明像素的阈值设为 '
GIF 布尔透明度问题的其他大多数解决方案是将图像不可分割地绑定到其所在的网页的背景色。执行此操作的方法很复杂且很棘手,这就是我们现在要关注的内容。
看起来非常完美!当然,为了使此方法正常工作,您需要确切地知道将使用图像的背景色。此外,在我们完成之后,该图像在任何其他背景上都不会有什么用。这是一个很大的牺牲。
我已将网页设置为将我们的图像叠加在该背景上,即使该背景本身不属于图像的一部分。虽然使用的背景颜色与背景图案的整体颜色相匹配,但它仍然在其周围有一个非常明显的实心颜色矩形,缺少背景图案。一个实用的解决方案是将我们叠加的颜色声明为 GIF 输出中的“
这通常足以处理大多数 GIF 图像中的透明度,尽管它确实将图像绑定到特定的背景颜色。从本质上讲,我们使用透明度为图像设置一个基本轮廓形状,而不是真正的透明度。通过使用与背景图案匹配的叠加颜色和 GIF 透明度,它不再清楚图像在何处结束,以及背景图案在何处开始。
但是,请谨慎使用“
如果您在图像本身中使用了与背景颜色相近的颜色,它也会失败。因此,这种技术不推荐用于通用图像,而仅适用于特定情况。为了解决这个问题,我们使用“
现在,只要图像的边界不“泄露”,我们就可以在图像中使用与背景相似的颜色,而不会因为“过度模糊”而使它们变得透明。当然,如果我们的图像有“洞”,那么这些洞也必须得到处理。在这种情况下,以前的“模糊透明度”可能会更好地工作。确实说处理 GIF 透明度颜色很容易!不是的!
另一种技术,特别是对于具有锐利抗锯齿边缘的图像,是简单地添加背景颜色的最小轮廓。参见 轮廓或光晕透明度。
删除背景颜色... 尝试从现有 GIF 图像中删除特定背景颜色并不容易。如果叠加的图像也包含背景颜色,则特别困难,因为您实际上不知道什么是背景,什么是不是背景。最好的解决方案是获取相同的 GIF 叠加在两个不同且众所周知的背景颜色上的副本。有了这两个图像,您可以完美地恢复原始叠加及其所有半透明像素。参见 使用两个背景删除背景。如果您没有这两个图像,那么您无法完美地恢复图像的半透明度,但有一些技术可以完成合理但不完美的工作。有关此内容,请参阅 删除背景 的其他部分。
以类似的方式,还有几个其他抖动运算符,它们可以使用“
![[IM Output]](a_ordered_4x4.gif)
![[IM Output]](a_halftone_8.gif)
如您所见,“
另一方面,“
您可以使用更暗的中间色(如深灰色)而不是黑色作为阴影颜色来改善最终外观。通过这样做,颜色将倾向于更多地模糊到背景中,使抖动比上面显示的更不明显。如果您确实知道背景颜色的大致范围,您甚至可以使用更深的阴影颜色使阴影更好地弯曲,而不会限制自己使用特定的背景阴影。将两种方法稍微混合一下,以改善整体效果。基本上,您投入的努力越多,结果就越好。
如果对 JPEG 图像进行更改,使得顶部或左侧边界更改的量不是 8 的倍数,这种有损行为会变得更加明显。当这种情况发生时,JPEG 压缩“块”或“单元格”将完全不同,这会导致最终图像保存大小大幅增加。也就是说,诸如裁剪、修剪、修边、边框、框架、范围等操作(参见 裁剪和边框操作)可以将图像数据偏移一个不是 8 的倍数的像素。请参阅 IM 论坛讨论 裁剪图像导致意外的文件增大,以了解更多详细信息。
通常情况下,JPEG 数据的这种有损性质并不明显。但是,当您多次加载和保存 JPEG 图像或使用非常低的质量来显示具有明显颜色变化的图表时,它可能会变得明显。但是,只要您不反复加载或重新使用 JPEG 图像(保留并应用原始源的操作),它仍然是一种好的文件格式,即使对于它处理起来不太好的图像类型也是如此。作为这种有损 JPEG 性质的一个例子,我在这里生成一个简单的图像,包含两个拼接在一起的渐变。虽然渐变提供了一个 JPEG 处理得非常好的平滑颜色变化,但两种渐变之间的明显颜色变化处理得不好。
第一张图像是未失真 GIF 格式图像的放大视图(单击图像以查看或下载未放大的视图)。它只包含 20 种颜色,因此在这种情况下,GIF 格式可以完美地处理图像,并实际上生成一个非常小的文件大小(见下表)。另一方面,JPEG 版本的图像显示了 JPEG 压缩添加到保存的图像中的明显颜色失真,以使其能够更好地压缩。失真在蓝色色道中最大,这并不奇怪,因为人眼无法很好地分辨蓝色。也就是说,人眼天生会“散开”蓝色,因此 JPEG 算法利用了这一点(通过在内部使用 YCbCr 颜色空间)。事实上,如果没有上面的放大,你很难看到这种效果。让我们看看质量对图像的影响。
如果你仔细观察上面的第一个图像结果,我们以“
如您所见,此图像默认情况下在大型矩形数组中包含 216 种颜色。这种类型的图像不是非常适合保存为 JPEG 格式,这使其非常适合我们的目的。因此,让我们看看保存此图像的 JPEG 图像会产生多少种颜色...
也就是说,默认情况下,保存的 JPEG 文件包含几乎 9 倍的颜色!虽然结果看起来仍然像原始图像,但矩形区域的边缘会有一些颜色添加到附近。以最高质量设置保存不会在没有颜色失真的情况下保存图像...
如您所见,非常高的质量设置只会增加一些额外的颜色,但图像仍然会存在轻微(最小)的颜色失真。您还可以看到文件大小更大,因为压缩效果很小。现在让我们尝试“无损”...
仍然存在颜色失真!显然,我的 JPEG 库没有针对无损编码进行修补。但是请记住,只有另一个已修补的库才能读取这种无损 JPG 图像。或者,我建议编译您的 IM 以使用 JasPer 库和更新的 JP2 图像文件格式。
如您所见,Jpeg2000 格式切换到其他非无损图像压缩方法,但默认情况下不会使图像颜色失真。它还会对图像执行一些非常高的压缩方法。但是,使用更低的质量和新的 JP2 格式会再次引入颜色失真,从而生成更小的图像,就像普通 JPEG 图像文件格式一样...
有关使用 JPEG2000 编码器的更多信息,请参见 JPEG2000 编码参数文档。
如您所见,大多数这些程序都是为了处理 JPEG 图像元数据而设计的,而不会重新处理 JPEG 压缩图像。(参见下文)
缩略图... Brian Jackson <brian@brianjacksonphoto.com> 还报告说,大多数数码相机(例如他的佳能 1D)在其生成的 JPEG 图像中嵌入了一个大小在 12kb-25kb 之间的缩略图(160x120 像素)。IM 可以使用以下命令提取这些缩略图...
但是 "
与 IM 相比,这非常快,因为它不编辑图像,只是传输现有数据。但是,缩略图的质量远不如 IM 从真实图像中生成的缩略图,它们也可能不会被正确旋转,而且它们肯定不会是您想要的尺寸。使用 ExifTool... 来自 Rob,如果您希望对存储在 JPEG 图像文件中的配置文件进行更详细的编辑,而不是 "
花了一些时间才弄清楚,因为事实证明您需要先使用 SetNewValue 分配设置,然后使用 WriteInfo 同时加载和保存。混合 JPEG 质量图像,使用 JpegTrans... Wolfgang Hugemann {Auto@Hugemann.de} 希望 JPEG 图像的边缘不被压缩,因为它会影响照片处理。请参阅 此网站。Yuval Levy <imagemagick07_AT_sfina.com> 提供的解决方案是使用 "
如果您有一个具有二进制(开/关)透明度的 ImageMagick 图像,则 PNG 编码器将以有效的方式写入它,使用 tRNS 块而不是完整的 alpha 通道。但是,如果存在任何非 0 或 MaxRGB 的不透明度值,它将写入一个具有 alpha 通道的 PNG。您可以通过使用 "
您还可以通过使用更少的颜色来改进压缩算法结果,从而减小最终 PNG 图像的大小。
但是,这仅适用于不涉及透明度的小缩略图图像,并且仅作为最后一步,因为它是一种非常 '有损' 的技术。
请注意,如果透明度(或页面上的特殊 JAVA 脚本)在您的浏览器上工作,则图像应该仍然看起来正确。
但是请注意,这不会修改半透明像素,它们将保留其正常的(非透明)颜色,不会与页面背景或用于完全透明的颜色混合。由于不再涉及半透明,因此边框可能看起来参差不齐(锯齿状),以及较浅色边沿的“光晕”效果。例如,看看黑色和白色圆圈的边缘,它们显示了“锯齿”锯齿状效果。但是,使用灰色替换颜色应该会使它不像用于完全透明的原始“黑色”颜色那样糟糕。设置完全透明像素颜色的另一个优点是数据压缩的改进。有时,在处理过程中透明区域中使用的底层颜色会保留。反过来,这些颜色不像纯色那样压缩得好。因此,如上所述设置完全透明的颜色可以节省最终文件大小。但是,这应该作为最后一步完成,因为许多 IM 图像处理操作会将图像中存在的任何完全透明颜色替换回完全透明的黑色。有关已知执行此操作的操作符列表,请参见 Alpha 背景 操作符。对于 PNG 显示问题,我更希望微软修复 IE,而且似乎 IE 版本 7 最终将能够在所有情况下完全处理 PNG 透明度,
但是,即使 PNG 格式通常不会保存画布大小信息,IM 也会向 PNG 图像添加一些虚拟画布大小元数据。然而,这些数据仅可用于 IM 命令,并且通常会被其他 PNG 图像格式阅读器忽略。例如,第二个 “
如果 PNG 由某些非 IM 程序处理,则此画布大小元数据可能会丢失。请记住,画布大小信息通常不是 PNG 图像文件格式的一部分。需要注意的另一件事是“偏移”信息可以具有负偏移(与 GIF 格式不同),IM 将适当地处理这些信息,使其成为存储中间 图层图像 的良好格式。
有关更多信息,请参见 图像类型 I/O 设置。
您可以强制 IM 创建图像颜色索引表(或调色板),然后 IM 将使用 “
要强制使用单个 8 位灰度通道,但不要使用调色板索引图像,请使用...
您还可以(在 IM v6.3.5-9 中添加)输出带有透明度通道的灰度。
对于简单的双色图像...
PNG24 图像存在一种特殊情况。如果图像仅包含布尔透明度,并且所有透明颜色都相同,并且该颜色仅用于透明度,则 PNG 编码器将指定该特定颜色为透明。例如...
此图像没有调色板,但确实有一些开/关 alpha。alpha 通道的 -threshold 确保只存在布尔(开/关)透明度,而 Alpha 背景 选项确保所有完全透明的像素都是特定颜色。以上并不确保没有与该颜色相同的非透明像素,因此以上操作仍然可能失败。
大多数这些都是为了通过使用有损或无损技术来改进图像文件的最终大小。
常见配置文件(以及我关于它们的指向)包括...
上面中的 "
也就是说,文件 "
将 CMYK 转换为 RGB JPEG 的最佳解决方案是使用 "
但是,如果图像没有(或者您知道它是一个没有现有配置文件的 RGB 图像),您可以使用...
这将把结果图像设置为 CMYK USCoat.icm 配置文件。另一个 CMYK 配置文件是 SWOP.icm 配置文件。对于反向(图像已经具有配置文件)使用...
警告:如果原始图像已经包含配置文件,例如 CMYK 配置文件,那么给出两个配置文件转换是一个坏主意。例如
将导致 CMYK -> CMYK -> RGB 转换。但由于 CMYK 不是对称的,因此额外的转换步骤会导致灾难性的颜色转换。(参见 IM 论坛讨论 关于 ICC 配置文件转换行为的问题)
这将使用感知意图进行魔术处理,即默认值(参见 颜色空间转换,了解关于渲染意图的详细说明)。由于通过感知意图获得的结果可能会因用于创建 ICC 配置文件的软件而异,因此您可以使用 "
您可以从 国际色彩联盟 下载颜色配置文件。
如果图像包含配置文件,您可以使用此方法保存它,以便您可以将该配置文件添加到其他类似图像
或者您可以提取配置文件的文本版本,以便您可以对其进行编辑
例如,以下是一个由 fcaserio 在 IM 论坛 中贡献的配置文件。您可以使用以下命令将此配置文件添加到图像
该图像可以转换为包含 IPTC 配置文件的 EPS(封装的 Postscript)和 TIFF 预览(EPT)。(感谢 Tee Tanne)。
为什么这很重要?因为 IM 是一个“光栅图像处理器”,虽然它可以读取或写入存储在其中一种矢量格式中的图像,但它通过将图像转换为内部光栅图像来实现。因此,如果您尝试将图像从矢量格式转换为另一种矢量格式,IM 将基本上在当前定义的 分辨率或密度 下对图像进行光栅化,这将有望(但不太可能)适合您打算使用的输出设备。换句话说,IM 的任何输出都不会是真正的矢量格式。虽然它可以将内部光栅格式转换为矢量格式文件,但结果只是一个光栅格式图像周围的表面的矢量图像包装器。并且,除非光栅图像被正确定义(以正确的分辨率),否则结果不会特别好。不幸的是,对 IM 的新使用对这些一无所知。他们将 IM 看作一个转换器,可以将 PDF 转换为 Postscript,生成具有“块状”锯齿效果、“褪色”颜色或模糊图像的图像,这些图像在目标输出设备上看起来根本不好。这就是我试图说明的...
Windows 和 Ghostscript 有点更复杂,因为它需要使用 Windows 注册表。
有没有人想尝试创建委托?请告诉我们!你可能还想尝试使用 "
这两个命令生成的 PDF 文件比直接转换黑白页面的 PDF 文件小得多。但是,哪个更小取决于图像,并且无法在尝试和测试结果大小之前确定。
不幸的是,它不适用于 IM 创建的默认 PDF。 -- Sebastian Krause,来自 IM 用户邮件列表 多页 PDF 文档...您可以使用 perl 来合并多个 PDF 文件,而无需使用 IM 及其光栅化问题...
另请参阅 调整大小的梯度,其中使用 NetPBM 文本图像创建非常小的(2 到 4 像素)图像。上面也展示了“ASCII”子格式有多么有用。尤其是作为将图像添加到 shell 脚本或作为从数字数组生成图像的一种方式。例如,请参阅 TXT:枚举像素格式。直方图重新分配方法 示例中显示了此用法的一个示例。
请注意,当输出是纯文本时,行没有与图像行长度对齐。但您可以使用各种 UNIX 文本实用程序重新格式化输出。例如,您可以使用“
有关更多详细信息,请参阅 写入或剪切蒙版。
返回...
当 IM 调用 dcraw 进行转换时,使用 委托程序(使用 "
“
以上命令生成径向渐变图像,然后克隆并调整该图像以创建从红色到更亮的红橙色脉冲。然后将其复制以创建反向的 巡逻循环,然后再创建 30 秒的循环 MNG 动画。不幸的是,大多数 Web 浏览器目前不支持 MNG,许多视频播放器仅显示循环动画的一次播放。如果您单击上面缺少的图像帧,您可以下载动画并使用 IM Animate 命令 查看它。有关 MNG 格式的更多信息,请访问 MNG 网站。
对于构成来自电影或动画的序列的数千个文件中的每一个执行此命令显然需要很长时间。可以使用一个简单的脚本与 ImageMagick 结合使用,以自动为序列中的每一帧递增时间码。例如,请参见 Perl 脚本 dpx_timecode.pl。
上述内容的副本已添加到 IM 主要文档中,位于 运动图像格式简介。以上内容由 Seth Dubieniec <seth.info_AT_dubieniec.co.uk> 提供,来自 IM 论坛关于 DPX 格式的长期讨论。他目前正在开发 DPX 应用程序,因此可能会有更多 DPX 信息发布。
为了获得正确的颜色,需要“
“
将原始 RGB(或 GRAY)数据读入 ImageMagick 时,您需要指定图像的大小。例如..
这将准确定义 Imagemagick 将读取的数据量。有时原始数据可能附带了一些额外的标头信息。要允许 IM 跳过此信息,您可以在“
这是我所知 IM 将使用“
常见图像文件格式概述
有关读取和写入图像格式的介绍,请参阅 图像文件格式。IM 图像格式页面 列出了所有 ImageMagick 文件格式。以下是几种最常见的“正常”图像文件格式的简要概述,以及它们的优缺点...- GIF
- 这种格式非常常见,而且已经存在很长时间了,所有图像处理程序都支持它。但它只使用有限数量的颜色(256 色色表)并且只保存使用 8 位质量的图像。然而,它内置的游程长度编码可以非常有效地保存只有少数颜色的图像。虽然该格式支持透明度,但它只支持布尔(开/关)透明度,因此它会受到“混叠”或“锯齿”的影响。当保存为透明 GIF 图像时,纯文本细线会受到严重的影响。解决此问题的唯一方法是将 GIF 图像与网页中使用的特定背景相关联。GIF 格式可以保存多个图像以形成动画序列,并为此目的还保存图像画布大小和偏移量(页面)信息。但请注意,不支持负偏移量,尝试使用负偏移量会导致偏移量重置为零。它最适合用于卡通、线条图和小型图标等小型图像,这些图像的颜色有限,并且可以很好地压缩。但是,如果可以使用 PNG 等更新格式,则应避免使用它。
- JPEG
- 完全不支持透明度。图像等效于使用“
-alpha off
”操作删除 alpha 通道,因此任何背景透明度通常会根据用于生成图像的图像处理变成黑色。这种格式也是“有损”的,会在锐利的线条和边框上产生边缘效果,因此不应将其用于任何中间图像处理或存储图像原始文件(除非它们已经是这种格式)。它非常适合长期存储真实的照片,但如果打算进一步处理图像,或者图像包含大面积的纯色,则应避免使用它。 - PNG
- 这种格式旨在最终取代 GIF 和 TIFF 等旧格式。它是一种现代格式,能够处理 16 位质量,有四个颜色通道,允许完全使用半透明颜色。它还包括大量无损图像压缩选项。它最大的缺点是它还比较新,因此 Microsoft IE(v6) Web 浏览器不会自动正确处理它。但是,有一个解决方法可以解决此问题。该格式不会保存画布大小信息(而 GIF 会),但它会保存画布偏移量,甚至保存负偏移量(GIF 不支持),虽然一些 Web 浏览器在使用负偏移量时存在问题,因此不建议将其用于要在浏览器中显示的最终图像。对于保存中间“分层”图像,保存负偏移量的功能非常重要,并且通常比不保存画布大小信息更重要。
- MNG
- 这是 PNG 的多图像格式,允许将动画制作到电影质量水平和速度。需要一个使用 MNG 的简单示例,如果你有,请给我发邮件。MNG 动画格式似乎正在过时,并且已被一些 Web 浏览器(如 FireFox)放弃。
- TIFF
- 这是图像交换格式,它是在任何严肃的图像格式出现之前开发的,用于在程序之间传输高质量图像。不幸的是,由于这种起源,该格式已经过修改,包含了杂乱无章的各种功能和压缩样式,没有程序能全部理解它们。现在这种格式基本上只由 Windows 平台上的“
Photoshop
”使用,它是提供 TIFF 图像格式任何标准参考的唯一来源。TIFF 文件可以处理多个图像,尽管除了 IM 之外很少有应用程序可以处理多个图像 TIFF。通常情况下,除非 TIFF 图像的内部格式保持相对基本,否则无法保证由一个程序生成的 TIFF 文件可以被另一个程序使用,包括 IM 甚至“Photoshop
”本身。因此,我不建议使用这种格式!我建议您使用除 TIFF(或 JPEG)之外的其他格式,尤其是在长期存储图像时。我关于这种格式及其问题的少量说明在下面的 其他格式,TIFF 部分提供。这些使用说明是在 IM 邮件列表和论坛中找到的,因为我自己不使用也不需要使用 TIFF。 - 视频格式
- 其他电影质量动画格式通常基于使用有损压缩来减少电影的大小(和质量)。两种格式都处于不断变化之中,改进和安全性限制功能,使得任何形式的处理都变得很困难。据最后统计,有 200 多种视频格式“编解码器”被普遍使用,用于各种目的。由于这种原因,IM 不会直接处理这种格式,而是依赖于其他软件包来处理动画的单个帧的进出。这些“代理”程序包括“
mpeg2decode
”、“mpeg2encode
”和“mplayer
”。请参阅下面的 MPEG、M2V 和 AVI)。
![]() ![]() |
一些系统(如 Ubuntu)使用安全策略来禁用使用特定的图像文件格式。键入 magick -list policy 以查看系统上存在哪些策略以及它们从哪里设置。 |
GIF 图像文件格式
GIF 格式是一种非常广为人知的图像文件格式,因为它已经存在了非常非常非常长的时间(从 1980 年代后期开始)。它通常被用于要在涉及透明度或图像动画的网页上显示的图像。它也是唯一一种被所有 Web 浏览器绝对普遍理解的格式。不幸的是,它不是用于除线条图、图形、图表和卡通之外的任何其他事物的良好格式。也就是说,因为它被限制为最多 256 种颜色,其中一种通常被标记为透明。将图像中的特定颜色标记为透明有一些缺点。如果选择用于透明的颜色不好,可能会导致图像的其他部分透明,而这不是预期的。必须小心确保不会发生这种情况。此外,透明度功能是“布尔”的,这基本上意味着它要么完全打开,要么完全关闭。半透明颜色是不可能的,如果存在,需要将其设置为透明或不透明。这意味着该格式无法提供任何形式的图像边缘抗锯齿,通常会导致严重的“锯齿”。(请参阅 抗锯齿)由于“GIF”图像格式的颜色限制会导致很多问题,尤其是对于像 ImageMagick 这样的高质量图像处理软件包来说,我想直言不讳地说...
如果可能,请避免使用 GIF 格式。
如果您必须使用它,请仅将其作为最后一步。
最后,长期以来,GIF 使用的压缩算法都是获得专利的。因此,许多图像处理程序(如 ImageMagick)无法使用它。因此,非常旧的 IM 程序将输出未压缩的 GIF 格式图像,从而使用比应有的磁盘空间更多。您可以使用 GIF 批量压缩程序(如“如果您必须使用它,请仅将其作为最后一步。
Gifsicle
”或“InterGIF
”)来解决此问题。然而,由于专利已于 2004 年年中完全到期,当前版本的 IM 重新启用了 GIF 图像压缩功能。图像压缩也很简单,并且在包含大面积纯色或简单重复图案的图像上效果最佳,例如使用 有序抖动(不是 IM 中的默认抖动)生成的图像。最后,GIF 图像可以在一个文件中保存多个图像。这用于生成所有 Web 浏览器都能理解的 GIF 动画,因为该技术最初是由非常旧的“Netscape”浏览器引入的。总之,GIF 图像文件格式以其有限的颜色表、布尔透明度和简单的压缩(如果启用)而闻名,使其成为小型图像(如缩略图,尤其是包含大面积纯色的“卡通式”图标、徽标和符号图像)的理想选择。它的动画功能也使其成为生成你在万维网上到处看到的炫目引人注目的徽标和广告的理想方法。对于其他任何事情,它的局限性使其成为一种糟糕的图像文件格式,您可能需要改用 JPEG、PNG 或视频图像格式来满足您的需求。 GIF 有限颜色表
FUTURE: color reduction examples -- reference basic color dithering Ensuring that a specific color is present in the final GIF image Map color tables to color reduce. See Color Quantization.查看 高级 3-D 子弹脚本 以了解如何在一系列颜色上生成多个图像的示例。此技术也可用于自动将图像转换为多个图像,适用于多种不同的背景颜色和图案。
GIF 透明颜色
例如,这里我们使用 identify 来提取透明颜色,以及特定 GIF 图像文件用于表示透明度的颜色表。perl 脚本仅提取感兴趣的特定字段(可以是多行)。
|
![]() |
||
|
#CCCCCC00
'),此颜色在颜色表中具有单独的条目。您还可以看到,即使此图像仅使用 5 种颜色(一种透明),但使用的颜色表包含 8 种颜色。这是因为 GIF 文件格式只能使用大小为 2 的幂的颜色表。也就是说,颜色表始终为 2、4、8、16、32、64、128 或 256 种颜色条目大小。因此,最后 3 个颜色表条目未被使用。实际上,它们只是未被引用。在某些情况下,这些未使用的条目可能不是颜色表中的最后三个条目,实际上可能包含任何颜色值。您还可以实际拥有重复的颜色值,尽管如果 IM 以某种方式处理图像,则它通常会删除任何此类重复的颜色条目。从 IM 版本 6.2.9-2(以及某些较早版本)开始,IM 将在读取、处理和写入 GIF 图像时保留颜色表,更具体地说,保留透明颜色值。
|
![]() |
||
|
wheat
' 颜色像素被替换为 'white
' 颜色),但使用的透明颜色仍然保留。但是,如果最终图像没有透明度,则颜色表中的透明颜色条目 ('Alpha:
') 将被完全删除。
|
![]() |
||
|
-transparent-color
" 输出设置(在 IM v6.2.9-2 中添加)。例如...
|
![]() |
||
|
wheat
' 颜色的完全透明版本。如果您仔细观察,您还会发现图像现在在其颜色表中包含两种 'wheat
' 或 '#F5DEB3
' 颜色。也就是说,一种透明的小麦和一种不透明的小麦。从 IM 版本 6.2.9-2 开始,这不会造成任何问题。尽管 GIF 图像文件格式只能定义一种透明颜色。为什么要这样做?因为一些非常老的网页浏览器和图形程序不理解 GIF 透明度。因此,此选项可让您设置在这种情况下透明区域应是什么颜色。透明颜色的典型选择是现代浏览器的 'white
',或者更典型的是 'grey75
' ('#BFBFBF
'),这是原始的 "mosaic
" 网页浏览器页面颜色。其他流行的透明颜色选择是 'grey
' ('#BEBEBE
') 和 'silver
' ('#C0C0C0
'),这就是上面使用的 'hand' 图像所使用的颜色。这表明灰度颜色范围内该特定区域对于透明颜色而言有多么流行。未来:添加指向颜色选择的链接。![]() ![]() |
在 IM v6.2.9-2 之前,以及 "-transparent-color " 输出设置的创建之前,IM 通常会将图像的透明度保存为特殊颜色 'none '(完全透明的黑色),这在透明度失败时并不特别好。 |
-transparent-color
" 不会向 GIF 图像添加任何透明度,也不会将指定颜色变为透明。此选项的作用仅仅是指定应该放置在颜色表中的颜色,以用于表示 GIF 图像中透明颜色的颜色索引。如果要将特定(确切)颜色变为透明,请使用 "-transparent
" 颜色替换运算符。 GIF 布尔透明度
由于 GIF 格式不理解半透明颜色,并且 ImageMagick 默认情况下会将其正常 反锯齿方法 生成的半透明颜色作为一部分,因此当您将图像保存为此格式时,它通常看起来很糟糕。例如,这里我在透明背景上绘制一个简单的黑色圆圈。此外,我将生成图像边缘的放大视图,以清楚地说明正在发生的事情。首先,我将使用 PNG 格式输出...
|
![]() ![]() |
|
![]() ![]() |
GIF 格式具有开/关或布尔透明度
如果您仔细观察生成的 GIF,您会发现半透明像素可能已变为完全透明或完全不透明。![]() ![]() |
ImageMagick 对半透明像素的实际处理方式取决于您使用的 IM 版本。很长一段时间以来,它没有得到正确定义,而且一个版本的行为方式通常取决于由于用户错误报告而应用的最后一个“错误修复”。 从 v6.2.9-6 开始,ImageMagick 默认情况下应将 GIF 和 XPM 图像格式的图像阈值设置为 50%。这已成为图像处理程序使用的公认标准,同时仍允许您设置自己的处理 GIF 文件格式透明度问题的方法。 |
![]() ![]() |
由于 GIF 的局限性,IM 会在保存到 GIF 文件格式之前执行以下一组操作...
-channel A -threshold 50% if (fully-)transparent pixels are present it then... -quantize transparent -colors 255 otherwise if no transparent pixels present... -colors 256-colors 量化过程如果图像中存在的颜色少于该数量,则不会自动执行任何操作。如果图像具有有效的颜色映射(如 " +/-map " 所分配),它也不会执行任何操作。它也不尝试为多图像 GIF 文件使用通用颜色映射。因此,如果从一帧到下一帧的颜色差异很大,则可能会将本地颜色表添加到保存到 GIF 文件格式的每个单独图像中。 此外,上面使用的设置并非永久性的,而只是对要保存的图像的临时设置。也就是说,如果您使用 " -write image.gif ",则该过程中使用的设置不会影响以后的操作。
|
-threshold 50%
",也就是说,如果像素的透明度超过 50%,它将被设为完全透明(使用 "-transparent-color
" 设置中给出的颜色,如果已定义)。但是,您现在可以根据需要控制阈值级别。将 alpha 通道的阈值设为 50% 适用于大多数类型的图像。尤其是那些边缘简单的图像,但当您需要处理大面积半透明像素时,此技术会失效。这正是以下针对 GIF 处理的大多数示例要关注的内容。例如,假设我们想要保存一个带有 模糊半透明阴影 的图像,例如此图像(以 PNG 格式)...
|
![]() |
-threshold
" 操作来控制布尔透明度,您会非常失望。
|
![]() ![]() |
50%
',第二张图像是阈值设为 '75%
',允许更多半透明像素变为完全不透明(或可见)。如果您只想删除所有半透明像素(例如阴影),您可以尝试 "-threshold 15%
" 之类的方法,以删除几乎所有半透明像素。
|
![]() |
带有纯色背景的 GIF
我们真正想要做的是以某种方式保留半透明和反锯齿像素的阴影,并仍然在 WWW 上很好地显示它。为此,我们必须有点技巧。典型的解决方案是将图像与您要显示图像的背景相匹配。这很容易做到,只需在将图像保存为 GIF 格式之前,将其叠加到具有适当颜色的背景上即可。这消除了对任何形式透明度的需求,整个问题就变得无关紧要了。当然,有限的颜色数量仍然是一个问题,但通常不是一个大问题。
|
![]() |
带有背景图案的 GIF
但是,如果您使用的是某种背景图案而不是简单的纯色,该怎么办?您可以尝试将叠加层定位到背景图案的副本上,以便结果图像中的图案与网页的图案相匹配。但是,这将需要大量的反复试验才能使图像中的背景与网页相匹配。此外,您只能保证它适用于特定浏览器,并且只能适用于浏览器的特定版本。对于网页来说这不是一个好主意,所以根本不要尝试。我当然不会尝试。与其尝试与背景图案完全匹配,不如将图像叠加到至少与我们要使用的背景相匹配的颜色上。例如,让我们将图像叠加到 'typical' 泡泡状背景图案上。但首先,我们需要知道此背景的平均颜色。找到此颜色的一个简单方法是将图像 缩放到 单个像素,然后读取结果颜色。查看 IM 像素枚举文本格式 以详细了解使用的特殊 "txt:
" 输出格式。现在让我们使用 "-flatten
" 设置图像的背景透明度。
|
|
-transparent
”颜色。通过这样做,我们消除了图像的“方形”。此外,添加一个小型的 模糊因子 将改善结果并调整透明颜色使用的空间量,就像上面提到的阈值一样。
|
|
但是,请谨慎使用“
-fuzz
”设置,因为过度使用会导致图像外部以外的部分变得透明!
|
|
-alpha floodfill
”来设置我们要设置为透明的区域。
|
|
另一种技术,特别是对于具有锐利抗锯齿边缘的图像,是简单地添加背景颜色的最小轮廓。参见 轮廓或光晕透明度。
删除背景颜色... 尝试从现有 GIF 图像中删除特定背景颜色并不容易。如果叠加的图像也包含背景颜色,则特别困难,因为您实际上不知道什么是背景,什么是不是背景。最好的解决方案是获取相同的 GIF 叠加在两个不同且众所周知的背景颜色上的副本。有了这两个图像,您可以完美地恢复原始叠加及其所有半透明像素。参见 使用两个背景删除背景。如果您没有这两个图像,那么您无法完美地恢复图像的半透明度,但有一些技术可以完成合理但不完美的工作。有关此内容,请参阅 删除背景 的其他部分。
用于非特定背景的 GIF(或透明度抖动)
FUTURE: This will move into a more generalise (non-GIF specific), alpha dithering section.上述方法的最大问题是,它只有在你恰好知道图像将被使用的背景或背景图案是什么颜色时才有效。如果你不知道所有这些,也不要绝望。正如您在上面看到的,阈值不适用于具有大面积透明度的图像,例如模糊阴影。但另一种称为抖动的技术可以,并且不需要知道它将被使用的背景。抖动基本上将透明度限制为开/关值,使用像素图案在更大区域上创建半透明效果。换句话说,它模拟半透明度。这种方法在现在称为“负鼠示例”中进行了示例。不幸的是,这些示例实际上没有提供用于生成示例的命令。为了完整起见,我将尝试在此处再次演示它们。“
-monochrome
”运算符将图像中的所有颜色转换为纯黑白色“Floyd-Steinberg 错误校正抖动”。但是,由于它将灰度图像转换为纯黑白色,因此我们需要从图像中提取 Alpha 通道蒙版,对该蒙版进行抖动,然后将其返回到图像中。
|
![]() |
-channel
”设置(不像“-monochrome
”)限制为仅 Alpha 通道。
magick a.png -channel A -ordered-dither o2x2 a_ordered_2x2.gif magick a.png -channel A -ordered-dither o3x3 a_ordered_3x3.gif magick a.png -channel A -ordered-dither o4x4 a_ordered_4x4.gif magick a.png -channel A -ordered-dither checks a_halftone_2.gif magick a.png -channel A -ordered-dither h4x4a a_halftone_4.gif magick a.png -channel A -ordered-dither h6x6a a_halftone_6.gif magick a.png -channel A -ordered-dither h8x8a a_halftone_8.gif |
![[IM Output]](a_ordered_2x2.gif)
![[IM Output]](a_ordered_3x3.gif)
![[IM Output]](a_ordered_4x4.gif)
![[IM Output]](a_halftone_2.gif)
![[IM Output]](a_halftone_4.gif)
![[IM Output]](a_halftone_6.gif)
![[IM Output]](a_halftone_8.gif)
![[IM Output]](a_random_5x95.gif)
![[IM Output]](a_random_5x60.gif)
![[IM Output]](a_random_50x95.gif)
![[IM Output]](a_random_45x55.gif)
![[IM Output]](a_random_50x50.gif)
-ordered-dither
”会生成透明和不透明颜色的图案来表示整体透明度。但是,这会产生非常明显的规律图案。但是,如果您使用与普通背景类似但更暗的阴影颜色,则可以使这种图案几乎完全不可见。“checks
”图案(第二行上的第一个图像)特别有趣,因为它是一个非常简单的 3 级图案,非常干净整洁。![]() ![]() |
“-ordered-dither ”在 IM v6.2.8-6 中扩展了“半色调”抖动图案。然后,该运算符在 IM v6.3.0 中完全修改,并具有命名抖动图案(使用“-list threshold ”查看完整列表)。您甚至可以生成自己的抖动图案来生成其他特殊效果。有关更多详细信息,请参阅 有序抖动示例 和 有序抖动升级说明。在重新开发之前,参数只能包含几何字符串“ 2x2 ”、“3x3 ”和“4x4 ”(这仍然有效)。但是,任何其他内容都被视为“-random-threshold ”参数,通常会导致灾难性结果。在非常旧版本的 IM 上使用此选项时,需要谨慎。 |
-random-threshold
”会生成高度可变的随机抖动,每次运行都会有所不同。但是,这种抖动算法纯粹的随机性往往会产生大量的像素“块”,而不是由“Floyd-Steinberg”“-monochrome
”运算符生成的更平滑的算法放置抖动。“-random-threshold
”的最大优势是它提供的限制控制。通过使参数非常严格(例如,作为“50x50%”),您可以将“-random-threshold
”变成一个简单的“-threshold
”运算符。通过仅稍微放宽限制,您可以随机化阈值限制的边缘(例如,使用“45x55%”)。![]() ![]() |
“-random-threshold ”参数“PxQ ”,其中 P 是最小阈值,Q 是最大阈值(需要“%”符号)。所以“5x95%”表示低于 5% MaxRGB 的任何内容都设置为 0,高于 95% 的任何内容都设置为 MaxRGB ,否则我们将在 5% 和 95% MaxRGB 之间选择一个随机值作为该像素的阈值。参数“5x95%”值可能是大多数情况下最合适的价值。 |
FUTURE: dither example with a dither color matching the light blue background of this web page.
非 ImageMagick GIF 处理
giftrans | 列出 GIF 图像的所有属性和颜色表。它还可以将特定颜色索引设置为透明颜色,而不会修改图像颜色表的排序,也不会合并具有相同颜色的颜色索引(不推荐的做法)。我发现 IM“magick identify ”命令在列出图像属性(包括图像动画中使用的“马赛克应用程序扩展”中的“循环重复限制”)方面做得更好。另请参阅“gif2anim ”脚本(下面),该脚本以前使用此程序提取从提取的单个“帧”重建 GIF 所需的 GIF 图像元数据。现在,它仅使用“magick identify ”来提取此元数据。 |
GIFsicle | 这是一个通用的图像优化程序,其最初目的是在该算法仍在版权保护下时重新添加 GIF 图像的压缩。该程序还可以用于添加注释、创建 GIF 动画,以及以与 IM“-deconstruct ”运算符相同的方式优化此类动画,尽管它具有更进一步的透明度优化,例如 LZW 压缩优化。 |
InterGIF | 与 GIFsicle 类似的程序,专为处理动画 GIF 而设计。但是,它仅提供 透明度压缩优化。但是,其他功能可能也有用。请将您的意见发给我。 |
gif2anim | 一个 shell 脚本,它接受 GIF 动画文件,并提取所有单个帧图像,以及包含重建动画所需的所有 IM“magick ”设置的“.anim ”文件。从提取的帧图像中提取。 |
anim2gif | 上述脚本的反向,它接受包含所有 IM“magick ”设置的“.anim ”文件,并重建 GIF 动画图像。此脚本非常有用,可用于研究、编辑、调整和合并 GIF 动画文件。有关基本用法,请参阅 动画列表信息。另请参阅 附加动画(时间同步),以获取其实际使用示例。 |
GIF 图像偏移处理
虽然 GIF 格式将图像保存为偏移量,作为其图像动画处理的一部分,但它不会保存负偏移量。任何尝试将负偏移量保存到 GIF 图像的尝试都将导致偏移量重置为零。在设计 GIF 图像动画时,这可能会非常痛苦。如果 Internet Explorer Web 浏览器收到 GIF 图像,其“页面偏移量”将图像放置在“页面画布大小”之外的某个位置,它将忽略页面大小和偏移量,并将其显示为好像没有此类偏移量一样。另一方面,古老的 Mozilla Web 浏览器将只显示图像画布,并将偏移量应用于图像。这会导致显示一个没有图像数据的空画布,虽然这是正确的,但可能是意料之外的。两者都将使用页面画布大小显示图像,如果图像完全包含在该页面画布上,则使用相应的页面偏移量。相关 GIF 输出格式
- GIF87:以旧的 GIF 87a 格式输出图像。
- 如果“Mozilla”Web 浏览器看到这种旧格式,它将完全忽略图像的页面几何形状,并且不会使用更大的“页面”框架,也不会将图像偏移量与图像一起使用。IM 版本 6.0.4 及更早版本通常会生成 GIF89a 格式。但是,如果图像是一个 GIF 动画,并且使用 +adjoin 分割成单独的图像,Im 将使用 GIF87a,从而导致在 Web 浏览器中显示时产生不一致的结果。IM 在 v6.0.4 之后将始终生成 GIF 89a 图像格式文件,除非用户明确要求使用旧的“
GIF87:
”输出格式。
JPEG 图像文件格式
这种格式与上面提到的 GIF 格式 一样常见。但 GIF 旨在处理小型简单的“卡通”图像,而 JPEG 旨在处理大型的真实生活图像,包含多种颜色和色调,例如照片。JPEG 文件格式的一个关键特性是它的压缩功能,它可以减小图像大小,同时保持图像在人眼看来是可接受的。这是一个非常复杂的过程,超出了本次讨论的范围。有关此过程及其影响的更多信息,请参见 Jpeg 压缩简介。You Tube 视频 JPEG DCT,离散余弦变换 (JPEG Pt2)-Computerphile 也提供了一个非常详细的解释。不幸的是,为了更好地压缩图像,算法有意地丢失信息。保存的信息不是与内存中的图像相同;图像中特定像素或区域的颜色通常不完全与保存的颜色相同。这在图像中物体边缘附近尤为明显。所以,简单地说一下警告...
IM 是一款通用的栅格图像处理器,用于修改图像。
它不会进行无损 JPEG 修改。
如果您对无损处理感兴趣,请参阅 非 IM JPEG 处理。它不会进行无损 JPEG 修改。
如果对 JPEG 图像进行更改,使得顶部或左侧边界更改的量不是 8 的倍数,这种有损行为会变得更加明显。当这种情况发生时,JPEG 压缩“块”或“单元格”将完全不同,这会导致最终图像保存大小大幅增加。也就是说,诸如裁剪、修剪、修边、边框、框架、范围等操作(参见 裁剪和边框操作)可以将图像数据偏移一个不是 8 的倍数的像素。请参阅 IM 论坛讨论 裁剪图像导致意外的文件增大,以了解更多详细信息。
通常情况下,JPEG 数据的这种有损性质并不明显。但是,当您多次加载和保存 JPEG 图像或使用非常低的质量来显示具有明显颜色变化的图表时,它可能会变得明显。但是,只要您不反复加载或重新使用 JPEG 图像(保留并应用原始源的操作),它仍然是一种好的文件格式,即使对于它处理起来不太好的图像类型也是如此。作为这种有损 JPEG 性质的一个例子,我在这里生成一个简单的图像,包含两个拼接在一起的渐变。虽然渐变提供了一个 JPEG 处理得非常好的平滑颜色变化,但两种渐变之间的明显颜色变化处理得不好。
magick -size 5x10 gradient: gradient:blue-navy +append jpg_lossy.gif magick jpg_lossy.gif jpg_lossy.jpg |
![[IM Output]](jpg_lossy_mag.gif)

![[IM Output]](jpg_lossy_tn.gif)
magick jpg_lossy.gif -quality 100% jpg_lossy_100.jpg magick jpg_lossy.gif -quality 80% jpg_lossy_80.jpg magick jpg_lossy.gif -quality 50% jpg_lossy_50.jpg magick jpg_lossy.gif -quality 20% jpg_lossy_20.jpg magick jpg_lossy.gif -quality 5% jpg_lossy_5.jpg |
![[IM Output]](jpg_lossy_mag.gif)

![[IM Output]](jpg_lossy_100_tn.gif)
![[IM Output]](jpg_lossy_80_tn.gif)
![[IM Output]](jpg_lossy_50_tn.gif)
![[IM Output]](jpg_lossy_20_tn.gif)
![[IM Output]](jpg_lossy_5_tn.gif)
100%
”或最高质量保存了测试图像,仍然存在一些轻微的颜色失真。它很难看到,但确实存在。另一方面,使用更低的“-quality
”设置保存 JPEG 图像会使这种颜色失真变得更大,更明显。不仅如此,它还形成了一种边缘“阴影”,产生从锋利边缘扩展出来的“波浪”颜色变化。这种效应通常被称为 振铃伪影。但是,使用压缩的原因是生成图像的大小非常明显地减小了,至少最初是这样。以下列出了结果以及它们的大小(以字节为单位)。
请注意,在这种情况下,GIF 图像非常小,因为大的“颜色块”在 GIF 中压缩得非常好。随着 JPEG 质量的降低,图像的大小也变得越来越小。默认质量设置,在用户或源图像格式文件没有设置 JPEG 质量的情况下,大约为 92%,这是一个非常高的质量。但是,使用低于“50%
”的质量设置,图像大小在文件大小节省方面不会变得更小,只会产生更明显的图像退化。这是一个边际效益递减的过程。总之...
JPEG 会丢失信息,在保存时会导致图像退化。
在处理过程中使用其他格式保存中间图像。
只在最终图像中使用 JPEG 格式,不要用于进一步处理。
JPEG 也不适合具有明显颜色变化的人工图像,例如线条图、图表或卡通图标、文本和符号。这类颜色数量较少的图像最好保存为调色板图像格式,例如 GIF 或 PNG8。一种新的 JPEG 图像格式,Jpeg2000,正在变得可用,它允许无损 JPEG 压缩。但是,这需要安装“JasPer”库。要使用这种特殊格式,还需要使用“在处理过程中使用其他格式保存中间图像。
只在最终图像中使用 JPEG 格式,不要用于进一步处理。
-compress jpeg2000
”选项或保存为 JP2 文件格式,以便 IM 调用正确的库。 JPEG 透明度 - 不支持
除了压缩之外,JPEG 用户面临的另一个主要问题是
JPEG 不会保存透明度
因此,虽然可以将图像叠加到背景颜色或图案上并保存为 JPEG,但无法为 JPEG 图像提供自由形式的边框或带有透明孔洞的边框。由于 JPEG 是为了保存真实世界的图像而设计的,而不是图像的各个部分,因此透明度不是创建格式时需要考虑的问题。因此,设计者从来没有考虑在文件格式中包含 alpha 通道或其他透明度信息。例如,让我们使用上面提到的具有透明度的 PNG,并将其直接用 magick 转换为 JPEG。如您所见,所有透明部分都变成了黑色。但根据图像源(特别是 GIF 图像),透明区域可能很容易变成其他随机颜色或其他不合适的颜色。如果这可能是一个问题,最好的办法是让 IM 移除 Alpha 透明度,然后再将图像保存为 JPEG 图像文件格式。 JPEG 颜色失真(测试)
如上所述,JPEG 使用的压缩算法是有损的。该图像将被修改以使其能够更好地压缩,从而减少文件空间,希望如此。颜色失真发生的程度取决于使用的质量设置。例如,让我们看看 IM 内置的“netscape:
”图像中包含多少种颜色...
|
|
|
|
|
|
|
|
|
|
|
|
读取 JPEG 控制选项
- -define jpeg:size={width}x{height}
- 此设置是针对 JPEG 图像库的一个提示,指示它只需读取足够的输入(JPEG)图像文件,以创建至少具有给定大小(宽度 × 高度)或更大的图像。如果输入图像很大,这可以大大减少 IM 读取图像所需的内存量,因为 IM 将处理更小的图像。这反过来可以显着提高整个操作的速度。请记住,这只是一个关于所需图像大小的提示,您不能保证获得此大小,只能获得接近但更大的大小。通常,您会得到介于此大小和两倍大小之间的图像,同时保持图像的纵横比。通常,在使用尺寸提示读取 JPEG 图像后,图像会立即调整大小以达到其最终的“精确”大小。通常使用“
-thumbnail
”来去除任何图像配置文件。例如...
magick -define jpeg:size=64x64 jpeg_large.jpg jpeg_size_hint.jpg magick -define jpeg:size=128x128 jpeg_large.jpg \ -thumbnail 64x64 jpeg_thumbnail.jpg请注意,此修饰符会导致 JPEG 库跳过读取整列和整行的像素。因此,它会产生类似于 采样调整大小运算符 的效果,包括其强大的 混叠伪影。因此,建议您至少指定最终“调整大小”的两倍,以避免此问题,就像上面示例中所示的那样。
在 IM v6.5.6-0 之前,此编码器设置是从“ -size
”设置中提取的。当用户使用“-size
”进行图像创建,但随后 JPEG 读取产生意外的结果时,这会导致问题。因此,将其更改为一个特殊的编码器设置。
在旧版本中,您可能需要使用“+size
”重置“-size
”设置,然后再读取 JPEG 图像,否则 IM 可能无法完全读取 JPEG 图像。
请注意,缩略图调整大小运算符 也使用相同的采样技术进行极大规模的调整大小操作,以快速减小图像大小,然后再进行正常的调整大小操作,尽管缩小到最终图像大小的 5 倍而不是两倍。大小差异是最终图像质量的问题。 - +profile '*'
- -strip
- 数字相机、扫描软件和其他图像处理软件(如“Photoshop”)保存的 JPEG 图像通常会添加大量的“程序注释”配置文件。这两种选项都可以在读取图像后将其从图像中删除。“
+profile
”运算符将删除图像中的所有颜色配置文件,而“-strip
”将删除图像可能具有的所有配置文件和元数据。另请注意,“-thumbnail
”是一个“-resize
”选项,它也会同时进行“-strip
”。另请参见 创建缩略图。- -type TrueColorMatte
- 由于 JPEG 不保存任何透明度形式,因此在读取时它将始终是完全不透明的,并且在内存中没有“alpha”通道。此设置将强制在选项后读取的任何 JPEG 图像在内存中添加完全不透明的“alpha”通道。但是,更好的方法是在读取图像后使用“
-alpha set
”或“-alpha set
”,因为它对其他图像格式的读写影响较小。有关更多信息,请参见 读取和写入时的图像类型 和 Alpha 设置。
写入 JPEG 控制选项
默认情况下,在将 JPEG 图像写回时,使用读取 JPEG 图像时找到的“-quality
”和“-sampling-factor
”。但是,这可能不会在磁盘上产生相同的文件大小,并且由于读取和重新保存 JPEG 图像,您将始终进一步降低图像质量。但是,JPEG 量化表不会保留。
- -quality {百分比}
- 这可能是保存 JPEG 图像时更重要的选项,因为它控制着将图像保存到磁盘时压缩的程度。该值不是大小百分比,而只是一个质量值。该值越低,图像越小,丢失的图像信息越多,产生更多的伪影,并降低图像质量。
FUTURE: VERY low quality example of a photo注意:质量设置为“100%
”不能保证在没有任何质量损失的情况下保存图像,只是最小的损失。(参见下一个选项)注意:您无法确定获得特定文件大小的质量,只能通过反复试验来确定。从“-quality
”为 75% 开始,检查生成的文件大小。如果太大,则将质量降低 10%;如果太小,则增加。在您有了质量的下限和上限后,执行二分搜索以找到最符合您所需文件大小的质量。总共五到六次试验应该就足够了。- -define jpeg:extent={大小}
- 从 IM v6.5.8-2 开始,您可以为 JPEG 图像指定最大输出文件大小。大小以后缀指定。例如“
400kb
”。它通过生成 JPEG 图像的多个版本来工作,对输出质量“-quality
”设置进行二分搜索,直到它尽可能接近给定的文件大小而不超过它。它通过将图像重复写入临时文件来实现,一旦它具有适当的质量大小,它就会将最终图像输出到给定的输出文件名。因此,输出在将最终图像输出到管道或直接输出到网络时仍然可以正常工作,而不仅仅是输出到真实文件。但是,不要期望此过程非常快,因为它需要 I/O 要求。可能慢 4 到 8 倍。如果您真的进行了计时比较,请将您的结果发给我。- -compress LossLess
- 虽然“
-quality
”设置为“100%
”仍然会产生略微不同的颜色(它仍然是“有损的”),但“-compress LossLess
”选项将要求 JPEG 库以不丢失任何数据的方式保存图像。因此,重新读取图像应该完全恢复为保存时的状态。警告:这只有在您的 JPEG 库已针对“无损 JPEG”编码进行修补时才有效,但 JP2 文件格式的使用已取代了此方法,因此此选项很少有实际效果。此外,您还必须设置“-quality 100%
”才能使此方法起作用。虽然直觉上您会认为以“LossLess
”方式保存将自动意味着使用 100% 的质量,但事实并非如此。这是由于为 JPEG 图像写入添加了一个不寻常的补丁,而 JPEG 图像写入本质上是一种有损格式。当然,生成的文件可能比普通的 JPEG 图像大得多。此外,您最终将得到一个无损压缩的 JPEG,您只能使用类似“修补”的 JPEG 库来读取它。因此,不建议使用“无损 JPEG”,而应该使用其他格式(如 PNG 或 JP2)。- -interlace Line
- 使用“渐进式 JPEG”样式,它允许您在加载大型 jpeg 图像时查看它。另请参见下面重新编码现有 JPEG 而不进一步丢失的非 IM 解决方案。
- -sampling-factor {水平}x{垂直}
- 调整 JPEG 库用于色度下采样的采样因子。这可以设置为“
2x1
”以创建 MPEG-2 动画文件。“2x2, 1x1, 1x1”是 IM 的标准子采样方法,对应于 4:2:0,请参见 维基百科,色度子采样。但是,当“质量”为 90 或更高时,通道不会进行子采样。基本上,它将定义处理“块”或“单元格”的大小是 8 个像素还是 16 个像素。- -density {Xdpi}x{Ydpi}
- 虽然密度对生成图像的输出像素大小没有影响。但是,上述设置存储在 JPEG 图像文件格式的 JFIF 标头中。不幸的是,某些程序(如 Photoshop)如果密度也存在于图像中存储的特定于 Photoshop 的特殊配置文件(“
8BIM
”)中,则会忽略此设置。密度在使用输出设备(如打印机或显示器)时才真正重要,因为它允许这些设备将图像按实际尺寸进行缩放。例如,确保您扫描的照片或页面以正确的尺寸打印出来。有关密度的更多信息,请参见 图像密度元数据 和 重新采样调整大小。- -type TrueColor
- 对于仅包含灰度值的图像,IM 将自动使用灰度内部格式。此设置将覆盖此行为,并强制 IM 始终生成彩色 JPEG 图像而不是灰度图像。有关更多信息,请参见 读取和写入时的图像类型。
- -define jpeg:optimize-coding=false
- 关闭此图像的最佳霍夫曼编码表的计算。默认情况下它是打开的。它确实需要对图像进行额外的传递,以进行必要的计算,但这是最小的。
- -define jpeg:q-table={路径}
- 定义包含自定义 JPEG 量化表的文件,以 XML 格式。示例表通常安装在“
/etc/ImageMagick/quantization-table.xml
”中,但它内置于 ImageMagick 中,因此通常不会使用。在 数字图像处理论坛 中可以找到许多关于生成表的讨论,在 JPEG 量化表、更好的 JPEG 量化表?、愚蠢的 PET 技巧 qtable of one、JPEG 亮度量化表 中有专门的讨论(在编写时)。此选项已添加到 IM v6.5.7-8 中。
JPEG 质量与文件大小
给定质量的 JPEG 文件的最终文件大小是不确定的。整个压缩过程非常复杂,微小的变化会导致压缩发生剧烈的变化。这是一个“蝴蝶效应”。即使是同一张源图片,使用相同的质量,但使用不同的 IM、JPEG 库或其他图像处理程序版本,您也会在文件大小和观察到的质量方面得到非常大的差异。您也可以将质量设置视为对特定图像应应用多少压缩或视觉质量的简单“猜测”。本质上,无法预先确定给定图像和质量设置的最终文件大小……除非实际操作。但是,IM 可以进行“测试运行”以发现特定文件大小应使用的最佳质量,方法是使用特殊的“jpeg:extent
”定义。请参见上面的 JPEG 写入控制。它非常慢,但比类似的 DIY 解决方案快。不建议这样做,不仅因为它很慢。通过您的固定文件大小方法,一个简单的图像可能会以 90% 的质量出现,但包含 50k 的不必要数据,而复杂图像则必须下降到 30% 的质量并出现 JPEG 伪影(或更不技术地说,它看起来很糟糕)由于缺乏用于表示细节的数据。更好的方法是找到一个单一的质量设置,该设置对您选择的图像产生平均文件大小为 100KB。即使这样,细节不多的图像可能只有 50k。而细节丰富的图像可能达到 150k,两者看起来都还可以接受。有关 JPEG 压缩和质量的实用指南,请参见 JPEG 压缩设置的优化。另请参见 JPEG 压缩、质量和文件大小,以了解 JPEG 内部细节。Photoshop 提示:Photoshop 将在 JPEG 图像中添加大约 4 KB 的额外信息以保存预览和颜色管理信息(配置文件“8BIM
”)。如果您不想要该信息,请使用“存储为 Web 所用格式”功能。此提示来自 Gernot Hoffmann 撰写的关于 JPEG 压缩的论文。相关 JPEG 输出格式
- PJEG:写入渐进式加载的 JPEG 图像。
- 在当今网络下载速度快的时代,这并不常用,但在拨号调制解调器盛行的时代很常见。基本上先写入每 N 行,然后在其间写入一行,以此类推,因此您甚至可以在下载完完整图像的一小部分后看到图像。
- JPEG2000:最新的 JPEG 格式,具有新的附加功能。
- 此格式需要安装“JasPer jp2”库,否则会出错。"此格式使用小波压缩来压缩图像,而不是标准的 JPEG DCT 方法。这为您提供了相同图像质量的更高压缩率。因此可以进一步减少磁盘空间。不幸的是,它还没有被广泛采用,因此您无法将其用于外部目的,至少在 Web 浏览器和其他图像查看器和编辑器也开始使用此格式之前是如此。使用此格式保存的任何图像只能由具有此库的用户读取,并且可能要很长时间才能让很大一部分用户使用此库。尤其是 Windows 用户,因为 Microsoft 可能不会包含它,除非有足够的人要求它。QuickTime 提示:QuickTime 使用 jp2 格式,但必须以“
no encode delegate for this image format
"-depth 8
”进行输出。
非 ImageMagick JPEG 处理(快速总结)
jpegtran | 与 JPEG 库一起安装的标准工具。这使您可以将各种变换应用于 JPEG 格式的图像,而无需解码和重新编码图像数据,从而避免 JPEG 数据退化。(见下文) |
jpegtrans | 虽然之前的 "jpegtran " 程序已经有了更新的版本,但许多新增的功能(例如无损裁剪)现在已经集成到了上面提供的分布式库版本中。 |
jhead | 一个更用户友好的无损 JPEG 处理器,尤其是在处理 EXIF 数码相机配置文件方面。它能够处理注释、日期调整、缩略图提取、删除或替换、配置文件剥离等操作。它还试图确保其他配置文件不被破坏,而这正是 "jpegtran " 容易犯的错误。还有其他类似的程序,例如 "ExifTool " 和 "Exifer "。许多 JPEG 到网页相册的程序也执行此操作。 |
![]() ![]() |
JPEG 无损旋转(上面所有程序都提供此功能)仅适用于尺寸可被 8 或 16 整除的图像。这适用于大多数(但并非全部)数码相机照片。如果您尝试对尺寸不规则的图像进行旋转,则右侧或底部边缘的块(包含部分尺寸)在最终图像中将不会被正确定位,因为这些块只能存在于右侧或底部边缘。 有关此问题的示例,请参阅此 特定讨论 |
无损 JPEG 处理
由于解码和重新编码 JPEG 图像会导致图像质量下降(除非使用无损压缩),因此 JPEG 图像库提供了一些特殊的程序,可以操纵图像,而不会损失质量。这些命令通常也比 IM 等效命令快得多,因为它们不必对图像进行太多处理。在修改 JPEG 图像中的注释时,可以使用较低级别的 JPEG 库程序 "rdjpgcom
"、"wrjpgcom
" 和 "jpegtran
"。但是,我建议您使用 "jhead
" 程序,因为它可以保留图像中存在的任何配置文件或其他信息。 "jpegtran
" 允许您进一步进行操作,并实际无损地操纵图像数据,包括 90 度旋转、裁剪和插入。它甚至允许创建混合质量的 JPEG 图像。有关演示,请参阅 Nemo Thorx 的 JPEGhack 页面。(参见下面的注释)但是,这些命令不推荐用于一般用途,因为它们仅限于 JPEG 图像的块边界(8 或 16 位)。也就是说,您只能在 JPEG 压缩单元级别进行裁剪、旋转或插入,而不能在实际像素级别进行操作。注释... 如果您正在创建 JPEG 照片的 蒙太奇缩略图网页索引页面,并且想使用您添加到 JPEG 文件中的注释,请使用上述程序,使用 "-label '%c'
" 告诉蒙太奇在读取文件名之前使用 '注释' 字段,在 "magick montage
" 命令行中。您也可以在 复杂的宝丽来变换 或 宝丽来蒙太奇 或某种类型的图像 注释 中使用该注释。 "jhead
" 程序可用于添加或修改 JPEG 图像文件中的注释。但是我发现使用 "编辑注释"("-ce
")选项不是一个好的方法,因为它在注释末尾添加了一个额外的换行符。此额外的换行符会破坏 IM 中命令('%c
' 标签格式化转义符)的使用。更好的方法是使用 "注释输入"("-ci
")来输入注释(末尾没有换行符),或者使用 "注释文字"("-cl
")选项,这是一种更好的方法...
|
|
jhead
" 程序也可以提取这些缩略图...
mkdir thumbs jhead -st "thumbs/&i" *jpg |
jhead
" 提供的功能,请查看基于 Perl 的 "ExifTool
" 的更多 EXIF 中心应用程序,一个替代的编译版本 "ExifTool
",以及一个 Windows GUI "Exifer
",仅举几例。在安装了 Image::ExifTool Perl 模块之后,这将无损地剥离所有 JPEG 元数据。我发现以下命令等效于剥离 EXIF 数据的命令行方法。如果有人将来感兴趣的话
use Image::ExifTool; $exifTool = new Image::ExifTool; $exifTool->SetNewValue('*'); # delete all... $exifTool->WriteInfo('original_image.jpg','modified_image.jpg'); $errorMessage = $exifTool->GetValue('Error'); print $errorMessage; # (if has value an error occurred) |
jpegtran
" 将低质量 JPG 插入高质量 JPEG 中...- 解决方案
- 使用 ImageMagick 生成同一图像的两个版本,一个为高质量 100,另一个为低质量 60(用于缩小尺寸)。
- 使用 jpegtran 裁剪 q60,每边削减 8 个像素
- 使用 jpegtran 将 q60 合并到 q100 的顶部
- 使用 jpegtran 将其合并到一个条带中
PNG 图像文件格式
这是最新且最现代的图像格式之一,支持 32 位颜色,包括 alpha 通道透明度,但也可以优化为 GIF 类似的 8 位索引颜色方案(256 种颜色限制)。因此,它成为图像处理的优秀中间格式,不会损失图像信息。PNG 压缩
当与 PNG 输出一起使用时,质量被视为两位小数。第一位(十位)是 zlib 压缩级别,1-9。但是,如果使用 '0
' 设置,您将获得霍夫曼压缩,而不是 'zlib' 压缩,这通常更好!很奇怪但确实如此!第二位是 PNG 数据编码过滤(在压缩之前)类型:0 是无,1 是 "sub",2 是 "up",3 是 "average",4 是 "Paeth",5 是 "adaptive"。因此,对于具有连续颜色序列的图像,"无" 过滤器 (-quality 00
) 通常更好。对于自然景观的图像,"自适应" 过滤 (-quality 05
) 通常更好。![]() ![]() |
PNG 编码器一直在不断改进,控制精确编码和压缩设置的更好方法通常使用 定义运算符 设置。 有关定义的更多详细信息,请参阅下面的 写入 PNG 图像控件,或者查看 PNG 编码器文件 " coder/png.c 源代码" 中的注释。 |
-type TruecolorMatte
" 图像读取设置强制执行此行为,或者您可以使用 "PNG32:
" 格式文件保存图像。一个外部程序 "pngcrush
" 或更新的版本 "OptiPNG
" 将尝试重新压缩特定 PNG 以获得最佳压缩效果,建议用于计划放置在网站上的图像。另一个程序 "pngnq
" 将对其进行颜色量化,使其成为一个 256 色、8 位 PNG,但目前尚不清楚此格式是否支持半透明颜色。 更好的 PNG 压缩
关于 PNG 图像的一点是,PNG 图像会保留完全透明像素的颜色。也就是说,即使您看不到它,透明度也有颜色,而 PNG 会保留这些数据。这意味着在许多情况下,PNG 可以通过将 '不可见颜色' 替换为静态的纯色来实现更好的压缩,而不是可能来自先前图像处理的垃圾颜色。您可以使用两种主要方法来执行此操作,使用 Alpha 背景运算符 仅处理完全透明像素,或者使用 模糊因子与透明度 类型操作来将近半透明颜色映射到完全透明黑色。例如,这里我采用上面生成的模糊阴影 "a.png
" 图像,并将所有透明度在 20% 以内的像素替换为完全透明黑色。如您所见,图像尺寸有了很大的改进(大约 50%)。但是,图像的阴影具有明显的截断。另一种选择是通过调整透明度通道 级别 使阴影效果更小。
magick a.png -channel A -level 20,100%,0.85 +channel \ -background black -alpha background a_compress2.png |
![]() |
![[IM Output]](a.png)
![[IM Output]](a_compress2.png)
magick image.jpg -thumbnail 200x90 -colors 256 \ -quality 90 -depth 8 thumbnail.png |
PNG、Web 浏览器和透明度
Microsoft Internet Explorer(IE 6 及更早版本)在涉及任何类型的透明度时无法正确显示 PNG。虽然这是最著名的不支持 PNG 的浏览器,但它并不是唯一的浏览器。 PNG 透明度测试 和 另一个 PNG 测试 页面可以让您测试您的浏览器。它们还列出了产生显示结果的浏览器和版本。但是,由于 IE(至少在撰写本文时)可能是最常见的浏览器,因此您可以在网页中添加一些解决此问题的变通方法。有关此方面的更多信息,请查看我的 WWW 实验室页面 PNG 带透明度和 IE,我在其中测试和演示了正在使用的 "PNG in IE" 解决方案。其他解决方案是将 PNG 使用 magick 转换为 JPEG(使用正确的背景颜色)或 GIF 格式。这些方法在 背景上的 GIF 图像 中进行了详细讨论。另一种解决方案是在将图像保存为 PNG 之前设置所有完全透明颜色的颜色。PNG 将保存该完全透明颜色,但请注意,几乎任何其他 IM 操作都会将完全透明重置为完全透明黑色(因为透明颜色应该无关紧要,因为这就是图像数学的工作方式)。例如,标准 IM 示例测试图像 对所有完全透明的像素使用完全透明黑色。我们可以通过关闭 alpha 通道或将其保存为 JPEG 来验证这一点...
|
![]() |
现在,让我们保存它,以便所有完全透明的颜色都替换为完全透明的 'silver ' 颜色(请参阅 Alpha 背景 运算符)...
|
![]() |
但是,如果我们关闭 alpha 通道(通过保存为不允许 alpha 的 JPEG),我们可以看到 PNG 图像确实对完全透明像素使用 'silver' 颜色。
|
![]() |
PNG 和虚拟画布
虽然通常 PNG 不会保存虚拟画布大小信息,但它会保存虚拟画布偏移信息,如果存在,IM 会尝试生成适合该偏移和图像大小的“画布大小”。对于一些图像操作符来说,这一点很重要,例如“-crop
”,“-trim
”和“-flatten
”等,它们使用图像画布或页面大小作为其操作或结果的一部分。当然,您可以使用“-page
”设置和“-repage
”操作符来设置或删除虚拟画布大小和偏移。(请参见 页面图像属性)。例如,第二个 IM “magick
” 看到此 PNG 图像中存在的偏移,并定义一个足够大的画布以确保图像在虚拟画布边界内可见(添加到 IM v6.1.7 中)...
|
![]() |
magick
” 命令确实看到了一些虚拟画布大小信息...
|
![]() |
![]() ![]() |
一些 Web 浏览器不能很好地处理负偏移,会导致奇怪的结果(一个版本的火狐浏览器存在此问题)。最好避免在可能被其他程序(如 Web 浏览器)使用的图像中使用负偏移。 |
PNG 分辨率、密度和单位
经过一些测试,似乎 PNG 图像文件格式不支持“-units
”设置的“PixelsPerInch
”,仅支持“undefined
”和“PixelsPerCentimeter
”。为此,IM 将给定的密度/单位设置转换为“PixelsPerCentimeter
”的适当值。有关此主题的更多内容即将推出。 PNG 子格式
PNG | 默认。使用经济的格式保存图像。 |
PNG8 | PNG 等效于 GIF,包括布尔透明度和 256 色色板。 |
PNG24 | 8 位 RGB 通道,无 alpha 通道。特殊情况可能包括布尔透明度(见下文) |
PNG32 | 强制使用具有完全半透明度的完整 RGBA 图像格式。 |
PNG48 | 16 位 RGB 通道,无 alpha 通道 |
PNG64 | 16 位 RGBA 图像(包括半透明度) |
PNG00 | 从输入图像继承 PNG 颜色和位深度。 |
![]() ![]() |
PNG8 由 PhotoShop 定义,而不是 PNG 组。虽然它可以处理多个半透明颜色以及完全透明的颜色,但 IM 假设它不能。这提供了一种方法来强制图像正常工作,并默认情况下可被 Internet Explorer v6 读取。“Photoshop CS ” 程序可以读取它。 |
![]() ![]() |
从 IM v6.8.2-0 开始添加了 PNG48、PNG64 和 PNG00 样式。 |
PNG8:
” 格式保存该图像...
magick {input_image} -type Palette indexed.png |
magick {input_image} -type GrayScale -depth 8 gray.png |
magick {input_image} -type GrayscaleMatte gray_with_transparency.png |
magick {input_image} -type BiLevel bitmap.png |
|
![]() |
写入 PNG 图像控制
为了更好地控制 PNG 图像的写入,Glenn Randers-Pehrson 针对 IM v6.5.2 修改了一些编码器 “定义全局设置
” 控件。这些包括...- -quality '{level}{filter}'
- 保存 PNG 图像时的基本压缩级别和过滤器。
-
-define png:compression-strategy=zs
-define png:compression-level=zl
-define png:compression-filter=fm
- 完全定义要用于写入的 PNG 图像的压缩系统。通常情况下,-quality 设置将设置 zl 和 fm 值,但不设置 zs 设置。
- -depth {depth}
- 要生成的图像的一般深度,通常设置为 8 位或 16 位。
- -define png:bit-depth={depth}
- 精确指定生成的 PNG 图像文件格式的深度。这将覆盖正常的 IM “
-depth
” 控件,但仅适用于写入 PNG 图像,并且仅在可以进行更改而不会造成损失时。在颜色映射图像的情况下,这是颜色映射索引的深度,而不是颜色样本的深度。 - -define png:color-type={type}
- 精确指定要写入的 PNG 文件的类型。值可以是
' 0
'对于灰度,它允许 “ bit-depths
” 为 2、3、4、8 或 16。' 2
'对于 RGB,它允许 “ bit-depths
” 为 8 或 16。' 3
'对于索引,它允许 “ bit-depths
” 为 1、2、4 或 8。' 4
'对于灰度蒙版 ' 6
'对于 RGB 蒙版 -define png:color-type='2'
” 特别有用,它可以强制将图像数据存储为 RGB 值而不是 sRGB 值。但是,可以使用线性 RGB 图像上的 “-set colorspace sRGB
” 来实现类似的效果。但是,不要期望程序在读取时会遵守此线性颜色空间。这包括 ImageMagick。 - -profile PNG-chunk-{x}:{file}
- 从 {file} 中的 {x} 位置添加原始 PNG 配置文件。{file} 的前 4 个字节包含块名称,后跟冒号 ':' 字符,然后是块数据。{x} 可以是 'b' 将配置文件放在 PLTE 之前,'m' 放在 PLTE 和 IDAT 之间,或者 'e' 放在 IDAT 之后。如果您想要写入多个相同类型的块,那么在 {x} 之后添加一个简短的唯一字符串以防止后续配置文件覆盖前面的配置文件。例如..
-profile PNG-chunk-b01:file01 -profile PNG-chunk-b02:file02
-
+set date:create
+set date:modify
- 这些是 ImageMagick 在读取文件时创建的图像“属性”。它们分别包含图像文件的创建时间(实际上是权限/所有者/移动更改时间)和最后文件修改时间。不幸的是,像 PNG 图像文件格式喜欢使用 PNG 图像文件格式写入此类图像数据,如果此数据不同,则生成的文件也将不同,即使没有其他更改。
magick logo: logo.jpg magick logo.jpg logo1.png sleep 2; touch logo.jpg # change the JPG file timestamp magick logo.jpg logo2.png diff -s logo1.png logo2.png magick compare -metric RMSE logo1.png logo2.png null:
diff
” 中将返回消息"即使 “Binary files logo1.png and logo2.png differ
"magick compare
” 返回了 “0 (0)
”,这意味着图像具有完全相同的图像数据。请注意,由于 IM 使用它刚刚读取的 PNG 文件的时间覆盖了这些属性,因此您无法使用 “magick identify
” 查看记录在 PNG 中的这些属性的实际值。解决方案是保存没有任何“时间戳”的 PNG 图像。magick logo: logo.jpg magick logo.jpg +set date:create +set date:modify logo1.png sleep 2; touch logo.jpg magick logo.jpg +set date:create +set date:modify logo2.png diff -s logo1.png logo2.png
diff
” 报告了..."此外,您还可以使用其他 UNIX 程序,例如 “Files logo1.png and logo2.png are identical
"cmp
”、“md5sum
” 或 “sha1sum
” 来比较二进制图像文件。后两种程序不能保证,但它们实际上不可能被欺骗,并且在比较多个文件(使用校验和)时速度更快。感谢 PNG 开发人员 GlennRP 的一些添加,您现在还可以使用 “-define png:exclude-chunk=date
” 来告诉 PNG 编码器不要写入与日期相关的文本块。
非 ImageMagick PNG 处理
有很多用于 PNG 的辅助应用程序,它们可能是生成最终 PNG 图像文件的有用辅助工具。pngtrans | 与图像一起存储的 PNG 信息 |
pngcrush | 尝试通过尝试使用所有可用的逻辑 PNG 压缩来压缩图像,然后对每个图像进行最终选择,找到 PNG 的最佳压缩。当然,这可能需要花费一些时间才能对每个图像进行压缩。 |
OptiPNG | 一种较新的 PNG 压缩优化器。 |
pngquant | 有损 PNG 优化器,将 PNG 图像缩减到 8 位色板,并进行抖动。它将构建带有 alpha 透明度颜色的索引颜色 PNG,这些颜色在 tRNS 块中传递。 |
pngnq | 一种较新的有损 PNG 量化器,用于生成 8 位色板 PNG 图像。还会强制使用色板。 |
pngout | Windows 平台 PNG 优化器(带有可选的 GUI),它使用针对空间而不是速度优化的 ZIP 压缩器(也在上面链接的页面上)。 |
图像配置文件
处理配置文件照片质量图像很重要,但是据我所知,这是一个非常神奇的艺术,而不是简单的事情。并非所有格式都使用配置文件,但大多数现代格式都使用。这包括 JPEG、PNG、TIFF 和(从 IM v6.3.4-1 开始)GIF。事实上,问题加剧了,因为许多程序甚至不理解或查找图像中的颜色配置文件。 Alan Gibson,又名 Snibgo,在他的个人 Snibgo,ImageMagick 配置文件 页面上总结了各种网络浏览器如何处理各种颜色配置文件。这值得一看。要列出图像中存在的配置文件,请使用...
magick identify -verbose image.tif | grep 'Profile-.*bytes' |
-
EXIF 数码相机元数据 ICC 图像颜色空间配置文件 ICM Microsoft 颜色管理(类似于 ICC) IPTC 图像和作者信息 8BIM Photoshop 元数据配置文件。包括关于:剪切路径... 还有什么? XMP Adobe 的可扩展元数据平台 (XMP)(参见 adobe 页面)
magick -define jpeg:size=64x64 image.jpg iptc:profile.iptc magick -define jpeg:size=64x64 image.jpg xmp:profile.xmp |
-define
" 选项用作对 JPEG 库的“提示”,以减少它实际读入内存的图像数据量,然后节省对您实际不打算使用的数据的大量处理。您还可以插入或重新插入一个任意的配置文件作为“blob”或包含您喜欢的任何信息的二进制字符串。
-profile 'profile_name:data_file' |
data_file
" 将“按原样”添加为图像的配置文件 profile_name。IM 或任何其他应用程序都会忽略此类配置文件,除非它特别了解它。 颜色配置文件基础
首先说几句...
颜色管理是为胆小鬼准备的 -- 不要玩弄它们
弄乱配置文件通常会使情况变得更糟
所以如果颜色看起来很好... 就让它保持原样。IM 论坛中的用户 fhoech(此后已消失)已多次发布以下使用颜色配置文件更改图像使用的颜色空间的基本介绍... RGB、sRGB 和 CMYK 不是颜色空间,它们是颜色系统(IM 使用 "弄乱配置文件通常会使情况变得更糟
-colorspace
" 运算符控制)。不存在单个 RGB 或 CMYK 颜色空间,但每个颜色系统中实际上都可以存在无限多种不同的颜色空间。您需要准确描述图像中颜色的 ICC(或 ICM)配置文件。通常,描述图像的 ICC 配置文件应嵌入图像本身,否则,您必须使用“最佳猜测”尝试,这仅仅是一种变通方法:在支持 ICC 的图像编辑器中打开图像并分配不同的 ICC 配置文件(不要转换!),直到找到一个看起来与您的图像匹配的配置文件(您的显示器必须经过校准,以便您实际获得颜色的良好预览)。然后,将图像保存为嵌入配置文件。关于为什么需要两个配置文件:源配置文件描述了您图像中颜色的当前状态。目标配置文件描述了转换后输出图像中的颜色。此外,在转换为给定目标配置文件时,您应该格外小心:例如,如果您使用的是描述未涂层纸张上的胶印的配置文件,但打算使用图像在涂层纸张上打印,那么您当然不会得到任何好的结果。输出配置文件需要准确地表示您的预期输出条件。当从减色到加色空间(或反之亦然)转换时,如果不使用正确的配置文件(用于转换的两个步骤),在大多数情况下,您不会得到“正确”的颜色或亮度,尽管您可能很幸运地“意外地”击中了目标。您可以从 国际色彩联盟 下载颜色配置文件。 通过配置文件更改颜色空间
虽然您可以像这样直接简单地魔术颜色空间...
|
-profile
" 运算符的颜色配置文件。Raf Lenaerts 指出了在 ImageMagick 中使用 "-profile
" 运算符时需要遵循的以下规则...- 如果不存在嵌入的配置文件,那么第一个 "
-profile
" 是输入配置文件。第二个 "-profile
" 则定义输出配置文件。 - 如果存在嵌入的配置文件,那么单个 "
-profile
" 运算符将立即定义输出配置文件。
- "
-profile
" 必须放在输入文件和输出文件之间。
这实际上是标准的 IM 命令行处理实践。 - 使用 "
+profile
" 以及 'icm
' 来删除任何存在的 icc 配置文件。 - 然后给出的第一个 "
-profile
" 是输入配置文件。 - 然后给出的第二个 "
-profile
" 是输出配置文件。
-profile
" 操作:删除、输入和输出配置文件选项。例如,如果输入图像已具有颜色配置文件,则只需要一个。
|
|
|
|
颜色配置文件修改
您想要进行魔术处理的图像都应该嵌入 ICC 配置文件。因此,要使用相同的 CMYK ICC 配置文件对图像进行魔术处理...
|
-black-point-compensation
" 以及 "-intent relative
" 来获得更接近人们期望的结果。
|
![]() ![]() |
"-black-point-compensation " 和 "-intent " 设置都需要在 "-profile " 操作之前指定,才能生效。 |
![]() ![]() |
"-black-point-compensation " 选项已添加到 IM v6.2.7-0 中。 |
EXIF InterColorProfile
除了上述颜色配置文件处理之外,许多数码相机还在 EXIF 配置文件属性 'InterColorProfile
' 中保存颜色配置文件信息。根据文档 "颜色管理和 Adobe Photoshop 7",此属性旨在“在没有嵌入颜色配置文件的情况下被假定”。 IPTC 配置文件
IPTC 配置文件用于图像中存储图像的标识属性,例如标题、版权、作者、关键词等。如果您想将 IPTC 配置文件添加到图像,您需要一个单独的 -profile
|
|
|
|
|
XMP 配置文件
从 TIF 图像中提取 XMP 配置文件...
|
关于矢量图像格式的一句话
世界上有多种图像存储风格...光栅 | 使用彩色像素数组存储和处理的图像。光栅图像格式包括 GIF、PNG、JPEG、TIFF 等等。图像可以由表示不同颜色的多个数组(通道)组成,并且可以在一个图像文件格式文件中具有多个图像、图层或帧(具体取决于用法)。 |
矢量 | 图像根据线、粗细、平铺、渐变和更大的复合对象来定义。格式包括 SVG、Postscript、PDF、FIG、DXF、WMF,甚至 TTF 字体。它允许图像进行调整大小,甚至可以显著放大而不会损失质量。此外,在编辑此类格式时,通常可以移动整个对象而不会破坏下面的内容(对象分层)。 |
分形 | 图像是一种特殊且罕见的情况,用于实现对复杂图像(例如旧画作)的极度压缩。但是,我所知道的唯一用法是在非常昂贵的商业产品中。除此之外,它还用于复杂的数学对象(例如 Mandelbrot 和 Julia 集),以及在屏幕保护程序中生成随机颜色飞溅(IFS)。它很少见。 |
避免使用 ImageMagick 进行“矢量图像”到“矢量图像”的转换
例如:在以下格式之间进行转换:PDF、PS、SVG
例如:在以下格式之间进行转换:PDF、PS、SVG
换句话说,为正确的工作使用正确的工具。在这种情况下,ImageMagick 不是正确的工具。
也就是说,这并不意味着 IM 不能用于执行此类转换。毕竟,大多数打印机和显示器实际上会自己对图像进行光栅化,以便在纸张上进行实际打印。不同之处在于打印机知道其硬件需要的分辨率。ImageMagick 不知道。有关将矢量图像转换为光栅图像(以及改进此类转换)的示例,请参见示例 Postscript/PDF 预格式化文本和图形输入,以及有关 SVG 和用户生成的矢量图像的信息,请参见 SVG 图像处理。您可能还会发现有关 字体大小、分辨率和磅值 的信息很有用,特别是关于 "-density
" 对绘制文本字体的影响。非 IM 替代方案
如果你确实需要在矢量格式之间进行一般转换,可以使用程序 UniConvertor,Sk1 项目(通常作为标准 Linux 软件包提供)和 VectorSection 进行矢量到矢量的转换,而无需实际光栅化图像。对于 Postscript 到其他矢量格式的一般转换,请查看 "pstoedit
",它通常在系统附加软件包存储库中提供。还可以查看 "epstopdf
",它是 综合 TeX 网络 (CTAN) 的一部分。TeX 和 LaTeX 是 UNIX 文档(书籍和科学文章)文本处理系统。它拥有大量与 Postscript 和 PDF 格式相关的工具。对于 SVG 到 PDF 的转换,Wolfgang Hugemann <Auto@hugemann.de> 建议最简单的矢量到矢量转换是在浏览器(Firefox)中显示 SVG,然后使用 PDF 打印机驱动程序进行打印。当然,也可以使用 "Uniconvertor"。其他图像文件格式
当然,IM 可以使用和理解大量的其他图像文件格式,但是使用许多这些不太 "常见" 的格式是专门用于某些特定目的,并且通常需要一些调整或其他选项才能使它们以你希望的方式执行。我不推荐这些文件格式,并且一般来说我自己不使用它们。但是,我确实尝试记录 IM 邮件列表或 IM 论坛 上报告的各种笔记、技术和选项,以便其他人也可以使用收集的信息。许多笔记都以原始的、未经处理的形式出现,我愿意接受进一步的贡献,或对以下笔记进行改写。Postscript (PS、EPS) 和 Adobe PDF
有关基本处理,请参阅 Postscript 文本处理 和关于 矢量图像格式 的警告。Postscript 及其相关格式(如 PDF)的主要问题在于它是一种复杂的页面格式化语言。也就是说,该格式是一个程序,而不是真正的图像格式!这意味着 IM 被迫依靠另一个外部程序(或委托)来 "运行" 该程序并返回生成的图像。封装的 Postscript (EPS)
封装的 Postscript 实际上与普通 Postscript(一种矢量图像格式)完全相同,只是它是单页图像,并且存在 "边界框" 条目来定义图像覆盖的确切区域。该格式旨在允许其他程序在将它定义的 Postscript 插入其他 Postscript 文档时移动和缩放图像。IM 以与 Postscript 基本相同的方式处理它。(参见上面)。magick image.jpg -compress none eps2:image.eps使用 "EPS2:" 或 "EPS3:" 创建 JPEG 压缩的 EPS 文件:注意:将配置文件添加到 EPS 图像已列入 "待办事项" 列表中,但目前不支持。
Postscript/PDF 输入
由于此格式是一种矢量图像格式,因此它会受到 "-page
" 和 "-density
" 等设置的影响。在 Postscript 格式化的文本 中提供了读取 Postscript 的示例(对于 EPS 和 PDF 格式来说是相同的),你应该先阅读它。但是,读取这些格式非常复杂,因为它们是专门为在高质量激光打印机上生成打印页面而设计的完整计算机语言。这远远超出了 ImageMagick 的范围,因此它依赖于一个名为 "ghostscript" 的专门委托程序来读取和将 Postscript 和 PDF 页面转换为光栅图像。一点。 由于 IM 使用 Ghostscript 以特定分辨率光栅化 Postscript 文件,因此 Postscript 文件中的任何光栅图像通常会模糊或失真,除非已知该光栅图像的确切密度。这也假设 Postscript 程序本身不会旋转或以其他方式操作光栅图像。实际上,存在多个委托,并且 IM 会根据情况选择它们。例如,根据是否设置了 "-channel RGBA
",选择 "ps:color
"(使用 "bmpsep8
" ghostscript 设备)或 "ps:alpha
"(使用 "pngalpha
")。默认情况下使用 "ps:color
" 委托,而不是 "ps:alpha
",因为 "pngalpha
" ghostscript 设备只支持单页/单图像,而 PDF 通常是多页的。在读取图像之前使用 "-channel RGBA
" 来选择 "pngalpha
" 委托方法。如果只想了解页数,使用 ghostscript 会快得多。
gs -q -sPDFname=document.pdf pdfpagecount.ps %%Pages: 96 |
特殊的 ImageMagick PDF 读取选项
用于 PDF 处理的特殊选项...-units PixelsPerInch
- 在处理 PDF 文档(读取或创建)时应设置此选项。我不确定它做了什么,但报告表明它应该为正确的工作而设置。
-define pdf:use-cropbox=true
- 使用 "裁剪框" 而不是默认的 "媒体框",如 Adobe 生成的 PDF 文件。(基本上是在从 PDF 图像的 ghostscript 转换中添加了一个 "
-dUseCropBox
"。注意:如果你的 PDF 只有一个页面,这将起作用,但如果是多页 PDF,则不会正确裁剪。 -define pdf:use-trimbox=true
- 使用 "修剪框" 而不是默认的 "媒体框",如 Adobe 生成的 PDF 文件。
修改输入委托
修改系统委托很危险,错误可能会导致 IM 无法读取 Postscript/PDF 文件。你可能还需要管理员权限,因为你无法用个人委托替换系统定义的委托,这是由于安全("黑客")措施。有关委托 XML 语法和含义以及创建个人输入/输出委托的更多信息,请参阅 委托和图像格式编码器。在论坛主题 将 EPS 转换为 JPG 不可靠 中,有人建议编辑系统 "delegates.xml
" 并将 "-sDEVICE=bmpsep8
" 替换为 "-sDEVICE=bmp16
"。其他用户发现将其更改为 "-sDEVICE=pnmraw
" 也更好。我自己没有尝试过,因此无法保证这一点,也不能保证这适用于哪些版本的 Ghostscript。如果你有任何其他信息,请告诉我。如果你有一个 CMYK Postscript 或 PDF 文件,那么页面 约翰的博客 详细介绍了如何修改委托条目(添加 "-dUseCIEColor
" ghostscript 选项),以便 ghostscript convert 处理此类 Postscript。另一种可能是创建一个个人 "委托",它将调用 pdftoppm。假设标签名为 "pdfalt
",它调用程序 "pdftoppm
",甚至调用 "xpdf
" 包中的 "pdfimage
"。然后你的流将类似于以下内容
|
pstoedit
",它可以将 Postscript 文件转换为其他矢量格式,或将 Postscript 传递到 ImageMagick API 中,以便将其转换为位图。我还没有尝试或测试过,并且想要一些反馈。 PDF 光栅图像提取
将任何 PDF 页面呈现为特定大小或 "密度" 是 PDF 使用的矢量图形的核心。它非常适合文本或线条图。但这同时也意味着 PDF 中的任何光栅图像(像素数组)都必须调整大小。但是调整大小是一种 "有损" 操作,会导致某些图像降级,除非你使用该光栅图像的原始密度,而该密度在 PDF 中的图像之间可能有所不同!因此,能够从 PDF 中提取光栅图像而无需任何 "密度" 参考是有利的。你可以使用 "pdfimages
" 程序直接提取光栅图像,该程序是 poppler-utils 或 "xpdf-utils" 软件包的一部分。这些软件包还包含许多其他你可能发现对 PDF 处理有用的工具。参见 Windows 版 Poppler 和 Xpdf 阅读器。你可能还想查看 "mutool
",它来自 "MuPDF" 包,由与负责 GhostScript 的相同人员维护。一个用于提取文本和图像的在线工具是 Sumnotes(商业软件,有限的免费试用)。在更低级别,Wolfgang Hugemann 说你可以提取 PDF 中包含的任何图像(尤其是从扫描仪生成的 PDF 中提取)。基本上通过提取 "stream" 和 "endstream" 之间的任何字节序列,并将其保存为单独的文件。 PDF 文本提取
你可以使用 GhostScript 程序 "ps2ascii
" 或 "pstotext
"。或者,作为替代方案,它同时执行文本和图像,看看 "pdftohtml
" 有一个 XML 输出,Ross Presser 报告说 "在重新组装段落方面相当不错。"。此外,"pdftk
" 程序可以 "解压缩" PDF,以便可以直接编辑,并 "修复" 损坏的 PDF。 Postscript/PDF 输出选项
以下设置已知会影响 Postscript、封装的 Postscript 和 PDF 图像格式的输出:"-page
"、"-gravity
"、"-compress
"、"-density
"。默认情况下,PDF 图像输出不使用任何压缩,因此 PDF 文件通常比必要的大得多。下表将 IM 压缩模式与使用的 Postscript 压缩模式进行了对应。
PS/PDF 压缩含义
建议用于 PDF 的压缩是 Zip(Deflate 压缩)或 Group4(传真)压缩。压缩 | 图像 "/Filter [ ... ] " 设置 |
---|---|
"-compress none " |
'/ASCII85Decode ' |
"-compress zip " |
'/FlateDecode ' |
"-compress jpeg " |
'/DCTDecode ' |
"-compress lzw " |
'/LZWDecode ' |
"-alpha off -monochrome -compress fax " |
'/CCITTFaxDecode ' |
"+compress "" -compress rle "其他任何内容 |
'/RunLengthDecode ' |
|
Postscript/PDF 输出替代方案
请记住,PDF 是一种矢量图像(文档)格式,而 IM 是一种光栅图像处理器。这意味着 IM 创建的任何 PDF 文档基本上都包含每页一张光栅图像。PDF 文档中输出的图像将固定在特定分辨率(或像素密度)下,这会导致在其他分辨率下查看或打印时出现像素失真问题。此外,对于文本文档来说,使用光栅图像是一种浪费,因为带有字体和格式元数据的纯文本将始终比文本的扫描光栅图像更小且渲染效果更好。因此,其他 PDF 创建程序可能更适合您的需求。这将使您能够将图像保留为图像,将文本保留为文本,并以更美观、更合乎逻辑的方式将文本和图像一起放置,以及更合乎逻辑地插入文本以及叠加箭头或连接线。例如,我建议您查看 TeX 和 LaTeX 系统提供的支持程序。请参阅 Comprehensive TeX Network (CTAN)。另一个工具集是 Multivalent Document Tools。当然,这些程序更难自动化,但我过去曾使用简单的 FIG 矢量图形文件格式(请参阅 Xfig)以自动方式生成带有文本和图形的 Postscript 和 PDF 文档。图像到 PDF 转换器...工具 sam2p 专注于将图像转换为 PDF 文件。因此,它使用 ImageMagick 进行所有预处理,然后使用“sam2p
”进行最终转换。它甚至提供了一个小型脚本,可以将结果调整到 A4 纸张。来自 sam2p READMEQ58) | sam2p 可以生成一个按比例(即保持纵横比)缩放至指定页面大小并居中于页面上的 PDF 吗? |
A58) | 不能,但是与 sam2p 捆绑在一起的 Perl 脚本 sam2p_pdf_scale.pl 可以对 sam2p 创建的文件进行后处理。例如,要在 A4 纸张上缩放和居中 PDF,请执行以下操作
|
您也可以使用 JAVA 工具包将 IM 生成的图像合并到 PDF 中,生成比 IM 生成的更简单的 PDF 更好的 PDF...#!/usr/bin/perl # Script pdf-combiner.pl use strict; use warnings; use PDF::Reuse; prFile('combo.pdf'); # Output. for (qw/a b c d/) # Inputs. { prImage("result_$_.pdf"); prPage(); } prEnd();
在 IM 讨论论坛 上的另一位用户也建议使用 PDFjam 将多个 PDF 页面合并在一起。#!/bin/bash for x in ./*.jpeg do echo $x to ${x}.pdf magick $x -quality 75 ${x}.pdf done echo Merging... java tool.pdf.Merge *.pdf
PbmPlus / NetPBM 图像文件格式PBM PGM PPM PNM PAM
PbmPlus 或 "NetPBM" 图像操作过滤器(unix 命令行)。这些图像格式有多种样式,“PBM
”(位图),“PGM
”(灰度),“PPM
”(彩色),“PFM
”(浮点,用于 HDRI),“PAM
”(任意格式)和“PNM
”(任何 NetPBM 格式)。除了“PAM
”和“PFM
”之外,每个都可以是“原始”二进制格式(IM 或 NetPBM 写入时的默认格式),或者是以纯 ASCII 文本格式(使用“-compress None
”设置)。IM 当然可以读取它们中的任何一个。该格式应被视为仅使用“线性 RGB”颜色空间,而不使用“sRGB”,因为大多数其他图像文件格式都使用“sRGB”。但是,当使用“线性 RGB”时,应使用 16 位深度,因此建议谨慎,以避免在深度为 8 的图像中出现严重的舍入误差。NetPBM 格式通常将每个图像保存到一个文件中。但是,IM 和许多其他 NetPBM 实用程序将读取和写入具有多个图像的文件,这些图像只是简单地连接在一起。因此,在写入图像时,最好在写入文件时设置适当的“-/+adjoin
”设置。(有关详细信息,请参阅 写入多个图像序列)。PPM 文件格式对 ImageMagick 尤其重要,因为它是在通过“ghostscript”委托转换 Postscript 和 PDF 图像期间使用的通信格式。它也是视频图像处理的主要格式,例如来自“ffmpeg”命令的视频图像处理。任何“质量”或值范围都可以在输入时使用(最多 16 位或 65535 个“深度”)。例如,这里有一个高度不寻常的 5 值范围,用于生成“阶梯梯度”。我知道没有其他图像格式允许您使用如此奇特的质量范围。
|
![]() |
PbmPlus/NetPBM 与 ASCII 数据格式
它的 ASCII 输出可能是从特定图像中提取颜色值的最佳方法,这也使其非常适合脚本和简单的图像处理。
|
![]() |
tr
”文本实用程序将多个逗号和空格替换和压缩为单个换行符,这将使所有值每行一个值,从而使脚本更容易处理。此外,使用 IM,您只能为 PGM 和 PPM 的输出质量指定 8 或 16 的“深度”。而 PbmPlus 格式允许使用任何“maxval”作为其值,甚至是不等于 2 的幂的值!它确实有 16 位深度(maxval 65535)的硬性限制。目前无法更精细地控制 NetPBM 图像的实际“maxval”,尽管将来可以通过特殊的编码器设置添加(如果需要)。这是一个从玫瑰内置图像中提取的 0 到 255 之间的 9x9 灰度值数组的另一个输出示例。我使用了“pnmtopnm -plain
”,因此我们在每行像素的末尾得到一个换行符。此 NetPBM 命令的旧版本包括“pnmnoraw
”和“pnmtoplainpnm
”,它们的功能与“pnmtopnm -plain
”相同。请查看您的 NetPBM 软件包的手册页,因为开发人员似乎无法就应该如何完成这件事达成一致。任何这些 PbmPlus 程序都会在“图像行”的末尾输出一个换行符,而 ImageMagick 编码器不会这样做。这可以使脚本中的图像处理变得更加容易。这是一个输出非常小的 ASCII PBM 位图的示例。请注意,PBM 位图甚至不需要在值之间输出空格,尽管允许使用空格(IM 输出空格,PbmPlus 实用程序不输出空格)。还要注意,对于位图格式(如 XBM 和 PBM),白色='0
'(背景)和黑色='1
'(前景)。这是位图格式(如 XBM 和 PBM)的标准,ImageMagick 了解此约定。如果这不是您想要的,请反转图像,或使用按颜色分级图像来设置位图图像的所需颜色。 PbmPlus/NetPBM 深度控制
有时您希望更精细地控制 PGM 和 PPM 图像的深度,例如要使用 0 到 99 的百分比范围内的值。一种方法是使用 NetPBM 程序“pamdepth
”,它可以将图像神奇地变换为任何范围(最多 65335 的内部限制)。例如,这里是一个图像数组,但使用 0 到 99 的输出值范围。这是一个另一个示例,但这次使用 反向级别 运算符来设置输出值范围。这可以使您更好地控制值的转换,但 PGM 图像中的“maxval”与图像的最大值不匹配。上述命令中的“+depth
”对于将图像文件深度设置为与 IM 质量级别相同至关重要。只需将第三行重置(或忽略)为“99
”的值,然后选择性地将图像压缩回“原始”二进制 NetPBM 图像格式即可。但是,由于 PbmPlus/NetPBM 的最大深度为 65535(16 位),因此这仅适用于 IM Q8 或 Q16 版本。 PbmPlus/NetPBM 注释
IM 将读取、写入和保留 PbmPlus/NetPBM 文件格式标题中的“注释”行。例如...但是,大多数应用程序(包括 PbmPlus 本身)都会忽略此类注释,甚至在处理文件时会丢失它们。PbmPlus/NetPBM 与 ImageMagick
PbmPlus/NetPBM 图像处理套件曾经是 ImageMagick 的命令行图像处理的竞争对手,但它使用完全不同的(更低级)管道过滤理念来处理图像。这使得它在 shell 脚本中易于使用,但在用于通用或非常复杂的图像处理时更加困难。这也意味着图像更频繁地转换为图像文件格式和从图像文件格式转换,并且通常需要使用许多临时文件。PbmPlus/NetPBM 图像通常不处理透明度(尽管更新的 PAM 格式确实处理),并且没有提供将图像元数据与图像数据一起传递的通用方法。所有 PbmPlus/NetPBM 格式(如 ImageMagick 内部格式,请参阅 MIFF 图像流)都可以处理多个图像的流,只需将图像一个接一个地连接或附加即可。这使得它非常适合流水线式、多图像流式图像处理方法,例如视频处理。但是请注意,一些 PbmPlus/NetPBM 程序只处理单个图像,并且不会处理多个图像流。但是,由于它更低级,并且早于 ImageMagick,因此它通常被选中用于原始图像输出,例如视频图像输出和处理。PbmPlus 图像也更常用于科学数据,因此图像通常存储为“线性 RGB”颜色空间,而不是更常见的非线性“sRGB”颜色空间。建议谨慎。这两个软件包可以共存,而且我知道我会使用 PbmPlus/NetPBM 实现来完成某些事情,而不是 ImageMagick。通常是在使用特定低级图像处理或使用存储在图像形式中的值数组进行脚本编写时。这两个软件包可以很好地协同工作,建议在进行严肃的图像工作时安装和使用这两个软件包。![]() ![]() |
实际上是我在 1995 年发布了 NetPBM 的重要补丁版本,当时这个软件几乎没有进展。因此,我对 PbmPlus 软件及其简单的图像文件格式有很好的了解。 从那时起,它已经被不同的人重新开发了许多次,并且最终似乎已成为一个合适的开源项目。各种程序似乎正在成熟,并且开始更好地协同工作。 然而,它的主要问题:缺乏元数据和复杂性;仍然存在。但它作为文件格式的简单性是其最大的优势,使其非常适合非常低级的图像和数据操作。 |
TIFF
The TIFF format is the propriety format for PhotoShop. However it is so
bloated with features, and has been modified by just about every application
that has cared to use it, that no program, not even photoshop can handle ALL
its variations. Photoshop however has the best chance at reading it.
I would steer clear of the TIFF image file format unless you are
specifically working with photoshop, or the application accepts no other,
better defined, image file format.
I don't use the TIFF image file format, or Photoshop. If you use this format
with IM extensively, perhaps you would like to submit your findings to me,
to include here. That way you can help your fellow TIFF users.
Whether a specific software package can read a TIFF, all you can do is try
it and see. That is, the problem with this format.
TIFF and Density (resolution) in photoshop...
See Photoshop and Density
for the details and solutions to this problem
JPEG to TIFF conversion...
magick image.jpg image.tif
This will either save the image inside the TIFF file using JPEG compression
(which was inherited from the JPEG input. Or it will error such as...
Error: "JPEG compression support not configured"
This is caused by the TIFF library not including JPEG compression support.
Either way THIS IS BAD.
You can get around this problem by changing the setting to use a different
compression algorithm:
magick image.jpg -compress zip image.tif
magick image.jpg -compress lzw image.tif
magick image.jpg +compress image.tif
WARNING: -compress Group4 with a TIFF works, but ONLY if you remove all
transparent and semi-transparent pixels from the image. Typically you can
make sure this is done the same way as JPEG images above, using
-background {color} -alpha remove
See Removing Transparency from Images
just before the final save (the first only works for single images).
TIFF (and MIFF) floating point precision files (Add to IM v6.2.6-5)...
This is especially good for HDRI image processing (which uses floating point
inside IM itself)
For single precision (float) set...
-depth 32 -define quantum:format=floating-point
For do8uble precision (doubles) set...
-depth 64 -define quantum:format=floating-point
14 bit TIFF images...
magick logo: -sharpen 0x1 -depth 14 logo.tif
tiffinfo logo.tif
Image Width: 640 Image Length: 480
Resolution: 72, 72 (unitless)
Bits/Sample: 14
Compression Scheme: LZW
Photometric Interpretation: RGB color
FillOrder: msb-to-lsb
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Rows/Strip: 2
Planar Configuration: single image plane
DocumentName: logo.tif
Software: ImageMagick 6.2.8 07/27/06 Q16 https://imagemagick.org.cn
12 bit TIFF images...
To magick 16-bit TIFF images to 12-bit:
magick image.tif -depth 12 image-12.tif
Pure black and white images...
magick image ... -type truecolor -type bilevel image.tiff
Results in normal images and the smallest filesize, and correct
black/white handling in Photoshop, Microsoft Windows Picture and Fax
Viewer.
TIFF discussion,
RQuadling.
Enden and fill-order
The order in which TIFF data values are stored is controled by
-endien Global order of the bytes
-define tiff:endian Tiff format container endian
-define tiff:fill-order Bit order within a byte
Each takes a value of either MSB (default) or LSB, however
the "tiff:fill-order" will be set to the value of "tiff:endian"
if that is defined, but not from the global endian value.
The "tiff:endian" property is the endianess of the image container. The
"-endian" property is the endianess of the image pixels. They may differ.
Save a TIFF file format with only one row pre strip
-define tiff:rows-per-strip=1.
To save more rows per stripe increase the number
-define tiff:rows-per-strip=8
You can also specify the 'endian' ordering for binary integers in the format
-endian MSB -endian LSB
For smaller TIFF images (other than by compression, you can also try to
use options and settings like -depth 8 to reduce the color quality
or -alpha off to remove the alpha or transparency channel from the image.
IM will save a greyscale image as a greyscale TIFF, if no non-grayscale
colors are present. You can force it to save as non-greyscale with
-depth 8 -type TrueColor
Added IM 6.6.4-3
Allow you to set the "Software Creation:" meta-data (property)
to something other than "Image Magick 6.**"
-set tiff:software "My Software"
Windows Picture and Fax Viewer, Windows Explorer
These can can only display TIFFs that have certain Photometric
Interpretation values, such as RGB. IM Options...
-compress LZW -type TrueColor
toggle the photometric interpretation (Added IM 6.3.2-10)
-define quantum:polarity=min-is-black
-define quantum:polarity=min-is-white
Multi-Page TIFF
If you want to split a multi-page tiff into separate pages, IM may have
problems as it will still use up a lot of memory to hold previous pages
even if you use a command like...
magick "a.tif[i]" b%03d.tif
This might be regarded as a bug, or perhaps a future improvement.
The better solution may be the non-IM "tiffsplit
" program.
TIFF and EXIF profiles
Cristy reported: The libtiff delegate library supports the EXIF profile
but it was unreliable and caused faults too often so we commented out the
call.
To get the EXIF attributes try this.
magick identify -verbose -define tiff:exif=true image.tif
TIFF 格式可以包含以剪切路径形式的位图蒙版,可以使用 "-clip
" 操作符启用。您可以使用该“剪切”蒙版使用该路径来遮罩您的图像...
magick image_clip.tif -clip \ ...do_various_operations... \ +clip-mask image_masked.png |
BMP,Windows 位图
The Windows desktop icon image format BMP (short for bit-mapped) is a very unfriendly image format and should probably be avoided if possible. ImageMagick supports 8, 24, and 32-bit BMP images. Add -colors 256 to the end your command line (before the output image filename) to create a 8 bit colormapped BMP image rather than a 24 bit BMP format. Extra colors can be added to images after performing operations like rotates, and resize. See Color Quantization for more info on -color. The presence of any transparency controls whether it uses a 24 (RGB) or 32 bit (RGBA) format BMP image. You can use "-alpha off" to turn off transparency in an image. If all colors are gray-scale a 'directcolor' greyscale image is generated. I think -type truecolor will stop this behaviour. If you have an older program cannot read the default BMP4 images written by ImageMagick, (for example a Windows Background Image), you can enforce the generation of a BMP3 format image using... magick image BMP3:image.bmp This format should have no transparency and should be a 'printable image', whatever that means. In other words 'Windows' compatible. However, if a PNG input file was used and it contains a gAMA and cHRM chunk (gamma and chromaticity information) either of which forces "magick" to write a BMP4. To get a BMP3 you need to get rid of that information. One way may be to pipeline the image though a minimal 'image data only' image file format like PPM and then re-save as BMP3. Messy, but it should work. magick image.png ppm:- | magick - BMP3:image.bpm IM can not produce BMP's at depth levels other than 8. However you can use NetPBM image processing set to do the final conversion to other depth levels (This needs at least a Q16 version of IM)... magick image -alpha off -colors 16 ppm:- |\ pnmdepth 4 | ppm2bmp > image.bmp Format limitations.... The header for a BMP2: format only allows the description of the width, height and bit depth (bits per pixel) of an image. The bit depth can be one of 1, 4, 8 or 24. For comparison, the bmp3: format allows bit depths of 0, 1, 4, 8 ,16, 24 and 32 and has extra fields which specify x and y resolution (in pixels per metre) and compression of the image data.
ICO
To create a multi-resolution ICO format image simply create all the image sizes you require and write them all to the same ICO file. magick icon-16.bmp icon-32.bmp icon-64.bmp \ icon-128.bmp icon-256.bmp myicon.ico Update magick icon-256.png \ -define icon:auto-resize="256,128,96,64,48,32,16" \ myicon.ico You can now add this to you web pages using <LINK REL="shortcut icon" HREF="myicon.ico"> However many web browsers will now accept most image formats, not just the ICO format.
RAW 相机图像格式 (CRW、CR2、NEF、X3F 等)
大多数数码相机,除了 Sigma Foveon 传感器和一些索尼相机外,都会将镜头产生的图像通过使用数百万个传感器转换为数字数据,这些传感器检测一种特定颜色的亮度,即红色、绿色或蓝色。为了使相机对颜色的响应方式与人眼大致相同,绿色传感器数量是红色或蓝色传感器数量的两倍,因为我们的眼睛对绿光更加敏感。传感器排列在所谓的拜耳阵列中。例如,有关此排列的描述和图表,请参见 了解数码相机传感器。将来自拜耳阵列的数据转换为更常见的 RGB 像素需要一个称为去马赛克的过程。完成此操作后,我们仍然没有值得显示的图像。即使有了额外的绿色像素,相机的传感器仍然无法像我们那样感知颜色。如果您拿一张白纸,在强烈的阳光下观察,然后进入室内,在荧光灯下观察,它在这两种情况下都会看起来是白色的。但是,如果您在相同条件下使用默认相机设置拍摄这张纸,那么这张纸在屏幕上显示时会呈现出略微不同的颜色。原因是,尽管我们视网膜的背面会“看到”与相机相同的从纸张反射的光线,但我们的大脑会为我们解释这种光线,我们会感知到纸张是白色的。相机只是测量从纸张反射的红光、绿光和蓝光的量,在荧光灯下,蓝光会比阳光下更多,因此该图像中的纸张会看起来比在阳光下拍摄的纸张更蓝。要生成既显示白纸的图像,就需要对它们进行“白平衡”,也称为灰平衡或色平衡。有关白平衡的更多信息,请参见 了解白平衡。原始文件中仍然需要完成其他方面的处理,例如设置正确的伽马值,但无需详细介绍,很明显,原始文件需要大量处理才能成为可以在显示器上查看的图像。相机原始文件通常称为数字负片。如果您拍摄照片并让相机生成 JPG 图像,它将完成去马赛克以及所有其他调整。但是,例如,如果您忘记在拍摄照片之前在相机中设置正确的白平衡,那么您实际上无法对 JPG 做太多操作来纠正这种情况,因为原始图像的大量信息已经丢失了。另一方面,如果您从相机生成的是原始文件而不是 JPG,那么在从原始文件转换为其他格式的过程中,您可以选择特定的白平衡设置以及其他参数,如果生成的图像看起来不对,您可以返回,更改设置并再次对它进行处理,直到它看起来正确为止。这类似于从胶片负片生成更多照片的能力。如果没有胶片负片,您将无法获得从胶片首次冲洗后获得的 4x6 照片的 8x10 放大照片。虽然 ImageMagick 可以处理各种不同的格式,但它“不知道”如何处理原始相机文件,因此 IM 使用 "dcraw
" 程序作为委托程序将原始文件处理为它可以理解的格式,即 TIFF(使用 “-T
” 标记)或 PNM。请注意,它适用于原始相机图像,而不是来自扫描仪的图像。 "dcraw
" 程序可以处理大量不同的原始格式,包括来自佳能、富士、柯达、尼康和索尼制造的相机。您可以通过要求它识别样本来确定 "dcraw
" 是否可以识别您的原始文件。例如,以下命令
|
|
-list delegate
" 列出),指定两个影响图像处理的标记
|
-w
” 标记表示 dcraw 将使用原始文件中的白平衡信息(如果可以找到)。如果找不到信息,dcraw 将使用整个图像的平均值作为白平衡的基础。“-4
” 标记表示 dcraw 仅对原始照片进行去马赛克和白平衡,并将结果输出为16 位线性图像(每个像素 48 位),适合 IM 的默认 Q16 版本。由于“-w
” 和“-4
” 是指定的仅有的两个图像处理标记,因此 dcraw 将使用一些默认设置。输出颜色空间将为 sRGB,并且不会进行 ICC 剖析(在我的系统上,dcraw 是使用没有 LCMS 库的代码编译的,因此无法进行剖析)。“-4
” 标记已设置的事实意味着省略了许多处理步骤,包括级别调整和伽马校正,因此生成的图像看起来很暗。目的是让用户使用“Photoshop”或“Paint Shop Pro”之类的图像编辑器,甚至使用“ImageMagick”来处理图像,并对其进行自己的级别、伽马等调整。在这种情况下,图像应输出到支持每颜色 16 位的格式。(例如 TIFF)。注意,仅因为 dcraw 生成了 16 位文件并不意味着所有 16 位都包含有用的数据。例如,来自佳能 10D 数码单反相机的原始图像每颜色有 10 位。佳能和其他制造商的更新型相机每颜色有 14 位。如果您希望完全转换原始照片,则必须删除“-4
” 标记,以便 dcraw 进行去马赛克、白平衡、亮度和伽马校正等操作。在这种情况下,dcraw 输出8 位文件(每个像素 24 位)。如果您要对该图像进行进一步处理,最好将其输出为 PNG 并避免 JPEG 压缩伪像。JPEG 格式应仅用作实际使用的最后一步。事实上,对于图像处理的中间步骤,始终使用无损格式(如 PNG 或 IM 内部格式 MIFF)是一个好主意。可以添加一个特殊的 DCRaw 委托程序,它可以让你控制如何读取“原始”相机图像格式。有关更多信息,请访问 DCRaw 网站,以及 DCRaw 教程网站,其中包含有关 dcraw 的许多可选标记的信息,包括使用各种标记的原始图像直方图。还可以参阅 DCRaw 示例。以上注释最初摘自 IM 论坛主题 转换 RAW 图像,作者为jhfry,由el_supremo 大幅重写。MPEG、M2V 和 AVI 电影
IM is not very efficient at creating movies. It will do the job though requires the external program "mpeg2encode" to do much of the dirty work. The problem is that IM is not designed to handle video, but static images or small sequences of images. That is, not to say it can't do it, but that is not its goal. In particular it generally reads in all images into memory and process them from there. For a large or long video this is not very efficient. For processing on a small sequence of frames however it really can't be beat. In fact just about every Linux Video manipulation program uses ImageMagick to generate titles, fancy scene changes, and other effects to complete the post-processing development of a larger video development. The process however is kept to small video sequences. However lets have a look at what IM can do. Frames to Video There are some reports that unless the images are the right aspect ratio is correct this will fail on older mpeg players, use the MPEG II extension (m2v:) instead. Also use m2v to avoid heavy compression pixelization that can occur using... magick *.jpg glacier.mpg EG instead use... magick *.jpg m2v:glacier.mpg Note you may need lots of temporary space to do a large animations You can specify a different directory from the normal /tmp using... setenv MAGICK_TMPDIR /data magick -limit memory 0 -limit map 0 *.jpg image.m2v Alternatives... To converting PNG images to MPEG2 Video streams, instead of MNG Multi PNG-files, use the following delegation... png2yuv -j file%08d.png -I p -f 25 -b 1 | \ mpeg2enc -f 3 -q 3 -b 5000 -o out.m2v For more info see mjpeg.sf.net IM forums reported decent results with an open source project called "ffmpeg", which seems to be a fairly standard linux package install. ffmpeg -f image2 -i %03d.jpg -vcodec mjpeg -y anim.mpg Extracting an MVG with a transparent background magick -background none -size 320x240 sample.mvg out.png Michael Lenh wrote... I finally was able to create a very sexy video using mplayer mencoder "mf://data/p*.png" -mf fps=40 -o particle.avi -ovc lavc You can see the results at... http://www.mathematik.uni-ulm.de/~lehn/particle.avi http://www.mathematik.uni-ulm.de/~lehn/temperature.avi mabu in a IM Forum Discussion said to "USE MENCODER, wow it's like 1000 times faster and actually WORKS"... mencoder -nosound mf://*.jpg -mf w=800:h=371:type=jpg:fps=15 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2160000:mbd=2:keyint=132:v4mv:vqmin=3:lumi_mask=0.07:dark_mask=0.2:mpeg_quant:scplx_mask=0.1:tcplx_mask=0.1:naq -o output.mpg It probably has extra options I don't need but it makes a nice time-lapse from .jpg files. Dean S. Messing uses transcode... find . -type f -name '*.png' | sort > filelist transcode -x imlist,null\ --use_rgb\ -y raw,null\ -f 60\ -i filelist\ -g 4096x2160 \ -j 540,1024,540,1024\ -o video.avi\ -H 0 You can leave out -j (clip window) if you want. -g is output size. Wolfgang Hugemann suggests a new alternative known as 'VirtualDub' under Windows Vista, which will let you run a video, or magick directly from a folder of image frames. WARNING: "mplayer
" apparentally does not like mpeg file with only one frame. "ffplay
" however seems to have no problems. Video to Frames Both "mplayer
" and "mencode
" are more efficient at converting video into a series of frames than IM is. On top of this is can handle just about any video (and audio) codec available. For example to grab 5 frames from 1 1/2 minutes into a video, scaled to 320x240, you can use... mplayer file.mov -vf scale=320x240 -ss 01:30 -ao null \ -vo png:z=3 -frames 5 Other alternatives include the "ffmpeg
" open source library, though that is also part of the "mplayer
" handling.
MNG,多图像网络图形
由 Barry Loo 从 示例 Ming 动画 讨论中贡献。MNG(发音为 ming)是一种基于 PNG 的开放格式,提供 GIF 和其他格式的动画位图替代方案。它允许透明度(半透明和完全透明)、压缩(有损和无损)以及高达 32 位的色彩深度。更高的色彩深度是这种格式与其他格式真正区别开来的地方。GIF 仅支持总计最多 256 种颜色,这对于许多图形来说已经足够了;但是,照片和渐变会受到影响。大多数可用于创建 GIF 动画的动画选项也可用于创建 MNG。
|
![]() |
DPX,数字图像交换格式
这种格式用于电影和特效行业,该行业特别利用了广泛的标题信息,以及该格式在使用 RGB 或 YCbCr 像素描述在各种位深下处理高动态范围和对数颜色值的灵活性。它基于柯达的 Cineon 格式,但基本取代了它,柯达的 Cineon 格式具有更多针对电影的标题。它的一种应用示例是扫描用于后期制作的胶片。每个帧将存储为单独的 .dpx 文件,宽度范围从 2k(2048 像素)到 8k(8192 像素 - 用于 IMAX 帧),每颜色分量 8 位到 64 位不等。然后可以使用合成软件处理这些文件,更改颜色或添加视觉效果。完成后,它们可以被数字化地记录到磁带或投影回胶片上。每个像素的颜色值通常以对数方式存储(特别是如果序列注定要转移回胶片),这更自然地反映了原始胶片乳剂中如何存储颜色信息的密度。在没有修改的情况下查看对数文件时,它们看起来对比度非常低,因此需要一个“查找表”来将对数图像转换为类似于将图像转移回胶片并在电影院中投影时所看到的内容。除了使图像线性(如大多数典型的计算机图像)和调整伽马级别之外,此表还设置了黑点和白点的所在位置。对于 10 位对数图像,每个颜色分量值范围为 0 到 1023,黑点和白点通常分别设置为 95 和 685。这意味着对数文件存储的颜色值比线性版本显示为纯白色的颜色值更亮,比线性版本显示为纯黑色的颜色值更暗。因此,这些额外信息仍然可用于特效艺术家,他们可能希望在图像存储为 dpx 文件后更改图像的亮度。例如,如果这些信息丢失,则均匀降低图像的亮度会导致高光变暗,而使用这些额外信息,高光会减小尺寸,并开始显示之前太亮而无法看到的细节。后者更接近于现实世界中发生的事情。标题可以包含与制作相关的电影和/或电视特定数据。例如,电视标题可以包含 SMPTE 时间码,以便从制作的编辑中导出为 dpx 序列的镜头,一旦添加了任何特效,就可以轻松地替换这些镜头。电影标题包含有关帧来源的胶片卷轴的信息,以及拍摄过程中使用的各种相机设置。所有这些细节都会随着图像一起传递给后期制作公司。向 DPX 文件添加时间码
您可以使用以下命令向任何 dpx 文件添加时间码
|
上述内容的副本已添加到 IM 主要文档中,位于 运动图像格式简介。以上内容由 Seth Dubieniec <seth.info_AT_dubieniec.co.uk> 提供,来自 IM 论坛关于 DPX 格式的长期讨论。他目前正在开发 DPX 应用程序,因此可能会有更多 DPX 信息发布。
Extra Notes (unformatted)... Adding -depth 10 causes IM to output a 10 bit DPX file. -- James Fancher If you want to set the gamma, for example, in the output DPX image... -define dpx:television.gamma=1.7 The colorspace of the DPX image is defined by the image element descriptor and transfer-characteristic. If the transfer characteristic is PrintingDensityColorimetric we set the colorspace to LogColorspace. Only if the colorspace is Log do we apply the gamma and black/white points to convert to the RGB colorspace. Its possible the program you are using is not conforming to the SMPTE standard or ImageMagick is not interpreting the standard correctly. Post an URL to your two DPX images and we will download and try to determine if ImageMagick has a bug or if the program you are using is buggy. The following will work with ImageMagick 6.3.8-3 magick -colorspace log AfterEffectsFile.dpx -set gamma 0.5 \ -set reference-black 95 -set reference-white 685 image.jpg Alternatively, take a look at the SMTPE documentation -- Cristy You can add text user data to the dpx file by using magick image.dpx -set dpx:userdata "some text" new.dpx -- Cristy
PSD
PSD 图像文件是 Photoshop 工作图像文件格式,就像 XCF 是 GIMP 工作文件格式,而 MIFF 是 ImageMagick 自己的工作文件格式。它们通常包含多个图像,其中第一个图像是一个包含当前工作图像的所有合并图像。这使得它对于查看当前的工作图像非常有用,通常用于“缩略图”。多图像文件格式中的所有其他图像都是用于生成第一个组合图像的图像。也就是说,用户在保存时正在处理的单个工作图层图像。因此,如果您只想获得“最终”图像,我建议您将“'[0]'
”附加到输入文件名,以丢弃工作图像,只使用第一个所有合一的图像。但是,如果您计划处理单个图层图像,则使用“ '[1--1]'
”跳过第一个图像。如果找不到额外的图层图像,则将返回第一个图像。我不建议使用“-delete 0
”,因为如果第一个图像之后没有图层图像,则它将根本不会返回任何图像。额外说明……如果您能提供更多信息或希望提交使用 IM 处理此格式的摘要,请务必这样做……For PSD with a CMYK image you may need to get IM to use the right provide when converting (make sure you IM was installed with the LCMS delegate library) .... magick Test_CMYK.psd -strip -profile USWebCoatedSWOP.icc \ -profile sRGB.icc Test_RGB.png See Profiles above for more info. If a PSD image contain a 'preview' image. This image is returned as the last image of a two image read. To ensure IM never reads the last image use... magick test.psd[0--2] -flatten test.jpg That is, read all images, except the last. But always read the first. This can not be done after the read using a "-delete".
WMF
另一种矢量格式,通常用于 Microsoft Office 软件套装中使用的可缩放剪贴画。可以在读取图像之前通过更改“-density
”来调整输入的大小。另请参见 矢量图像格式。Flash 动画 (SWF)
IM 目前不支持 Flash 动画。但为了完整性,Scott Bicknell 报告说 SWF 工具 实用程序“swfextract
”可以从 Flash 动画中提取 jpeg 或 png 帧。Wolfgang Hugemann 也认为 Windows 免费软件工具“IrfanView
”可能也能做到这一点。听起来对我来说是一个不错的委托候选人。网页转换为图像 (HTML)
如果 IM 加载 HTML,它将查找 html2ps 以将 html 转换为 postscript,然后将其渲染为图像。这效果不太好,但确实有效。使用完整的 Web 浏览器是一种更好的方法,因为它旨在以最佳方式完成任务。使用浏览器的最简单方法是将页面加载到浏览器中,然后截取它的屏幕截图。这将获得页面的完美图像,但仅限于浏览器的窗口大小。另一种变化是让浏览器将页面输出为 postscript 而不是让 IM 将其转换为 postscript。这应该将网站很好地分页成更小的页面。在 LINUX 下,您可以启动一个虚拟 X 窗口显示服务器,该服务器足够大以运行显示整个网站的浏览器。然后在其中运行浏览器并将其设置为填充整个显示器。加载网站并再次抓取屏幕截图。我见过一个脚本可以自动完成整个复杂过程。但是,您最终可能会得到一张非常长的图像。也很难知道将显示器做多大。基本上,这并不容易,最好的解决方案只使用 IM 进行最终的图像处理,而不是 html 到图像的生成。PCL 打印格式
IM PCL 默认情况下是版本 6 PCL。对于版本 5,您需要将您的图像转换为黑白。例如……
|
柯达 PhotoCD 或 ProPhotoCD (PCD)
柯达 PhotoCD 文件是一种多分辨率图像文件格式。也就是说,每个文件都包含相同图像的 6 个不同尺寸,形成一种称为“金字塔图像”的东西。文件中的第一个图像是最小分辨率(最小尺寸),最后一个图像则是最高分辨率(最大尺寸为 3072×2048 像素)。由于用户通常希望获得最大分辨率的图像进行处理,因此将 PCD 图像转换为其他格式(如 JPG)的方法是获取第六个或(索引 5)图像。例如……
|
-colorspace RGB
”选项。信息由 Wolfgang Hugemann <ImageMagick_AT_Hugemann.de> 来自 Magick-Users 邮件列表提供。原始 RGB 和灰度数据
Imagemagick 有一些文件格式用于处理原始图像数据,特别是“RGB:
”和“GRAY:
”。以及提供定义该数据的设置。例如,要输出原始 RGB 数据……
|
-depth
”设置指定写入(以及以后读取)的整数的大小。在这种情况下,每个像素为 3 个字节的 8 位值,用于 RGB(24 位图像)。始终建议指定适当的深度来处理原始图像数据。“-depth
”为 16 位,将产生每个值 2 个字节,在这种情况下,您可能还需要指定“-endian
”或字节顺序,为“MSB
”(最高有效字节优先)或“LSB
”(最低有效字节优先,默认值)。请注意,rgb 纯粹是图像数据,它甚至不包含图像的宽度和高度!某些应用程序“假定”数据是特定大小,因此您可能需要使用 IM 来确保数据为该大小。例如,这会调整图像大小并对其进行填充,以确保它的大小为 512x512 像素。
|
|
-size
”设置中指定“字节偏移量”。例如跳过 48 字节标头……
|
-size
”设置中的第三个数值的唯一时间。有关使用原始图像数据(灰度)的更多示例,请参见 IM 讨论论坛主题 如何将原始图像转换为压缩 tif?。浮点数据
You can also read (and write) RGB using normalized floating point numbers. This however requires the use of special coder -define settings. See HDRI floating point file formats https://imagemagick.org.cn/Usage/basics/#hdri_formats RGB floating point Image generated using C Code (HDRI)... float red = 1.0f; float green = 1.0f; /* appropriate data */ float blue = 1.0f; /* for exach pixel in image... */ fwrite (&red, sizeof(float), 1, file); fwrite (&green, sizeof(float), 1, file); fwrite (&blue, sizeof(float), 1, file); Reading Options.... magick -size 200x100 -depth 32 -define quantum:format=floating-point -define quantum:scale=65536.0 -endian lsb input.rgb output.png The quantum:format defines to read floating point numbers from the file. While the -depth defines the floating point size (32 = floats, 64 = doubles). The quantum:scale defines how to scale the floating point numbers from normalized 0.0 to 1.0 values to the in-memory 16bit Quality levels needed by my Q16 version of IM.