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发送arp欺骗攻击代码分析
Jan 16 Python
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
Aug 22 Python
零基础写python爬虫之HTTP异常处理
Nov 05 Python
Python中使用pprint函数进行格式化输出的教程
Apr 07 Python
Python编程实现的简单神经网络算法示例
Jan 26 Python
Python格式化输出%s和%d
May 07 Python
python过滤中英文标点符号的实例代码
Jul 15 Python
详解PyTorch中Tensor的高阶操作
Aug 18 Python
python装饰器使用实例详解
Dec 14 Python
pandas DataFrame.shift()函数的具体使用
May 24 Python
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
May 27 Python
Python如何利用pandas读取csv数据并绘图
Jul 07 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 三维饼图的实现代码
2008/09/28 PHP
使用配置类定义Codeigniter全局变量
2014/06/12 PHP
php实现根据url自动生成缩略图的方法
2014/09/23 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
豆瓣网的jquery代码实例
2008/06/15 Javascript
ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
2012/02/03 Javascript
将nodejs打包工具整合到鼠标右键的方法
2013/05/11 NodeJs
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
vue实现拖拽效果
2019/12/23 Javascript
Vue3不支持Filters过滤器的问题
2020/09/24 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
跟老齐学Python之list和str比较
2014/09/20 Python
python交互模式下输入换行/输入多行命令的方法
2019/07/02 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
2019/10/09 Python
Python3和pyqt5实现控件数据动态显示方式
2019/12/13 Python
Python PyPDF2模块安装使用解析
2020/01/19 Python
Windows10+anacond+GPU+pytorch安装详细过程
2020/03/24 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
2020/04/23 Python
Python SMTP配置参数并发送邮件
2020/06/16 Python
Python wordcloud库安装方法总结
2020/12/31 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
Emporio Armani腕表天猫官方旗舰店:乔治·阿玛尼为年轻人设计的副线品牌
2017/07/02 全球购物
岗位竞聘演讲稿
2014/01/10 职场文书
违反校纪校规检讨书
2014/02/15 职场文书
支部鉴定材料
2014/06/02 职场文书
村党支部对照检查材料思想汇报
2014/09/28 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书
会计电算化实训报告
2014/11/04 职场文书
商铺租房协议书范本
2014/12/04 职场文书
中秋晚会致辞
2015/07/31 职场文书
golang 生成对应的数据表struct定义操作
2021/04/28 Golang
解决golang 关于全局变量的坑
2021/05/06 Golang