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


Posted in Python onDecember 01, 2014

本文实例讲述了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 相关文章推荐
Web服务器框架 Tornado简介
Jul 16 Python
Python查找函数f(x)=0根的解决方法
May 07 Python
利用python批量检查网站的可用性
Sep 09 Python
windows 10下安装搭建django1.10.3和Apache2.4的方法
Apr 05 Python
不可错过的十本Python好书
Jul 06 Python
Python实现求两个csv文件交集的方法
Sep 06 Python
python tensorflow基于cnn实现手写数字识别
Jan 01 Python
Python实现的连接mssql数据库操作示例
Aug 17 Python
python中将\\uxxxx转换为Unicode字符串的方法
Sep 06 Python
python模块常用用法实例详解
Oct 17 Python
Python GUI库PyQt5样式QSS子控件介绍
Feb 25 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
Nov 01 Python
python字符串替换的2种方法
Nov 30 #Python
Python中3种内建数据结构:列表、元组和字典
Nov 30 #Python
Python函数中定义参数的四种方式
Nov 30 #Python
Python 自动补全(vim)
Nov 30 #Python
给Python IDLE加上自动补全和历史功能
Nov 30 #Python
让 python 命令行也可以自动补全
Nov 30 #Python
Python lambda和Python def区别分析
Nov 30 #Python
You might like
Php做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
zen cart新进商品的随机排序修改方法
2010/09/10 PHP
PHP使用redis实现统计缓存mysql压力的方法
2015/11/14 PHP
Thinkphp 3.2框架使用Redis的方法详解
2019/10/24 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
Javascript算符的优先级介绍
2013/03/20 Javascript
关于JavaScript与HTML的交互事件
2013/04/12 Javascript
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
JS 对输入框进行限制(常用的都有)
2013/07/30 Javascript
javascript 获取iframe里页面中元素值的方法
2014/02/17 Javascript
JavaScript设置获取和设置属性的方法
2015/03/04 Javascript
关于JS 预解释的相关理解
2016/06/28 Javascript
浅析JavaScript中break、continue和return的区别
2016/11/30 Javascript
JS双击变input框批量修改内容
2016/12/12 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
JS正则获取HTML元素的方法
2017/03/31 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
webpack+react+antd脚手架优化的方法
2018/04/02 Javascript
JS装饰器函数用法总结
2018/04/21 Javascript
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
使用vue cli4.x搭建vue项目的过程详解
2020/05/08 Javascript
[01:04:09]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第二场 2月2日
2021/03/11 DOTA
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
超实用的 30 段 Python 案例
2019/10/10 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
Python 格式化打印json数据方法(展开状态)
2020/02/27 Python
德国鞋子网上商店:Omoda.de
2017/03/31 全球购物
大学生自我评价怎样写好
2013/10/23 职场文书
环卫工人先进事迹材料
2014/06/02 职场文书
商品陈列协议书
2014/09/29 职场文书
春节慰问信范文
2015/02/15 职场文书
教务处干事工作总结
2015/08/14 职场文书
推荐六本经典文学奖书籍:此生必读
2019/08/22 职场文书
选购到合适的激光打印机
2022/04/21 数码科技