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实现的解析crontab配置文件代码
Jun 30 Python
python回溯法实现数组全排列输出实例分析
Mar 17 Python
Python中统计函数运行耗时的方法
May 05 Python
Python的自动化部署模块Fabric的安装及使用指南
Jan 19 Python
详解Python中的__new__、__init__、__call__三个特殊方法
Jun 02 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
Jun 30 Python
Tensorflow简单验证码识别应用
May 25 Python
python实现给微信公众号发送消息的方法
Jun 30 Python
利用python实现微信头像加红色数字功能
Mar 26 Python
python图片二值化提高识别率代码实例
Aug 24 Python
Python zip函数打包元素实例解析
Dec 11 Python
Django跨域资源共享问题(推荐)
Mar 09 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操作JSON格式数据的实现代码
2011/12/24 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
laravel-admin自动生成模块,及相关基础配置方法
2019/10/08 PHP
js 操作select相关方法函数
2009/12/06 Javascript
导入extjs、jquery 文件时$使用冲突问题解决方法
2014/01/14 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
javascript框架设计之框架分类及主要功能
2015/06/23 Javascript
JavaScript encodeURI 和encodeURIComponent
2015/12/04 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
使用react-router4.0实现重定向和404功能的方法
2017/08/28 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
浅谈Vue网络请求之interceptors实际应用
2018/02/28 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
[01:38]女王驾到——至宝魔廷新尊技能&特效展示
2020/06/16 DOTA
基于Python的身份证号码自动生成程序
2014/08/15 Python
Python函数式编程指南(二):从函数开始
2015/06/24 Python
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
深入理解Python3 内置函数大全
2017/11/23 Python
python 读取文件并替换字段的实例
2018/07/12 Python
python实现蒙特卡罗方法教程
2019/01/28 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
2019/07/25 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
Python Subprocess模块原理及实例
2019/08/26 Python
深入浅析Python科学计算库Scipy及安装步骤
2019/10/12 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
基于python实现操作git过程代码解析
2020/07/27 Python
Pyecharts 中Geo函数常用参数的用法说明
2021/02/01 Python
css3媒体查询中device-width和width的区别详解
2020/03/27 HTML / CSS
英国和爱尔兰最大的地毯零售商:Kukoon
2018/12/17 全球购物
20年同学聚会邀请函
2014/02/04 职场文书
古汉语文学求职信范文
2014/03/16 职场文书
2016年教师节感言
2015/12/09 职场文书
2016年精神文明建设先进个人事迹材料
2016/02/29 职场文书
SpringBoot 集成短信和邮件 以阿里云短信服务为例
2022/04/22 Java/Android
Python如何将list中的string转换为int
2022/07/15 Ruby