python调用ImageMagick
起因
在我浅薄的认知里,命令行工具使用非常方便,单文件拷贝到任意一个地方,只要输入它的地址就可以直接调用了。如果这个命令行工具经常使用就把它所在地址写到环境变量里,然后只要输入它的文件名就可以直接快速调用了。
然而ImageMagick有点不一样,在mac上如果直接调用会提示“dyld: Library not loaded”,常用的指令都是convert,而不是我以为的ImageMagick,不过想想也是,convert敲起来更方便也更好记忆。
直接调用结果
hf-home:~ hf$ /Users/hf/mytool/tool/ImageMagick/convert ; exit;
dyld: Library not loaded: /ImageMagick-7.0.8/lib/libMagickCore-7.Q16HDRI.6.dylib
Referenced from: /Users/hf/mytool/tool/ImageMagick/convert
Reason: image not found
Abort trap: 6
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
Deleting expired sessions...36 completed.
安装ImageMagick
- 官网下载安装包,目前最新是“ImageMagick-x86_64-apple-darwin19.3.0.tar.gz”
- 解压后得到 “ImageMagick-7.0.10”文件夹,将此文件夹拷贝到用户目录下
- 配置环境变量
终端运行下面命令可以快速配置
echo 'export MAGICK_HOME="$HOME/ImageMagick-7.0.10"' >> ~/.bash_profile
echo 'export PATH="$MAGICK_HOME/bin:$PATH"' >> ~/.bash_profile
echo 'export DYLD_LIBRARY_PATH="$MAGICK_HOME/lib/"' >> ~/.bash_profile
source ~/.bash_profile
手动配置 或者 shell不是bash可以将下面的内容配置到环境变量中
export MAGICK_HOME="$HOME/ImageMagick-7.0.10"
export PATH="$MAGICK_HOME/bin:$PATH"
export DYLD_LIBRARY_PATH="$MAGICK_HOME/lib/"
- 配置完成后,输入命令进行测试
hf-home:~ hf$ identify logo.gif
# 执行成功的结果显示
logo.gif GIF 640x480 640x480+0+0 8-bit sRGB 256c 28576B 0.000u 0:00.000
运行环境分析
还是念念不忘“绿化”的事情,因为自己在用python写工具,有时要分享给朋友和同事,配置环境变量对他们来说有点难。
bin目录下可以找到“convert”、“magick”等命令行执行文件,lib目录下是可执行文件的支持库文件,配置环境变量的时候要添加的3行,就是让执行文件能找到支持库文件。
python调用代码
python中可以通过 os.environ 方法来指定运行时的环境变量
import os
from subprocess import getoutput
# '~/ImageMagick-7.0.10'
# 其中的“~”指代当前用户的用户目录,这种方式在别的电脑也能识别正确
magick_home = os.path.expanduser('~/ImageMagick-7.0.10')
# 在对应的环境变量内容之前,插入相应的路径
e = os.environ
k, s = 'MAGICK_HOME', magick_home
e[k] = "%s:%s" % (s, e[k]) if k in e else s
k, s = 'PATH', "%s/bin" % magick_home
e[k] = "%s:%s" % (s, e[k]) if k in e else s
k, s = 'DYLD_LIBRARY_PATH', "%s/lib" % magick_home
e[k] = "%s:%s" % (s, e[k]) if k in e else s
convert_path = "%s/bin/convert" % magick_home
result = getoutput("%s -version" % convert_path)
print(result)
# 查询 convert 版本信息
# convert -version
#
# 执行结果:
# Version: ImageMagick 7.0.10-7 Q16 x86_64 2020-04-10 https://imagemagick.org
# Copyright: © 1999-2020 ImageMagick Studio LLC
# License: https://imagemagick.org/script/license.php
# Features: Cipher DPC HDRI
# Delegates (built-in): bzlib freetype jng jpeg lcms png raw tiff webp xml zlib