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 相关文章推荐
Python找出文件中使用率最高的汉字实例详解
Jun 03 Python
Python操作MySQL数据库9个实用实例
Dec 11 Python
python&MongoDB爬取图书馆借阅记录
Feb 05 Python
python 写入csv乱码问题解决方法
Oct 23 Python
python3实现磁盘空间监控
Jun 21 Python
对Tensorflow中的矩阵运算函数详解
Jul 27 Python
python里dict变成list实例方法
Jun 26 Python
python并发编程多进程 模拟抢票实现过程
Aug 20 Python
python 视频逐帧保存为图片的完整实例
Dec 10 Python
python操作cfg配置文件方式
Dec 22 Python
python 利用panda 实现列联表(交叉表)
Feb 06 Python
Python pygame实现中国象棋单机版源码
Jun 20 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
Yii操作数据库的3种方法
2014/03/11 PHP
php socket客户端及服务器端应用实例
2014/07/04 PHP
PHP更安全的密码加密机制Bcrypt详解
2017/06/18 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
2019/04/15 PHP
DHTML Slide Show script图片轮换
2008/03/03 Javascript
jQuery中bind与live的用法及区别小结
2014/01/27 Javascript
jQuery自定义动画函数实例详解(附demo源码)
2015/12/10 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
ES6概念 Symbol toString()方法
2016/12/25 Javascript
从零开始学习Node.js系列教程五:服务器监听方法示例
2017/04/13 Javascript
Angularjs中ng-repeat的简单实例
2017/08/25 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
如何实现一个简易版的vuex持久化工具
2019/09/11 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
python实现中文分词FMM算法实例
2015/07/10 Python
python tensorflow学习之识别单张图片的实现的示例
2018/02/09 Python
Python3实现带附件的定时发送邮件功能
2020/12/22 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
2018/06/11 Python
Python实现多级目录压缩与解压文件的方法
2018/09/01 Python
阿里云ECS服务器部署django的方法
2019/08/29 Python
浅谈django 模型类使用save()方法的好处与注意事项
2020/03/28 Python
python实现图片,视频人脸识别(opencv版)
2020/11/18 Python
python脚本定时发送邮件
2020/12/22 Python
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
Yves Rocher伊夫·黎雪美国官网:法国始创植物美肌1959
2019/01/09 全球购物
2014组织生活会方案
2014/05/19 职场文书
小学假期安全广播稿
2014/09/28 职场文书
投标承诺函格式
2015/01/21 职场文书
2019公司借款合同范本2篇!
2019/07/24 职场文书
对Keras自带Loss Function的深入研究
2021/05/25 Python
asyncio异步编程之Task对象详解
2022/03/13 Python
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫
《艾尔登法环》发布最新「战技」宣传片
2022/04/03 其他游戏