Alguma maneira de diferenciar objetos ImageMagick e GraphicsMagick com?
-
26-09-2019 - |
Pergunta
Eu tenho ImageMagick e GraphicsMagick ambos instalados. Eu posso usar os dois livremente da linha de comando porque eles têm namespaces de comando diferentes (todos os comandos do imagemagick são parâmetros para o gm
Comando GraphicsMagick). Da linha de comando:
convert ...
usa o imagemagickgm convert ...
usa GraphicsMagick
Tudo isso funciona bem. No entanto, parece que os objetos COM de ambos os programas são invocados de forma idêntica:
Set img = CreateObject("ImageMagickObject.MagickImage.1")
Cria um objeto ImageMagickSet img = CreateObject("ImageMagickObject.MagickImage.1")
Cria um objeto GraphicsMagick ... difícil de acreditar, mas isso é direto do GraphicsMagickSimpleTest.vbs
amostra script
Como especificar qual objeto COM eu quero usar? Ou estou sem sorte?
EDITAR: Acabei de comparar os scripts de amostra VBS incluídos com ImageMagick e GraphicsMagick, ambos nomeados simplicos.vbs. Acontece que eles têm mais em comum do que o nome do arquivo. São arquivos quase idênticos. Isso por si só pode não significar muito (afinal, a GM foi bifurcada no IM), mas estou começando a me perguntar se o GraphicsMagick realmente tem um objeto COM ou se eles estão apenas incluindo o objeto COM do ImageMagick em seu binário do Windows.
Solução
Eu fiz essa pergunta na lista de discussão GraphicsMagick: Por que o objeto GraphicsMagick Com chamado ImageMagick? Aqui está parte da resposta de Bob Frienhahn:
Eu concordo que é confuso. GraphicsMagick oferece um objeto COM. A história é interessante. O ImageMagickObject original foi desenvolvido sob o projeto GraphicsMagick pelo mesmo autor que o imagemagickObject original. O atual ImageMagickObject foi desenvolvido no projeto GraphicsMagick e Bill Radcliffe manteve o nome original.
Não estou ciente de uma maneira de especificar o uso de uma implementação de ImageMagickObjecject com a implementação específica se ambos estiverem registrados. É possível registrar dois objetos COM com o mesmo nome de uma só vez?
Quanto a poder dizer qual está em uso no tempo de execução, parece que a transmissão do argumento '-version' pode ser usada para retornar algumas informações úteis.
Se eu entendo a compactação corretamente, acredito que isso basicamente significa que, qualquer que seja a biblioteca registrada mais recentemente-o Imagemagick ou o GraphicsMagick-será o chamado de dentro do código.