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的Urllib库的基本使用教程
Apr 30 Python
Python函数式编程指南(二):从函数开始
Jun 24 Python
Python 类与元类的深度挖掘 II【经验】
May 06 Python
python 简单的多线程链接实现代码
Aug 28 Python
Python命名空间的本质和加载顺序
Dec 17 Python
Python函数返回不定数量的值方法
Jan 22 Python
python中的global关键字的使用方法
Aug 20 Python
python中删除某个元素的方法解析
Nov 05 Python
完美解决Django2.0中models下的ForeignKey()问题
May 19 Python
Python读取Excel一列并计算所有对象出现次数的方法
Sep 04 Python
Python 删除List元素的三种方法remove、pop、del
Nov 16 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
Feb 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
多个PHP中文字符串截取函数
2013/11/12 PHP
排序算法之PHP版快速排序、冒泡排序
2014/04/09 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
2017/08/25 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
使用PHPWord生成word文档的方法详解
2019/06/06 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
Mootools 1.2教程 滑动效果(Slide)
2009/09/15 Javascript
Javascript调用C#代码
2011/01/17 Javascript
jquery入门必备的基本认识及实例(整理)
2013/06/24 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
jQuery+jRange实现滑动选取数值范围特效
2015/03/14 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
2016/04/28 Javascript
js移动焦点到最后位置的简单方法
2016/11/25 Javascript
Vue.js 中的 $watch使用方法
2017/05/25 Javascript
Angular排序实例详解
2017/06/28 Javascript
vue仿element实现分页器效果
2018/09/13 Javascript
详解Vue前端对axios的封装和使用
2019/04/01 Javascript
Vue 2.0 侦听器 watch属性代码详解
2019/06/19 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
python zip文件 压缩
2008/12/24 Python
Python入门_条件控制(详解)
2017/05/16 Python
python实现指定文件夹下的指定文件移动到指定位置
2018/09/17 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
2018/11/06 Python
详解用Python实现自动化监控远程服务器
2019/05/18 Python
python xlwt如何设置单元格的自定义背景颜色
2019/09/03 Python
Python Numpy,mask图像的生成详解
2020/02/19 Python
意大利时尚精品店:Nugnes 1920
2020/02/10 全球购物
EJB的角色和三个对象
2015/12/31 面试题
中青班党性分析材料
2014/02/16 职场文书
企业安全标语
2014/06/07 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
党委领导班子整改方案
2014/09/30 职场文书
奖学金主要事迹范文
2015/11/04 职场文书
坚持不是死撑,更重要的是心态
2019/08/19 职场文书
Vue操作Storage本地化存储
2022/04/29 Vue.js