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

 更新时间:2014年12月01日 10:39:23   转载 投稿:shichen2014  
这篇文章主要介绍了Python实现拼接多张图片的方法,以具体的实际应用引出Python拼接图片的思路并给出了实现的具体方法,需要的朋友可以参考下

本文实例讲述了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
#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')

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

相关文章

  • Python爬虫番外篇之Cookie和Session详解

    Python爬虫番外篇之Cookie和Session详解

    这篇文章主要介绍了Python爬虫番外篇之Cookie和Session详解,具有一定借鉴价值,需要的朋友可以参考下
    2017-12-12
  • python3实现全角和半角字符转换的方法示例

    python3实现全角和半角字符转换的方法示例

    在自然语言处理过程中,全角、半角的的不一致会导致信息抽取不一致,因此需要统一,下面这篇文章主要给大家介绍了关于python3中全角和半角字符转换的方法,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • 基于python绘制科赫雪花

    基于python绘制科赫雪花

    这篇文章主要为大家详细介绍了基于python绘制科赫雪花,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • 用pytorch的nn.Module构造简单全链接层实例

    用pytorch的nn.Module构造简单全链接层实例

    今天小编就为大家分享一篇用pytorch的nn.Module构造简单全链接层实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • python paramiko模块学习分享

    python paramiko模块学习分享

    这篇文章主要为大家分享了python paramiko模块的学习资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • 在Python中使用dict和set方法的教程

    在Python中使用dict和set方法的教程

    这篇文章主要介绍了在Python中使用dict和set方法的教程,dict字典是Python中的重要基础知识,set与其类似,需要的朋友可以参考下
    2015-04-04
  • 详谈python中冒号与逗号的区别

    详谈python中冒号与逗号的区别

    下面小编就为大家分享一篇详谈python中冒号与逗号的区别,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • 详解Django-channels 实现WebSocket实例

    详解Django-channels 实现WebSocket实例

    这篇文章主要介绍了详解Django-channels实现WebSocket实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • windows上彻底删除jupyter notebook的实现

    windows上彻底删除jupyter notebook的实现

    这篇文章主要介绍了windows上彻底删除jupyter notebook的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • python matlibplot绘制3D图形

    python matlibplot绘制3D图形

    这篇文章主要为大家详细介绍了python matlibplot绘制3D图形,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07

最新评论