我已经安装了ImageMagick和GraphicsMagick。我可以从命令行免费使用两者,因为它们具有不同的命令名称空间(所有成像命令都是到达的参数 gm GraphicsMagick命令)。从命令行:

  • convert ... 使用ImageMagick
  • gm convert ... 使用GraphicsMagick

一切都很好。但是,看来两个程序的com对象都被相同调用:

  • Set img = CreateObject("ImageMagickObject.MagickImage.1") 创建一个成像对象
  • Set img = CreateObject("ImageMagickObject.MagickImage.1") 创建一个GraphicsMagick对象...难以置信,但这是直接从GraphicsMagick SimpleTest.vbs 示例脚本

如何指定要使用的com对象?还是我不幸?

编辑: 我只是比较了ImageMagick和GraphicsMagick包含的示例VBS脚本,均为SimpleTest.vbs。事实证明,它们比文件名更具共同点。它们几乎是相同的文件。这本身可能并不意味着太多(毕竟,通用汽车是从IM分叉的),但是我开始怀疑GraphicsMagick是否真的有一个COM对象,或者它们是否只是将ImageMagick的COM对象包括在Windows二进制中。

有帮助吗?

解决方案

我在GraphicsMagick邮件列表上问了这个问题: 为什么GraphicsMagick com对象称为ImageMagick? 这是鲍勃·弗里森哈恩(Bob Friesenhahn)的回应的一部分:

我同意这很困惑。 GraphicsMagick确实提供了一个com对象。历史很有趣。原始的ImageMagickobject是在GraphicsMagick Project下与原始ImageMagickobject一起开发的。当前的ImageMagickObject是在GraphicsMagick项目下开发的,而Bill Radcliffe保留了原始名称。

如果两者都注册,我不知道一种使用特定的ImageMagickobject com实现的方法。甚至可以一次以同名注册两个COM对象?

至于能够在运行时使用哪一个,似乎可以使用参数“ version”来返回一些有用的信息。

如果我正确理解com,我相信这基本上意味着最近注册的任何库(agagemagick或graphicsmagick)将是代码中调用的库。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top