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的web.py框架并从hello world开始编程
Apr 25 Python
用Python实现KNN分类算法
Dec 22 Python
PyQt5每天必学之弹出消息框
Apr 19 Python
python-docx修改已存在的Word文档的表格的字体格式方法
May 08 Python
面向初学者的Python编辑器Mu
Oct 08 Python
在Python中表示一个对象的方法
Jun 25 Python
python使用if语句实现一个猜拳游戏详解
Aug 27 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
Oct 06 Python
python库matplotlib绘制坐标图
Oct 18 Python
python爬虫添加请求头代码实例
Dec 28 Python
django queryset相加和筛选教程
May 18 Python
如何使用Python对NetCDF数据做空间相关分析
Apr 21 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实现禁用IE和火狐的缓存问题
2012/12/03 PHP
thinkPHP查询方式小结
2016/01/09 PHP
PHP生成短网址方法汇总
2016/07/12 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
js传中文参数controller里获取参数乱码问题解决方法
2014/01/03 Javascript
JavaScript中的逻辑判断符&&、||与!介绍
2014/12/31 Javascript
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
使用Node.js给图片加水印的方法
2016/11/15 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
ReactNative之FlatList的具体使用方法
2017/11/29 Javascript
vue移动端路由切换实例分析
2018/05/14 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
原生JS运动实现轮播图
2021/01/02 Javascript
[07:54]DOTA2 MV《我的动力鞋》 ImbaTV 出品
2014/11/21 DOTA
python re正则表达式模块(Regular Expression)
2014/07/16 Python
python 性能优化方法小结
2017/03/31 Python
Python建立Map写Excel表实例解析
2018/01/17 Python
Python实现一个服务器监听多个客户端请求
2018/04/12 Python
python绘制圆柱体的方法
2018/07/02 Python
Python字典遍历操作实例小结
2019/03/05 Python
使用虚拟环境打包python为exe 文件的方法
2019/08/29 Python
python代码实现TSNE降维数据可视化教程
2020/02/28 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
Saks Fifth Avenue澳洲/亚太地区:萨克斯第五大道精品百货店
2019/06/09 全球购物
泰国时尚电商:POMELO Fashion
2020/03/11 全球购物
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
感恩老师演讲稿400字
2014/08/28 职场文书
个人买房协议书范本
2014/10/06 职场文书
承诺保证书格式
2015/02/28 职场文书
医院保洁员管理制度
2015/08/05 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
mysql如何能有效防止删库跑路
2021/10/05 MySQL