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 相关文章推荐
linux 下实现python多版本安装实践
Nov 18 Python
Python中尝试多线程编程的一个简明例子
Apr 07 Python
Python对列表中的各项进行关联详解
Aug 15 Python
Python3转换html到pdf的不同解决方案
Mar 11 Python
python tkinter canvas使用实例
Nov 04 Python
在Python中实现函数重载的示例代码
Dec 12 Python
pytorch sampler对数据进行采样的实现
Dec 31 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
Mar 24 Python
django xadmin中form_layout添加字段显示方式
Mar 30 Python
Python爬虫如何应对Cloudflare邮箱加密
Jun 24 Python
关于django python manage.py startapp 应用名出错异常原因解析
Dec 15 Python
tensorflow学习笔记之tfrecord文件的生成与读取
Mar 31 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
探讨:web上存漏洞及原理分析、防范方法
2013/06/29 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
PHP实现股票趋势图和柱形图
2015/02/07 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
Prototype PeriodicalExecuter对象 学习
2009/07/19 Javascript
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
Bootstrap框架结合jQuery仿百度换肤功能实例解析
2016/09/17 Javascript
Angular2利用组件与指令实现图片轮播组件
2017/03/27 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
2017/06/20 Javascript
jQuery修改DOM结构_动力节点Java学院整理
2017/07/05 jQuery
vue中的scope使用详解
2017/10/29 Javascript
详解Node.js中的Async和Await函数
2018/02/22 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
利用JavaScript模拟京东按键输入功能
2020/12/01 Javascript
[00:43]魔廷新尊——痛苦女王至宝捆绑包
2020/06/12 DOTA
浅析python 中大括号中括号小括号的区分
2019/07/29 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
python用线性回归预测股票价格的实现代码
2019/09/04 Python
Python实现变声器功能(萝莉音御姐音)
2019/12/05 Python
详解有关PyCharm安装库失败的问题的解决方法
2020/02/02 Python
Tensorflow分批量读取数据教程
2020/02/07 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
matplotlib 三维图表绘制方法简介
2020/09/20 Python
python中类与对象之间的关系详解
2020/12/16 Python
CSS3属性选择符介绍
2008/10/17 HTML / CSS
CSS3基础(RGBa、text-shadow、box-shadow、border-radius)
2012/11/13 HTML / CSS
波兰家居和花园家具专家:4Home
2019/05/26 全球购物
XML文档面试题
2015/08/05 面试题
三年大学自我鉴定
2014/01/16 职场文书
十佳中学生事迹材料
2014/06/02 职场文书
党支部遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
2014年护理部工作总结
2014/11/14 职场文书
入党积极分子党小组意见
2015/06/02 职场文书