由于样本图片数据都是保存在pdf里,想拿到样本必须先把图片从pdf中提取出来,算是数据清洗中的一点小小的积累吧。
这里不得不吐槽一下公司存储图片的机制,业务员把jpg格式的照片放到word里,然后用工具把word保存为pdf,最后上传到公司服务器里,这简介反人类,不但丢失了图片头文件信息,还造成后期数据转换的大量时间资源的浪费,可能pdf格式会小一点,但是完全可以通过其他图片编码方式进行解决,我才疏学浅,不能理解其中的逻辑。
下面进入正题:
这里把初始报错信息贴出来,以便大家对症下药:
ImportError: MagickWand shared library not found.
You probably had not installed ImageMagick library.
Try to install: brew install freetype imagemagick
细心的提示了,需要安装imagemagick 趟坑开始
1、安装 ImageMagick
mac环境下,如果直接使用
$ brew imagemagick
进行安装,默认会安装7.0.7-37版本,通过测试,这个版本修改了相关方法,在后面的脚本中会报错,于是需要安装im6,尝试了很多办法,有的通过编译安装,有的通过git命令获得历史版本安装,不过最方便的还是直接用brew 查看可安装的软件版本
$ brew search imagemagick
会直接列出所有历史版本
=> Searching local taps...
imagemagick@6 imagemagick
==> Searching taps on GitHub...
==> Searching blacklisted, migrated and deleted formulae...
而后选择对应的版本就可以了,这里安装im6
$ brew install imagemagick@6
安装成功后,发现程序中还是报错依旧。
经过多方查找原因,原来是im默认储存的目录不在系统检索的目录里,需要建立一个软连接(说白了就是在系统检索的目录里建立一个快捷方式)
$ ln -s /usr/local/Cellar/imagemagick@6/6.9.9-49/lib/libMagickWand-6.Q16.dylib /usr/local/lib/libMagickWand.dylib
后面步骤引用参考文章中的内容,在此感谢作者。
2、安装gs
$ brew install gs
3、安装wand
$ pip install wand
4、一码胜千言
from wand.image import Image
pdf_file = '.../example/a.pdf'
def convert_pdf_to_jpg(file_name, pic_file=None, resolution=120):
# 转换函数,默认分辨率120
with Image(filename=file_name, resolution=resolution) as img:
print('pages = ', len(img.sequence))
with img.convert('jpeg') as converted:
# 指定图片位置
if pic_file != None:
converted.save(filename=pic_file)
else:
# 同目录同文件名
converted.save(filename= '%s.jpg' % (file_name[:file_name.rindex('.')]))
if __name__ == '__main__':
convert_pdf_to_jpg(pdf_file)