在没有用户安装 ImageMagick 的情况下通过网络驱动器共享 ImageMagick 文件?
Share ImageMagick files over network drive without users installing ImageMagick?
是否可以通过网络驱动器(例如:Z:)与其他人共享 ImageMagick 文件,而无需用户安装 ImageMagick?
ImageMagick 在我自己的机器上运行良好,因为我使用了它的二进制安装程序并设置了 Windows 环境变量(“MAGICK_HOME”)。
我尝试使用 Python 自动设置用户的系统环境变量,但即便如此,当用户在命令提示符中键入时:
convert c:\testA.psd c:\testB.png
会报错:
convert.exe: no decode delegate for this image format 'PSD' @ error/constitute.c/ReadImage/501.
convert.exe: no images defined 'c:\testB.png' @ error/convert.c/ConvertImageCommand/3212.
和相关错误,例如:
RegistryKeyLookupFailed 'CoderModulesPath'
备注
- 系统:Windows7、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
它 returns 是一个空列表。所以现在我确定用户的 IM 没有正确安装。
参考#2
Packaging an application that uses the ImageMagick C API
我一直在寻找更多关于 'manually install ImageMagick' 的答案(不是通过二进制安装程序),所以我可以确切地知道我必须通过 Python 配置哪些 Windows 设置。然后上面的 link(由 Alex 发布)显示了我想要的。现在我意识到我没有配置环境变量“CoderModulesPath”。现在我要试试看...
实现这一目标的最佳机会是共享 ImageMagick 的便携式版本。在 Google 上查找 ImageMagick portable,下载文件并将它们放在共享中。
经过长时间的搜索...终于找到了解决方案:
如果您想与其他用户共享您的 ImageMagick 文件夹和文件 - 为他们省去安装的麻烦或出于某些其他原因 - 请务必以编程方式配置他们系统的环境变量:
"MAGICK_HOME" = [ImageMagick 文件夹的路径]
例如。 z:\ImageMagick-6.9.0-Q8
"MAGICK_CODER_MODULE_PATH" = [ImageMagick 文件夹的路径]\modules\coders
例如。 z:\ImageMagick-6.9.0-Q8\modules\coders
在...modules\coders文件夹里面有处理不同类型图片文件的DLL,如果不指定这个路径,IM可以找不到 "decode delegate"
设置环境变量后,您可能希望通知用户重启机器以使变量生效。
兼容性
如果您使用 API 访问此 ImageMagick 库(例如 Python wand),那么这可能是个不错的选择。 ImageMagick 的便携版本可能不兼容,因为文件结构与非便携版本不同。
资源
Python class 检索和修改 Windows 注册表项和值:
参考: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'SYSTEM\CurrentControlSet\Control\Session Manager\Environment'
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)
是否可以通过网络驱动器(例如:Z:)与其他人共享 ImageMagick 文件,而无需用户安装 ImageMagick?
ImageMagick 在我自己的机器上运行良好,因为我使用了它的二进制安装程序并设置了 Windows 环境变量(“MAGICK_HOME”)。
我尝试使用 Python 自动设置用户的系统环境变量,但即便如此,当用户在命令提示符中键入时:
convert c:\testA.psd c:\testB.png
会报错:
convert.exe: no decode delegate for this image format 'PSD' @ error/constitute.c/ReadImage/501.
convert.exe: no images defined 'c:\testB.png' @ error/convert.c/ConvertImageCommand/3212.
和相关错误,例如:
RegistryKeyLookupFailed 'CoderModulesPath'
备注
- 系统:Windows7、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
它 returns 是一个空列表。所以现在我确定用户的 IM 没有正确安装。
参考#2
Packaging an application that uses the ImageMagick C API
我一直在寻找更多关于 'manually install ImageMagick' 的答案(不是通过二进制安装程序),所以我可以确切地知道我必须通过 Python 配置哪些 Windows 设置。然后上面的 link(由 Alex 发布)显示了我想要的。现在我意识到我没有配置环境变量“CoderModulesPath”。现在我要试试看...
实现这一目标的最佳机会是共享 ImageMagick 的便携式版本。在 Google 上查找 ImageMagick portable,下载文件并将它们放在共享中。
经过长时间的搜索...终于找到了解决方案:
如果您想与其他用户共享您的 ImageMagick 文件夹和文件 - 为他们省去安装的麻烦或出于某些其他原因 - 请务必以编程方式配置他们系统的环境变量:
"MAGICK_HOME" = [ImageMagick 文件夹的路径]
例如。 z:\ImageMagick-6.9.0-Q8
"MAGICK_CODER_MODULE_PATH" = [ImageMagick 文件夹的路径]\modules\coders
例如。 z:\ImageMagick-6.9.0-Q8\modules\coders
在...modules\coders文件夹里面有处理不同类型图片文件的DLL,如果不指定这个路径,IM可以找不到 "decode delegate"
设置环境变量后,您可能希望通知用户重启机器以使变量生效。
兼容性
如果您使用 API 访问此 ImageMagick 库(例如 Python wand),那么这可能是个不错的选择。 ImageMagick 的便携版本可能不兼容,因为文件结构与非便携版本不同。
资源
Python class 检索和修改 Windows 注册表项和值:
参考: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'SYSTEM\CurrentControlSet\Control\Session Manager\Environment'
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)