使用 Perl 和 GNU 软件进行 Web 图形编程

作者:Shawn P. Wallace
出版社:O'Reilly & Associates
电子邮件:info@ora.com
价格:29.95 美元
ISBN:1565924789
评论者:Michael J. Hammel
大约一年半以前,我开始在线投资。我做的第一件事是研究我发现最有趣的股票。雅虎的股票部分非常好——许多看起来重要的数字和图表。这些图表让我感到惊讶——当时我还没有想到动态图像。用于图表的大部分数据是相当静态的(例如,一年、三年和五年报告),但永久保留这些图表是没有意义的。这将是对磁盘空间的极大浪费,而且数据可能会意外更改。
我现在更熟悉一般的图像开发,但直到最近,我仍然不太清楚 Web 的动态图形是如何构建的。也就是说,直到Linux Journal寄给我一本 Shawn Wallace 的使用 Perl 和 GNU 软件进行 Web 图形编程。虽然现在 Web 上看到的大多数图形都使用内部开发的工具,但其中许多图形最初都是使用 Shawn 描述的相同工具开始的,例如 ImageMagick 和 GD 库。
顾名思义,Shawn 的文本侧重于使用 Perl 编写工具。他详细讨论的几乎所有工具都有一个 Perl 模块,使其易于集成到您的脚本中。其他工具从命令行工作,因此从 Perl 调用它们仍然相当容易。
文本以一些基本的网络图形问题和最流行的(Web 支持的)图形文件格式的比较开始。这些比较非常好,提供了关于标头格式的信息以及关于何时何地最好使用这些格式的一些指针。一个有趣的位是关于 JPEG(联合图像专家组)。显然,JPEG 中的压缩技术非常适合人眼对颜色的感知,但往往比 GIF(图形交换格式)更容易扭曲文本。在阅读本文之前我不知道这一点,现在明白了对话窗口的屏幕截图最好保存为 GIF。当然,权衡是在文件大小上。没有完美的格式。
关于这本书,可以说一些优点和缺点。首先,它坚持众所周知的已发布标准——换句话说,它坚持 HTML 3.2。这是一件好事,但不幸的是,它没有谈论 HTML 4.0;例如,没有关于样式表的讨论。它也没有为 Netscape 或 Internet Explorer 扩展留出太多空间。如果您愿意,可以否认它,但这两个浏览器中的任何一个都可能是大多数用户的首选工具。至少,一个显示一些差异或特定于浏览器的扩展的表格会很有用。
回到好的一面,Shawn 在介绍和定义 API(应用程序编程接口)方面做得非常出色。在整本书中,他首先讨论图形库接口、其 API,然后是有意义的示例。嗯,大多数都是有意义的。第 6 章中的生物节律示例对我来说似乎有点太王牌大贱谍了。我在 60 年代生活过,真的讨厌回到那里。
大多数章节还包括深入的函数参考。考虑到每章都以一些关于如何使用这些库的直接、非技术性的谈话开始,这确实是非常有用的信息,并且有点出乎意料。Shawn 再次不遗余力地提供最有用的技术信息。
非常好的两章是第 5 章“使用 PerlMagic 的工业强度图形脚本”和第 7 章“使用 GIMP(GNU 图像处理程序)的 Web 图形”。前者非常有用,即使您不是专门进行 Web 图形处理。它包括对 PerlMagic 到 ImageMagic 接口的非常广泛的描述。
GIMP 章节对于专家来说太稀疏,对于新用户来说太技术性。但是,它确实提供了关于各种动画选项的信息,其中很多我不知道。关于 Perl-Fu 的部分很好,但 Perl-Fu 需要 Perl 5.005,大多数 Red Hat 5.2 用户都没有。(SuSE、Debian 和其他发行版可能有这个——您需要运行 Perl -V 来查找。)我发现很多应用程序级工具对标准发行版中不可用的库和底层实用程序提出要求有点烦人。在像 Linux 这样年轻的环境中,这不应该令人惊讶,但这仍然很烦人。即便如此,GIMP 的 Perl 扩展是一笔宝贵的财富,不应被忽视。
Perl-Fu 接口带有几个 Perl 模块。GIMP 模块允许通过标准插件接口 gimp_run_procedure 访问插件和过滤器。GIMP::Fu 模块抽象了这一点,因此您可以通过名称调用插件。至少,这是我在阅读本章后的印象。查看附录 C,它是编写 GIMP Perl 脚本的非常好的参考。
整本书中最令人困惑的一段出现在关于 GIMP 的章节中。在这里,在一个脚注中,Shawn 试图解释插件、Script-Fu 脚本和 Perl 脚本之间的区别。这不是一篇容易阅读的文章,但这确实是一个不错的尝试。我注意到第 8 章“图像地图”中关于 GIMP 的一个错误:现在 GIMP 有一个图像地图工具。我怀疑 Shawn 错过这个的原因仅仅是时间问题。图像地图插件可能是在 Shawn 完成本书写作后才出现的。
总的来说,文本在试图做到平台无关方面做得相当差。偶尔会提到基于 Microsoft 的工具,但讨论的许多(也许是大多数)工具都是特定于 UNIX 的。我认为 O'Reilly 可能比 Shawn 更想要这个,但在任何一种情况下,他们可能都应该只坚持使用 UNIX。
关于动画的章节很好,从纯粹的编程角度讨论了该主题。许多涵盖的技术,例如分割图像,通常在使用 GIMP 等交互式工具时效果更好。然而,许多动画工作是重复性的,并且为此过程配备编程工具显然很有帮助。本章很好地解释了从 Web 开发人员的角度来看动画编程的原理和原因。
我完全不同意的是第 10 章中关于在 HTML ALT 标签中嵌入 ASCII 艺术的建议。如果您想使用 ASCII 艺术,作为对纯文本浏览器用户的便利,请将 ALT 标签设置为适当的文本,并将标签链接到包含 ASCII 艺术的单独页面。不要将其嵌入到 ALT 标签中。如果您这样做,当您必须返回并手动编辑该 HTML 文件时,您会讨厌自己。
总的来说,我对 Shawn 在这个主题上的工作印象深刻。我为数不多的抱怨是
黑白图像使得很难看到并排图像格式比较中的伪影。
第 2 章首先给出了 Perl 代码,然后提到了后面章节中描述的模块。在阅读完代码之前,我以为我遗漏了什么。
第 3 章提到了与“文本流”对齐,但没有定义其含义。(它指的是与窗口边缘、表格或单元格框架等的对齐。)
这些问题是次要的,之所以突出只是因为我专门在做评论。它们不会分散本书的主要目的,即指导开发人员以编程方式生成 Web 图形。本书的真正精髓——深入的 API 描述——远远超过了任何较小的问题。
阅读完本书后,我不得不说我最初对缺乏对某些工具(例如用于动画的 WhirlGIF)的引用感到失望。然后我更多地考虑了本书的标题,以及它确实专门提到了“GNU”。如果您只生活在 GNU 中并呼吸 GNU,那么本文非常适合您。如果您对 GNU 以及其他选项感兴趣,它将仅满足您的一部分需求。尽管如此,它仍然是一个相当坚实的部分,绝对是开始学习动态编程 Web 图形的好地方。
