在网络驱动器上共享ImageMagick文件,而无需用户安装ImageMagick



是否可以通过网络驱动器(例如:Z:)与其他人共享ImageMagick文件,而无需用户安装ImageMagick?

ImageMagick在我自己的机器上运行良好,因为我使用了它的二进制安装程序并设置了Windows环境变量("MAGICK_HOME")。

我尝试使用Python自动设置用户的系统环境变量,但即使在那时,当用户在命令提示符中键入:时

convert c:testA.psd c:testB.png

它会给出一个错误:

convert.exe:没有此图像格式"PSD"的解码委托@error/configurate.c/ReadImage/501。

convert.exe:未定义任何图像"c:\testB.png"@error/convert.c/ConvertImageCommand/322。

以及相关错误,如:

RegistryKeyLookupFailed"CoderModulesPath"

注意

  • 系统:Windows 7,64位
  • ImageMagick版本:6.9.0-Q8
  • ImageMagick文件夹包含许多文件,包括CORE_RL_*.dll,dcraw.exe、ffmpeg.exe、convert.exe、compare.exe等,以及";模块";文件夹

参考#1

http://www.imagemagick.org/discourse-server/viewtopic.php?t=20599

一些有助于调试IM的命令。我使用

convert -list format

并且它返回一个空列表。所以现在我确信用户的IM没有正确安装。

参考#2

打包使用ImageMagick C API 的应用程序

我一直在"手动安装ImageMagick"(而不是通过二进制安装程序)这一行寻找答案,这样我就可以确切地知道我必须通过Python配置哪些Windows设置。然后上面的链接(亚历克斯发布)显示了我想要什么。现在我意识到我没有配置环境变量";CoderModulesPath";。现在我要试试。。。

经过长时间的搜索。。。终于找到了解决方案:

如果你想与其他用户共享你的ImageMagick文件夹和文件,以节省他们安装的麻烦或出于其他原因,一定要用程序配置他们的系统环境变量:

  1. "MAGICK_HOME"=[ImageMagick文件夹的路径]

    例如。z: \ImageMagick-6.90-Q8

  2. "MAGICK_CODER_MODULE_PATH"=[ImageMagick文件夹的路径]\modules\coders

    例如。z: \ImageMagick-6.90-Q8\模块\编码器

。。。模块\编码器文件夹,有处理不同类型图像文件的DLL,如果不指定此路径,IM将找不到"解码委托"

设置环境变量后,您可能需要通知用户重新启动他们的计算机,以便变量生效。

兼容性

如果您正在使用API访问这个ImageMagick库(例如Python棒),那么这可能是一个很好的方法。ImageMagick的可移植版本可能不兼容,因为文件结构与非可移植版本不同。

资源

检索和修改Windows注册表项和值的Python类:

参考:http://code.activestate.com/recipes/577621-manage-environment-variables-on-windows/

if sys.hexversion > 0x03000000:
    import winreg
else:
    import _winreg as winreg
class Win32Environment:
    # Utility class to get/set windows environment variable
    def __init__(self, scope):
        assert scope in ('user', 'system')
        self.scope = scope
        if scope == 'user':
            self.root = winreg.HKEY_CURRENT_USER
            self.subkey = 'Environment'
        else:
            self.root = winreg.HKEY_LOCAL_MACHINE
            self.subkey = r'SYSTEMCurrentControlSetControlSession ManagerEnvironment'
    def getenv(self, name):
        key = winreg.OpenKey(self.root, self.subkey, 0, winreg.KEY_READ)
        try:
            value, _ = winreg.QueryValueEx(key, name)
        except WindowsError:
            value = ''
        winreg.CloseKey(key)
        return value
    def setenv(self, name, value):
        # Note: for 'system' scope, you must run this as Administrator
        key = winreg.OpenKey(self.root, self.subkey, 0, winreg.KEY_ALL_ACCESS)
        winreg.SetValueEx(key, name, 0, winreg.REG_EXPAND_SZ, value)
        winreg.CloseKey(key)

实现这一目标的最佳机会是共享ImageMagick的可移植版本。在谷歌上查找ImageMagick便携版,下载文件并将其共享。

最新更新