热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

当前位置 :| 主页>Linux教程>软件应用>

使用ImageMagick 的提示与技巧

来源: 作者: 时间:2007-02-25 Tag: 点击:

convert -list color

从桔黄色到原木色,从玉米色到贝壳白,有 683 种“基本”颜色可以选择 —— 更不用说您还可以使用以下方法来指定您自己的颜色了,这里 R 表示红色值,G 表示绿色值,B 表示蓝色值,A 是 alpha(透明度)值:

  • #RGB - (R,G,B 是十六进制数,每个 4 位)
  • #RRGGBB - (每个 8 位)
  • #RRRGGGBBB - (每个 12 位)
  • #RRRRGGGGBBBB - (每个 16 位)
  • #RGBA - (每个 4 位)
  • #RRGGBBAA - (每个 8 位)
  • #RRRGGGBBBAAA - (每个 12 位)
  • #RRRRGGGGBBBBAAAA - (每个 16 位)
  • rgb(r,g,b) - (r,g,b 是十进制数)
  • rgba(r,g,b,a) - (r,g,b,a 是十进制数)

构建一个更复杂的边框

接下来让我们用 -frame 命令行参数构建一个更为复杂的边框。首先我们将添加一个和前面的示例中构建的边相同(只是颜色不同)的边框。

convert -mattecolor black -frame 5x5 beach.png beach-frame.png

用参数 -mattcolor-frame 替换了 -bordercolor-border,不过其余部分与 border 命令相同。


图 8. 简单的黑色边
有简单黑色边框的海滩图片

现在我们可以做一些更复杂的事情,添加一些类似于用 -raise 命令得到的阴影。

convert -mattecolor black -frame 5x5+2 beach.png beach-frame2.png

现在是这样了:


图 9. 同一张图片,不过有一些更多的修饰
带有稍复杂的边的海滩图片

最后,我们可以添加一些更多的修饰,以达到我期望的最终效果:

convert -mattecolor black -frame 5x5+2+2 beach.png beach-frame3.png

最后我们得到:


图 10. 完成的边框
带有已完成边框的海滩图片

如果您正在寻找为您的图像制作漂亮的边框的方法,那么我建议您花一些时间来研究 -frame 命令的参数。例如,这里有一些有趣的边框,加在了澳大利亚 King’s Canyon 的岩石图片上。

要深入了解可用的各种不同边框,请参考 convert 的手册页。

convert -mattecolor gray -frame 25x25+0+25 rock.png rock-frame1.png

convert -mattecolor gray -frame 25x25+25+0 rock.png rock-frame2.png


图 11. 两个边框
两张有漂亮边框的岩石图片

同时处理多个图像

在我的上一篇文章中,我已经给出了同时转换多个图像的代码。正如一些人所指出的,我给出的代码并不是最好的方法。

下面是我以前给出的代码:

清单 1. 生成当前目录下所有 JPEG 图片的缩略图


for img in `ls *.jpg`
do
  convert -sample 25%x25% $img thumb-$img
done

现在已经证明这是不好的 bash 风格,因为它没有很好地处理文件名中的空格(每个词将被认为是一个单独的文件名)。取而代之,一个更好的方法是:

清单 2. 生成当前目录下所有 JPEG 图片的缩略图,具有更好的 bash 风格


for img in *.jpg
do
  convert -sample 25%x25% $img thumb-$img
done

这将更好地处理文件名中的空格。

不过,结果证明这两个方案 ImageMagick 都不需要 —— 我们可以只使用 mogrify 命令。 mogrify 命令用于转换一系列文件(虽然它同样可以处理单一的图像)。

前面的代码片断将变成:

mogrify -sample 25%x25% *.jpg

注意,这将会导致原始图像被新图像所覆盖。很难指定输出文件名,这是 mogrify 的局限性之一。 指定输出文件名的惟一的方法是,改变输出文件相对于输入文件的格式。这样的结果是新的图像具有了不同的扩展名。例如:

mogrify -format png -sample 25%x25% *.jpg

这将创建一系列输出文件,这些文件的末尾的 jpg 将由 png 所取代,同时伴随着文件格式的改变。

前面定义的所有转换也都可以用 mogrify 命令来完成,所以,如果您不在意原始文件被覆盖的话,这是一个很好的选择。如果您不希望原始文件被覆盖,那么您可以将它们拷贝到一个临时目录来对它们进行转换(mogrify),并改变它们的名字 —— 或者您继续使用 convert 和 bash。

PDF 处理

到现在为止我们所讨论过的示例(不管是本文的还是前文的),都是针对独立图像的简单转换。ImageMagick 还可以一次进行不止一个图像的有趣转换,值得关注。

最常见的示例是 ImageMagick 的 PDF 处理。让我们假想一个情形,您给出了一个包含一系列图像(每页一个)的 PDF 文件。ImageMagick 将为您导出那些图像到单独的文件中。例如,下面是一个 PDF 文档的屏幕截图,其中有一些我最近到 linux.conf.au 旅游的图片(顺便说一句,实在是太美了):


图 12. 带有几个图像的 PDF 样例
PDF 中的一些图像

让我们假定上面的 PDF 是一个朋友发给您的。您希望将图像导出以进行进一步的处理。

convert 当然可以将这些图像从 PDF 文档中导出:

convert foo.pdf pages.png

这将是我们想要做的 —— 每一页被导出为自己的 PNG 文件。不过,有一个命名方面的意外的副作用。

清单 3. 检查文件名


mikal@deathstar:~/foo$ convert foo.pdf pages.png
mikal@deathstar:~/foo$ ls pages*
pages.png.0  pages.png.1  pages.png.2  pages.png.3  pages.png.4
mikal@deathstar:~/foo$

由于命令创建了不只一个 PNG 文件,所以文件名被附加了一个惟一的编号。如果您接下来尝试使用基于文件扩展名来判断文件类型的代码或者脚本,那么将会受到影响。

作为一个友好的工具, convert 让我们可以更好地指定文件名。前面的命令实际上应该是像这样:

清单 4. 从 PDF 文档中导出页,赋以更好的文件名


mikal@deathstar:~/foo$ convert foo.pdf pages-%03d.png
mikal@deathstar:~/foo$ ls pages*
pages-000.png  pages-001.png  pages-002.png  pages-003.png  pages-004.png
mikal@deathstar:~/foo$

最新评论共有 4 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册