起因:
在我自己写Blog时,想把MarkDown的内容转成一个长图,但是不会用PS,所以很纠结,只能自己动手做一套生成长图的流程
Automator 工具
在Mac上有一个很不起眼但是非常好用的工具叫Automator,可视化编程,可以大大提高我们自动化的效率,下面针对合成长图进行介绍
- 首先我们打开Automator时,选择服务一栏

- 拖入如图下的三个组件

- 值得注意的是,你需要选择服务接收到选定的PDF文件,并且位于Finder(神他妈访达)
- 然后起名为 PDF 转 PNG
- 紧接着我们右键点击对应的PDF文件,如下图所示

-
程序执行完毕后,会在桌面生成一组图片

-
这是Automator的任务已经结束了,下面我们需要写一个python脚本,让代码来将这几个散图拼接成一个长图,下面是python的代码部分
#!/usr/bin/python
#encoding=utf-8
import numpy as np
from PIL import Image
import glob,os
if __name__=='__main__':
prefix=input('Input the prefix of images:')
files=glob.glob(prefix+'_*')
num=len(files)
filename_lens=[len(x) for x in files] #length of the files
min_len=min(filename_lens) #minimal length of filenames
max_len=max(filename_lens) #maximal length of filenames
if min_len==max_len:#the last number of each filename has the same length
files=sorted(files) #sort the files in ascending order
else:#maybe the filenames are:x_0.png ... x_10.png ... x_100.png
index=[0 for x in range(num)]
for i in range(num):
filename=files[i]
start=filename.rfind('_')+1
end=filename.rfind('.')
file_no=int(filename[start:end])
index[i]=file_no
index=sorted(index)
files=[prefix+'_'+str(x)+'.png' for x in index]
print(files[0])
baseimg=Image.open(files[0])
sz=baseimg.size
basemat=np.atleast_2d(baseimg)
for i in range(1,num):
file=files[i]
im=Image.open(file)
im=im.resize(sz,Image.ANTIALIAS)
mat=np.atleast_2d(im)
print(file)
basemat=np.append(basemat,mat,axis=0)
final_img=Image.fromarray(basemat)
final_img.save('merged.png')
最后我们需要在terminal上面执行此py脚本
merged.png 就是我们最终执行的结果啦~

Comments | 1 条评论