Mac python3 环境下 完善pdf转jpg脚本
由于样本图片数据都是保存在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)
5、参考文章:
https://www.jianshu.com/p/1754ad695377
Mac python3 环境下 完善pdf转jpg脚本的更多相关文章
- 桂电在linux、Mac OS环境下使用出校器(支持2.14)
这是guetsec学长在三院科协学长所抓包逆向分析1.81版出校器的基础上,用python写的一款为Mac和linux环境开发的出校器. 最后我做了略微修改,支持暂时最新版本2.14.下面有直接从源码 ...
- 在Mac OS环境下安装MySQL服务
在Mac OS环境下安装MySQL服务 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我之前介绍过window环境下安装mysql服务,以及在Linux环境下安装mysql服务,今 ...
- 一步步教你搭建VS环境下用C#写WebDriver脚本
一步步教你搭建VS环境下用C#写WebDriver脚本http://www.automationqa.com/forum.php?mod=viewthread&tid=3529&fro ...
- 20181225-Linux Shell Bash环境下自动化创建ssh互信脚本
20181225-Linux Shell Bash环境下自动化创建ssh互信脚本 1. 我的Blog 博客园 https://www.cnblogs.com/piggybaba/ 个人网站 http: ...
- Window环境下,PHP调用Python脚本
参考 php调用python脚本*** php 调用 python脚本的方法 解决办法:php提供了许多调用其他脚本或程序的方法,比如exec/system/popen/proc_open/passt ...
- .net环境下从PDF文档中抽取Text文本的一些方法汇总
1.PDFBox的IKVM版本:据我所知,目前只有PDFBox的IKVM版本能比较好地从PDF中提取文本,PDFBOX更多信息请访问http://www.pdbox.org,关于其应用实例,可以参考C ...
- Mac OS环境下媒体文件分割工具mediafilesegmenter的简单使用(生成M3U8 TS文件)
mediafilesegmenter是苹果开发的一款用于分割媒体文件的工具,其功能与mediastreamsegmenter相似,但操作更简单. * 具体可以对比博客中的另一篇简介<Mac OS ...
- Mac+Docker环境下xdebug的配置
由于容器化的需要,前几天我本地也换成了docker环境.就研究了一下docker环境下phpstorm和xdebug的配置. http://www.mmfei.com/?p=453 这个博客给出了一个 ...
- Anaconda3+python3环境下如何创建python2环境(win+Linux下适用,同一个anaconda下py2/3共存)
本人之前已经在anaconda环境下已经安装了python3的环境,现在因为一些需求,要安装python2环境 1.打开anaconda的anaconda prompt查看当前环境: conda in ...
随机推荐
- 使用ZooKeeper实现配置同步(转)
前言 应用项目中都会有一些配置信息,这些配置信息数据量少,一般会保存到内存.文件或者数据库,有时候需要动态更新.当需要在多个应用服务器中修改这些配置文件时,需要做到快速.简单.不停止应用服务器的方式修 ...
- expdp impdp 数据库导入导出命令具体解释
一.创建逻辑文件夹,该命令不会在操作系统创建真正的文件夹.最好以system等管理员创建. create directory dpdata1 as 'd:\test\dump'; 二.查看管理理员文件 ...
- LNMP 架构 上传文件
修改PHP上传文件大小限制的方法 修改PHP上传文件大小限制的方法1. 一般的文件上传,除非文件很小.就像一个5M的文件,很可能要超过一分钟才能上传完.但在php中,默认的该页最久执行时间为 30 ...
- spring属性的三种注入方法
(1)使用set方法: public class Book { private String bookname;public void setBookname(String bookname) { ...
- 产生冠军--hdoj
产生冠军 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissi ...
- JavaScript:Browser 对象
ylbtech-JavaScript:Browser 对象 1. Window 对象返回顶部 1. Window 对象 Window 对象 Window 对象表示浏览器中打开的窗口. 如果文档包含框 ...
- Node.js:Strea
ylbtech-Node.js:Stream 1.返回顶部 1. Node.js Stream(流) Stream 是一个抽象接口,Node 中有很多对象实现了这个接口.例如,对http 服务器发起请 ...
- 1-1restful简介及资源介绍
- First Day Python介绍
前言:刚开通的博客,谢谢博客园平台,管理辛苦! Python介绍 Python是一门高级的.面向对象的.解释性.脚本语言. 高级语言:贴近开发者,对应底层语言,底层语言贴近机器:java.C#.php ...
- 如何正确产看API
看API时,先看的它的父接口自接口,及其相关的抽象类和子类 看完后,看概述的第一段话就行,后面的不用看. 再看构造方法,并到底层去看构造方法里参数的具体含义. 最后,再将包含的方法一个个进行测试. 解 ...