我以我的生命和对它的热爱起誓,我永远不会为了另一个人的缘故而活着,也不会要求另一个人的为了我的缘故而活着。——安·兰德的《阿特拉斯耸耸肩》中的约翰·高尔特
ImageMagick 起源于我的杜邦主管戴维·彭萨克博士的一项请求,要求在一个只能同时显示 256 种独特颜色的显示器上显示计算机生成的图像。
1987 年,能够显示 24 位真彩色图像的显示器非常罕见且价格昂贵。杜邦有很多化学家和生物学家,但精通计算机科学的人却很少。因此,我转向 Usenet 寻求帮助,并发布了一则请求,寻找将 24 位图像缩减为 256 色的算法。南加州大学信息科学研究所的保罗·拉夫林做出了回应,他不仅提供了解决方案,而且该方案已经包含在源代码中,并可从南加州大学的 FTP 站点获取。在接下来的几年里,我在杜邦工作期间遇到的其他棘手的计算机科学问题,也经常有机会获得帮助。最终,我感到有必要感谢我在 Usenet 上那些知识渊博的人们提供的帮助。我决定将我开发的图像处理工具免费发布到全世界,以便其他人能够从我的努力中受益。
1990 年,免费提供的图像处理工具很少,所以我预计会受到热烈的欢迎。在发布之前,彭萨克博士必须说服杜邦的高层管理人员放弃他们可能认为有价值的知识产权。我怀疑他们同意仅仅是因为 ImageMagick 不是基于化学或生物学的,所以他们不明白它对公司的价值。无论如何,如果没有杜邦将版权转让给 ImageMagick Studio LLC,ImageMagick 今天将不会存在。ImageMagick 于 1990 年 8 月 1 日发布到 Usenet 的 comp.archives 群组。
ImageMagick 发布后,我偶尔会收到一些增强功能请求、错误报告或对源代码库的贡献。在 90 年代中期,我发布了这些努力的成果,即 ImageMagick 4.2.9。当时,我认为 ImageMagick 已经完成了。它被全球数千用户使用,甚至作为一种名为“Linux”的免费分发的全新操作系统的一部分出现。
下一代 ImageMagick,即版本 5,始于鲍勃·弗里斯恩汉联系我并建议我改进应用程序编程接口,以便用户可以从其他语言或脚本中利用图像处理算法。鲍勃还为 ImageMagick 编写了一个名为 Magick++ 的 C++ 包装器,并开始贡献增强功能,例如模块加载器功能、自动文件识别和测试套件。与此同时,该项目吸引了一些其他著名的贡献者:格伦·兰德斯-佩尔森、威廉·拉德克利夫和伦纳德·罗森索尔。到目前为止,ImageMagick 已被数万用户使用,当新版本破坏了现有的 API 调用或脚本时,他们会做出粗鲁的反应。该小组的其他成员希望冻结 API 和命令行,但我认为 ImageMagick 还没有达到我预期的水平。鲍勃和其他人创建了一个 ImageMagick 的分支,而我继续开发 ImageMagick。
我没有独自工作太久。安东尼·西森联系我,谈到了 ImageMagick 命令行程序的不足之处。他指出,在处理多个图像时,命令行会令人困惑。他建议使用一种有序且定义良好的方法来处理命令行,这成为了 ImageMagick 版本 6。他的努力在他的网页上详细说明,ImageMagick 使用示例。我强烈建议您浏览他的网站。他以我甚至都不知道可能的方式说明了 ImageMagick 的强大功能。
另一位著名的贡献者弗雷德·温豪斯提供了大量命令行脚本,这些脚本执行几何变换、模糊、锐化、边缘检测、降噪和颜色操作。格伦·兰德斯-佩尔森是我们的 PNG 专家,并做出了其他宝贵的贡献。迪尔克·莱姆斯特进行了并继续进行着大量改进,使 ImageMagick 在 Windows 下更加健壮,并分发了一个 .NET 包装器,Magick.NET。
ImageMagick 的设计是一个进化过程,设计和实施工作有助于影响和指导其他方面的进一步进展。在 ImageMagick版本 7中,我们根据从版本 6 实现中吸取的教训改进了设计。ImageMagick 最初设计用于将 RGB 图像显示到 X Windows 服务器。随着时间的推移,我们扩展了对 RGBA 图像的支持,然后扩展到 CMYK 和 CMYKA 图像格式。在 ImageMagick 版本 7 中,我们扩展了对任意颜色空间的支持,并支持任意数量的像素通道。此外,ImageMagick 7 将像素通道存储为浮点数,允许带外值(例如负值)并减少舍入误差。
克里斯蒂
ImageMagick 首席架构师