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如何实现int函数的方法示例
Feb 19 Python
pandas带有重复索引操作方法
Jun 08 Python
python 读取竖线分隔符的文本方法
Dec 20 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
Jan 05 Python
Python 支付整合开发包的实现
Jan 23 Python
django连接oracle时setting 配置方法
Aug 29 Python
python批量处理txt文件的实例代码
Jan 13 Python
Pycharm 安装 idea VIM插件的图文教程详解
Feb 21 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
May 20 Python
Python中Yield的基本用法
Oct 18 Python
python mock测试的示例
Oct 19 Python
python 合并多个excel中同名的sheet
Jan 22 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
玩转虚拟域名◎+ .
2006/10/09 PHP
PHP中文URL编解码(urlencode()rawurlencode()
2010/07/03 PHP
php中++i 与 i++ 的区别
2012/08/08 PHP
php封装的单文件(图片)上传类完整实例
2016/10/18 PHP
javascript delete 使用示例代码
2010/03/29 Javascript
jquery下实现overlay遮罩层代码
2010/08/25 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
2014/04/02 Javascript
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
jQuery层动画定位滑动效果的方法
2015/04/30 Javascript
JavaScript中的Math.atan2()方法使用详解
2015/06/15 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
聊一聊JS中this的指向问题
2016/06/17 Javascript
对vue 键盘回车事件的实例讲解
2018/08/25 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
如何换个角度使用VUE过滤器详解
2019/09/11 Javascript
JavaScript常用进制转换及位运算实例解析
2020/10/14 Javascript
python求众数问题实例
2014/09/26 Python
Windows上配置Emacs来开发Python及用Python扩展Emacs
2015/11/20 Python
python3解析库lxml的安装与基本使用
2018/06/27 Python
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
Python matplotlib学习笔记之坐标轴范围
2019/06/28 Python
python线程中的同步问题及解决方法
2019/08/29 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
2020/02/26 Python
python跨文件使用全局变量的实现
2020/11/17 Python
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
I.T中国官网:精选时尚设计师单品网购平台
2018/03/26 全球购物
波兰电子产品购物网站:Vobis
2019/05/26 全球购物
经典c++面试题三
2015/07/08 面试题
使用Vue.js和MJML创建响应式电子邮件
2021/03/23 Vue.js
十八届三中全会个人学习材料
2014/02/13 职场文书
2014年基层党组织公开承诺书
2014/03/29 职场文书
幼儿园大班开学寄语
2014/08/02 职场文书
音乐教师个人总结
2015/02/06 职场文书
2019个人年度目标制定攻略!
2019/07/12 职场文书
演讲稿之开卷有益
2019/08/07 职场文书