1

我已经安装了 ImageMagick 和 GraphicsMagick。我可以从命令行自由使用它们,因为它们具有不同的命令命名空间(所有 ImageMagick 命令都是gmGraphicsMagick 命令的参数)。从命令行:

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

这一切都很好。但是,似乎两个程序的 COM 对象被相同地调用:

  • Set img = CreateObject("ImageMagickObject.MagickImage.1")创建一个 ImageMagick 对象
  • Set img = CreateObject("ImageMagickObject.MagickImage.1")创建一个 GraphicsMagick 对象...难以置信,但这直接来自 GraphicsMagickSimpleTest.vbs示例脚本

如何指定要使用的 COM 对象?还是我运气不好?

编辑:我刚刚比较了 ImageMagick 和 GraphicsMagick 中包含的示例 VBS 脚本,它们都名为 SimpleTest.vbs。事实证明,它们比文件名有更多的共同点。它们几乎是相同的文件。这本身可能意义不大(毕竟,GM 是从 IM 派生的),但我开始怀疑 GraphicsMagick 是否真的有一个 COM 对象,或者它们是否只是将 ImageMagick 的 COM 对象包含在他们的 Windows 二进制文件中。

4

1 回答 1

1

我在 GraphicsMagick 邮件列表上问了这个问题: 为什么 GraphicsMagick COM 对象叫 ImageMagick? 以下是 Bob Friesenhahn 的部分回复:

我同意这令人困惑。GraphicsMagick 确实提供了一个 COM 对象。历史很有趣。原始 ImageMagickObject 是由与原始 ImageMagickObject 相同的作者在 GraphicsMagick 项目下开发的。当前的 ImageMagickObject 是在 GraphicsMagick 项目下开发的,Bill Radcliffe 保留了原来的名称。

如果两者都已注册,我不知道指定使用特定 ImageMagickObject COM 实现的方法。是否可以一次注册两个同名的 COM 对象?

至于能够在运行时判断哪个正在使用,似乎传递参数“-version”可能用于返回一些有用的信息。

如果我正确理解 COM,我相信这基本上意味着最近注册的任何库——ImageMagick 或 GraphicsMagick——都将是从代码中调用的库。

于 2010-11-22T14:38:22.247 回答