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实现在windows下操作word的方法
Apr 28 Python
非递归的输出1-N的全排列实例(推荐)
Apr 11 Python
Python学习小技巧之列表项的排序
May 20 Python
python中的计时器timeit的使用方法
Oct 20 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
Mar 19 Python
python 把文件中的每一行以数组的元素放入数组中的方法
Apr 29 Python
python opencv3实现人脸识别(windows)
May 25 Python
pandas值替换方法
Jul 10 Python
Django ModelForm组件使用方法详解
Jul 23 Python
去除python中的字符串空格的简单方法
Dec 22 Python
详解Python描述符的工作原理
Jun 11 Python
python井字棋游戏实现人机对战
Apr 28 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下载文件名中解决乱码的问题
2013/06/20 PHP
Laravel SQL语句记录方式(推荐)
2016/05/26 PHP
Yii2简单实现给表单添加验证码的方法
2016/07/18 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
Jquery+JSon 无刷新分页实现代码
2010/04/01 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
2015/04/01 Javascript
javascript中的Function.prototye.bind
2015/06/25 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
总结JavaScript的正则与其他语言的不同之处
2016/08/25 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
2016/09/19 Javascript
EasyUI的TreeGrid的过滤功能的解决思路
2017/08/08 Javascript
详解React Native网络请求fetch简单封装
2017/08/10 Javascript
vue webpack开发访问后台接口全局配置的方法
2018/09/18 Javascript
setTimeout与setInterval的区别浅析
2019/03/23 Javascript
ant design实现圈选功能
2019/12/17 Javascript
基于VUE实现判断设备是PC还是移动端
2020/07/03 Javascript
[02:38]2018DOTA2亚洲邀请赛赛前采访-VGJ.T
2018/04/03 DOTA
python的id()函数介绍
2013/02/10 Python
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
Python正则表达式知识汇总
2017/09/22 Python
python实现微信自动回复功能
2018/04/11 Python
python实现学员管理系统
2019/02/26 Python
Python 保存加载mat格式文件的示例代码
2020/08/04 Python
python破解同事的压缩包密码
2020/10/14 Python
美体小铺波兰官方网站:The Body Shop波兰
2019/09/03 全球购物
NYX Professional Makeup俄罗斯官网:世界知名的化妆品品牌
2019/12/26 全球购物
中学教师实习自我鉴定
2013/09/28 职场文书
资产评估专业学生的自我鉴定
2013/11/14 职场文书
大学毕业寄语大全
2014/04/10 职场文书
2015年物业管理工作总结
2015/04/23 职场文书
2015年餐厅服务员工作总结
2015/04/23 职场文书
2016年秋季运动会广播稿
2015/12/21 职场文书
2016年大学光棍节活动总结
2016/04/05 职场文书