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中的socket模块使用代理实例
May 29 Python
python 内置函数filter
Jun 01 Python
Python实现按学生年龄排序的实际问题详解
Aug 29 Python
python虚拟环境virtualenv的使用教程
Oct 20 Python
python直接获取API传递回来的参数方法
Dec 17 Python
Python基础学习之时间转换函数用法详解
Jun 18 Python
用scikit-learn和pandas学习线性回归的方法
Jun 21 Python
python实现布隆过滤器及原理解析
Dec 08 Python
python实现高斯判别分析算法的例子
Dec 09 Python
python中有关时间日期格式转换问题
Dec 25 Python
如何基于python把文字图片写入word文档
Jul 31 Python
Python经典五人分鱼实例讲解
Jan 04 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 生成文字png图片的代码
2011/04/17 PHP
PHP中遍历stdclass object的实现代码
2011/06/09 PHP
PHP源码之explode使用说明
2011/08/05 PHP
PHP二维数组排序的3种方法和自定义函数分享
2014/04/09 PHP
JavaScript OOP类与继承
2009/11/15 Javascript
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
jQuery与其它库冲突的解决方法
2010/06/25 Javascript
最简单的js图片切换效果实现代码
2011/09/24 Javascript
javascript简易缓动插件(源码打包)
2012/02/16 Javascript
js function定义函数的几种不错方法
2014/02/27 Javascript
javascript继承机制实例详解
2014/11/20 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
2016/05/12 Javascript
Active控件问题小结(附解决办法)
2016/06/09 Javascript
bootstrap基础知识学习笔记
2016/11/02 Javascript
详解Vue.js搭建路由报错 router.map is not a function
2017/06/27 Javascript
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
微信小程序开发中var that =this的用法详解
2020/01/18 Javascript
vue项目中使用bpmn-自定义platter的示例代码
2020/05/11 Javascript
用Python实现通过哈希算法检测图片重复的教程
2015/04/02 Python
Python中join和split用法实例
2015/04/14 Python
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
聊聊python里如何用Borg pattern实现的单例模式
2019/06/06 Python
numpy中三维数组中加入元素后的位置详解
2019/11/28 Python
PyTorch和Keras计算模型参数的例子
2020/01/02 Python
Python openpyxl模块原理及用法解析
2020/01/19 Python
Tensorflow之MNIST CNN实现并保存、加载模型
2020/06/17 Python
安纳塔拉酒店度假村及水疗官方网站:Anantara Hotel
2016/08/25 全球购物
美国知名的家庭连锁百货商店:Boscov’s
2017/07/27 全球购物
美国波西米亚风格精品店:South Moon Under
2019/10/26 全球购物
公司新员工的演讲稿注意事项
2014/01/01 职场文书
怎么写自荐书范文
2014/02/12 职场文书
单位在职证明书
2014/09/11 职场文书
庆祝新中国成立65周年“向国旗敬礼”网上签名寄语
2014/09/27 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书