ImageMagick 使用示例
|
|
|||||||||||||||
ImageMagick 主网站 |
|
|
提示、技巧或额外信息 | 适用于更高级的用户 | 旧版本警告 |
ImageMagick 示例 - 简介
什么是 ImageMagick?一个毫无保留的总结
ImageMagick 旨在用于图像的批处理。也就是说,它允许您在脚本(shell、DOS、Perl、PHP 等)中组合图像处理操作,以便这些操作可以应用于许多图像,或者作为其他工具(例如 Web 应用程序、视频处理工具、全景生成器等)的子系统。它不是一个 GUI 图像编辑器。
ImageMagick 首先是一个图像到图像的转换器。这就是它最初设计的目的。也就是说,它几乎可以将任何图像格式(如果无法转换,请告诉我们)的图像转换为任何其他图像格式。
但它也是一个图像处理算法库。可以通过命令行和 shell/DOS 脚本(这些示例页面演示了这一点)或通过大量编程语言(例如 C、C++、Perl、Ruby、PHP 等)访问这些算法。请参阅:ImageMagick API。
速度从来不是 IM 的主要功能,它更重视其生成的图像质量。这并不是说它不能在合理的时间内转换图像。它只是不是快得令人眼花缭乱。因此,IM 执行某些处理操作可能会很慢,尤其是在尝试将图像压缩为功能有限的图像格式时。
ImageMagick 主要关注以矩形像素数组形式存在的图像,通常称为“光栅”。它将处理 Postscript 或 PDF 等“矢量”图像格式,但代价是在加载这些图像时将其转换为光栅,并在保存时生成围绕光栅的矢量图像包装器。因此,使用默认设置时,矢量图像通常处理不佳。但是,可以使用特定的选项来改善这种情况。请参阅:关于矢量图像格式的一句话。
关于这些 ImageMagick 使用示例
这些页面是从我的 ImageMagick 提示和技巧集 页面发展而来,并且是该页面的延续,我于 1993 年首次开始创建该页面,并将其放置在新奇的万维网上,万维网大约在同一时间出现。该文档中仍然包含有关 IM 许多方面的的信息以及这些页面中未包含的注释。但是,虽然当前页面旨在供您查看,但提示和技巧文档仅供我自己参考。因此,在某些地方它可能含糊不清或混乱。欢迎您查看它,学习并对其发表评论。
其他示例是从 IM 论坛 上对用户问题的解答中获取或开发的,或者作为各种问题的解决方案贡献给我。
我期待着来自其他 IM 用户的建议和电子邮件。此类电子邮件通常会导致这些示例页面得到改进和扩展。
命令行环境
所有示例都是针对在 UNIX 上使用,特别是 GNU/Linux 系统使用 BASH 脚本编写的。因此,一些示例使用 shell 的“for-do”循环。大多数示例在行尾使用反斜杠“\
”来在下一行继续该命令。较长的命令被分解成单独的行,以进一步突出显示正在应用的步骤。
但是,您仍然可以从PC Windows 批处理脚本中使用这些示例,只需对某些字符的处理方式进行一些更改即可。经过一些细微的调整,这些示例也可以直接从PHP 脚本中的“system
”调用中运行。
请参阅 Windows 使用 和 API 和脚本,以获取有关在这些替代环境中使用 ImageMagick 命令的更多信息。欢迎贡献和测试示例。
PerlMagick 和其他 API
也可以将任何这些示例改编为从 Perl、C、C++、Ruby、PHP 等语言使用 IM API。我建议先在命令行上尝试,直到您正确使用它们,然后再将操作转换为您正在使用的特定 API。
尽管随着 IM 版本 6 的发布,情况有了极大的改善,但命令行在任何时候实际上只处理单个图像序列。但是,API 没有此限制,并且允许您分别或一起操作多个图像序列以执行更复杂的操作。此功能简化了使用 IM API 实现这些示例的过程,并且无需像许多命令行示例所需的那样将图像保存为临时文件。使用 API 时,只需要将永久和半永久图像保存到磁盘即可。
基本上,先从示例页面开始,了解一下 ImageMagick 的功能。然后,在脚本和 API 代码中编写操作之前,先在命令行中制定想要执行的操作,因为在脚本和 API 代码中进行大规模更改比较困难。
我还建议您对 API 代码进行 **大量** 注释,如果可能,添加与您尝试执行的操作等效的命令行。这样,您就可以检查结果并将其与使用命令行获得的结果进行比较。这使您能够调试以后可能遇到的问题,尤其是在核心 ImageMagick 库中对图像处理进行改进时。
下载输入图像和结果
我尽可能地使用 IM 内置的图像(例如“logo:
”或“rose:
”)作为 IM 示例命令的输入图像,或使用 IM 命令生成输入图像。我还经常在后续示例中重复使用先前命令的输出。因此,您通常不需要下载任何“测试”图像即可自行尝试示例。
但是,这种生成的或内置的图像并不总是很方便。因此,当确实使用外部图像时,我倾向于在该部分的后续示例中重复使用该输入图像或先前示例的结果。
有时会显示原始源图像,或者对于较大的图像,会提供指向源图像的链接。更常见的情况是只显示最终的生成图像,因为输入是众所周知的或显而易见的。
几乎所有显示的 IM 示例命令都在其出现的同一 Web 目录中执行。也就是说,您看到的命令就是用于生成图像的实际命令。因此,您可以修改页面的 URL 来下载或查看示例使用的输入图像。外部源图像的额外副本也已放置在“images”和“img_photos”子目录中。另请参阅这些图像的精美照片索引示例。
如果示例生成文本输出或图像信息,则将其保存到文本文件,并生成其图像以在网页上显示。选择文本输出图像将链接到命令实际输出的文本副本。
在所有这些示例中,选择输出图像应该可以让你下载示例命令实际创建的图像。但请注意,并非所有浏览器都支持所有使用的图像格式。
外部图像来源
顺便说一句,这些示例中使用的大多数源图像来自Anthony 的图标库,特别是库的背景图块、大型剪贴画和龙部分。(我喜欢龙!)。附带说明:由于网站正在缓慢迁移到新服务器,这些页面可能已离线。
该库实际上早于万维网。我于 1991 年创建了它,因为当时缺乏可在 X 窗口系统上使用的优质、清晰的图标图像。当然,万维网的出现改变了这一点,但我的原始库仍然存在并可用作图像来源,即使它没有积极增长。
一些特定图像和较大图像由特定示例的作者提供。此类示例的作者列在贡献部分或页面底部。
如果您正在寻找特定的图像,我建议使用Google 图片搜索(或类似工具)查找合适的图像。当然,您可以使用 IM 转换或调整此类图像以供自己使用。但是,如果您打算将此类图像用于商业用途,则应注意版权问题。
网页上的 PNG 图像
在许多示例中,我使用 PNG 格式的图像,例如文本右侧显示的图像。PNG 图像格式支持具有半透明像素的图像,这是其他几种图像格式很少提供的功能。它也是一种非常容易理解的图像格式,因此大多数当今的图像程序和 Web 浏览器都支持它。
但是,某些 Web 浏览器无法正确处理透明的 PNG 图像(最显著的是 Microsoft Internet Explorer v6)。因此,我通常在 Web 上使用 JPEG 和 GIF 格式的图像,并且仅在生成具有半透明像素的图像或需要精确颜色以供后续示例使用时才使用 PNG 格式。
为了允许 IE v6 浏览器显示 PNG 图像,我使用了一个使用复杂 JavaScript 的特殊“样式表”。有关此信息,请参阅IE 的 PNG 透明度。从技术上讲,这只是 IE 的问题,而不是 ImageMagick 的问题。
在屏幕上显示图像在屏幕上显示图像时也可能出现显示问题。因此,我建议使用以下命令在图像下方平铺“
|
上面示例中显示的图像是一个特殊的 PNG 格式测试图像,它是使用 shell 脚本生成的。通常,该命令会将结果输出到您的显示器,而不是像这样输出到网页上。
如果仔细观察,您可以看到棋盘图案穿过半透明颜色。但是,图像作为一个整体是完全不透明的。因此,此技术应该适用于所有显示器、Web 浏览器和图像查看器。
从 IM v6.0.2 开始,“magick display
”程序会自动执行类似的操作。但是,它似乎不会以这种方式处理使用颜色表的图像(即 GIF)。使用“x:
”输出图像格式(如上所示)会导致图像直接显示到屏幕上,而无需保存。有关更多信息,请参阅显示输出显示。
字体使用
我在这些示例中使用的字体来自我多年来收集的一小部分 TrueType 字体,并将其保存以供自己使用。其中一些字体受版权保护,因此我无法在线发布它们。
但是,欢迎您替换您可用的其他字体。这些示例应该(可能需要对图像大小进行一些更改)与您系统上可用的任何适当字体一起使用。Microsoft 的“Arial”字体,甚至“Times-BoldItalic”,都应该在大多数系统上都能正常工作。
要查看您的 IM 版本当前可用的字体,请运行以下命令……
magick -list font |
警告:如果未找到请求的字体,ImageMagick 过去会静默替换默认字体,通常是 Arial 或 Times。它现在仍然这样做,但现在会发出警告。因此,请事先测试字体,以确保它是您想要的字体,而不是默认字体。
在我的 Linux 系统上,我使用一个特殊的 Perl 脚本“imagick_type_gen
”生成一个文件“type.xml
”,并将其保存在我的主目录的“.magick
”子目录中。ImageMagick 使用该文件(其中包含 XML 格式的字体列表)来查找字体。该脚本使用“locate
”(如果刚刚添加了新字体,请先运行“updatedb
”),并描述系统上可用的所有字体。通过这种设置,我只需要指定要使用的字体的名称,而无需指定特定字体文件的完整路径。
|
在 IM v6.1.2-3 之前,“type.xml ”文件名为“type.mgk ”。如果您使用的是较早版本的 IM。 |
这些 IM 示例中使用的字体列在示例字体蒙太奇示例中。我个人最喜欢 Candice,所以它被使用了相当多。
如果您也喜欢“Candice ”字体或我使用的任何其他字体,请从免费字体或1001 Fonts .com获取它们。 |
示例页面更新
这些示例页面处于持续改进的循环中。通常,我发现当我的兴趣集中在其他事情上时,我会长时间停止向这些页面添加内容。
通常,这些示例是使用 IM 的最新测试版重新构建的,这使我能够在 IM 的每个版本正式发布之前查看可能出现的更改和错误。但是,显示的示例图像是给定的 IM 命令在我的系统上产生的结果。如果您得到不同的结果,则您的 IM 可能是旧版本的(带有旧错误),或者安装不正确。
请注意,给我发送电子邮件或在讨论论坛上讨论 ImageMagick 的某些方面通常会导致向这些示例中添加新示例或全新的部分。讨论越多,示例就越好。
如果您正在使用 IM 做一些有趣的事情,请分享,并允许我向其他 IM 社区提供您的技术示例。IM 使用方面的一些最大进步来自像您一样的用户。
特别感谢
特别感谢 Cristy,他不知疲倦地花费了数月时间进行升级、修复错误并忍受我异想天开的想法……尤其是在我对命令行处理、括号、图像序列运算符和 GIF 动画处理的主要建议方面。
他出色地完成了这项工作,使第 7 版成为目前可用的最佳且最先进的命令行图像处理程序。虽然大多数用户不会表示赞赏,但我确实感谢他为 IM 付出的努力。
我还想感谢 Gabe Schaffer,他在涉及 JPEG 格式和库、仿射矩阵运算符以及Magick 矢量图形的讨论中提供了很大的帮助。
以及 Glenn Randers-Pehrson,他编写了 PNG 编码器模块并对颜色量化和抖动感兴趣。他是第一个向 IM 添加“半色调”抖动的,后来我对其进行了修改和扩展,以便向有序抖动配置文件中添加新的抖动。
最后,我要感谢大量遇到问题、提出建议和提供解决方案的人,他们通常潜伏在IM 用户论坛上。现在,许多人在 IM 示例中以想法和建议贡献者的身份留下了自己的名字。
我还想感谢那些定期在论坛上回答问题的人,例如“Bonzo”及其网站RubbleWebs,详细介绍了从 PHP 脚本中使用 IM 命令的方法。还有“scri8e”及其网站Moons Stars,用于处理闪光和星星。还要感谢 Pete“el_supremo”
特别感谢Fred Weinhaus,他是图像处理早期的一位研究人员,对通用图像扭曲运算符的初始实现提供了很大帮助。您可以在Fred 的 ImageMagick 网站上看到 Fred 的 ImageMagick 脚本,通常作为未来 IM 添加功能的概念证明。
还要感谢 Nicolas Robidoux,他是数字图像处理专家,他重新设计了椭圆加权平均重采样,极大地改进了通用图像扭曲的输出。
最后,还要感谢许多 ImageMagick 用户,他们允许其他人查看他们在某些项目中使用的 IM 命令,无论是在论坛上还是在网络上。你们都值得称赞,因为你们愿意并且乐于分享你们的发现。
好了, “说来说去”。 去看看一些例子吧。