• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Python实现拼接多张图片的方法

python 搞代码 4年前 (2022-01-09) 27次浏览 已收录 0个评论

本文实例讲述了Python实现拼接多张图片的方法。分享给大家供大家参考。具体分析如下:

这里所述计划实现如下操作:

① 用Latex写原始博文,生成PDF文档;
② 将PDF转成高清的PNG格式的图片;
③ 将多个PNG格式的图片合并成一大张图片;
④ 将最终的大图片直接上传到博文编辑器中

  好了,如果将PDF文档转换成其他的图片格式呢?我建议windowns下可用Adobe Acrobat X Pro软件完成这个工作,操作步骤如下面两图所示。注意在图二中一定要自己指定一个分辨率,不用用自动的,否则生成的图片大小会有差异的。就我的多次尝试来看,分辨率设置得太大了,虽然图片放大后仍然很清晰,但是贴到博文中仍然需要不断地调整大小,选择“59.06像素/厘米”就非常合适了。需要注意的是,博客的主题要选那种供博文显示的页面比较宽的,否则贴图片上去也不怎么好看的。

  将PDF文档用Adobe Acrobat X Pro另存为图片后,就会在PDF文档所在的目录下生成一系列的名为“PDFfilename_页面_XX.png”的一系列图片。我们接下来的任务就是要将这些图片合并成一张图片。我选用了强大便捷的Python来完成这项任务。刚开始用matplotlib库来操作,可是最终发现matplotlib中的保存图片的函数(无论是Image.imsave()还是pyplot.imsave())都有一定的限制,那就是图片的长或宽都不能超过32768。这个限制让我很不满意,继续尝试其他的图像操作的库,最终发现PIL库不存在这个限制,问题也得到了解决。下面这段Python代码默认所有图片对应的顺序是文件名末尾序号的升序,序号可以不连续,能处理的图片名字必须是形如xx_1.png … xx_100.png或者xx_001.png … xx_100.png。最后短小精悍的Python代码如下:

#!/usr/bin/python3<br />#encoding=utf-8<br /> <br />import numpy as np<br />from PIL import Image<br />import glob,os<br /> <br />if __name__=='__main__':<br />    prefix=input('Input the prefix of images:')<br />    files=glob.glob(prefix+'_*')<br />    num=len(files)<br /> <br />    filename_lens=[len(x) for x in files] #length of the files<br />    min_len=min(filename_lens) #minimal length of filenames<br />    max_len=max(filename_lens) #maximal length of filenames<br />    if min_len==max_len:#the last number of each filename has the same length<br />        files=sorted(files) #sort the files in ascending order<br />    else:#maybe the filenames are:x_0.png ... x_10.png ... x_100.png<br />        index=[0 for x in range(num)]<br />        for i in range(num):<br />            filename=files[i]<br />            start=filename.rfind('_')+1<br />            end=filename.rfind('.')<br />            file_no=int(filename[start:end])<br />            index[i]=file_no<br />        index=sorted(index)<br />        files=[prefix+'_'+str(x)+'.png' for x in index]<br /> <br />    print(files[0])<br />    baseimg=Image.open(files[0])<br />    sz=baseimg.size<br />    basemat=np.atleast_2d(baseimg)<br />    for i in range(1,num):<br />        file=files[i]<br />        im=Image.open(file)<br />        im=im.resize(sz,Image.ANTIALIAS)<br />        mat=np.atleast_2d(im)<br />        print(file<strong>本文来源gaodai#ma#com搞@@代~&码网</strong>)<br />        basemat=np.append(basemat,mat,axis=0)<br />    final_img=Image.fromarray(basemat)<br />    final_img.save('merged.png')

希望本文所述对大家的Python程序设计有所帮助。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python实现拼接多张图片的方法
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址