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 相关文章推荐
github配置使用指南
Nov 18 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
Sep 08 Python
Python3操作SQL Server数据库(实例讲解)
Oct 21 Python
Python实现自动上京东抢手机
Feb 06 Python
解决已经安装requests,却依然提示No module named requests问题
May 18 Python
Python对数据进行插值和下采样的方法
Jul 03 Python
Python socket模块实现的udp通信功能示例
Apr 10 Python
Django 反向生成url实例详解
Jul 30 Python
Django发送邮件功能实例详解
Sep 02 Python
python中的数组赋值与拷贝的区别详解
Nov 26 Python
Python安装第三方库攻略(pip和Anaconda)
Oct 15 Python
Python 列表反转显示的四种方法
Nov 16 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下使用无限生命期Session的方法
2007/03/16 PHP
快速配置PHPMyAdmin方法
2008/06/05 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
2016/10/14 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
PHP后期静态绑定实例浅析
2018/12/21 PHP
jquery $.ajax入门应用一
2008/11/19 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
javascript面向对象快速入门实例
2015/01/13 Javascript
同步异步动态引入js文件的几种方法总结
2016/09/23 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
2017/01/18 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
vue 使用vue-i18n做全局中英文切换的方法
2018/10/29 Javascript
微信小程序实现的动态设置导航栏标题功能示例
2019/01/31 Javascript
原生javascript如何实现共享onload事件
2020/07/03 Javascript
在vue-cli3中使用axios获取本地json操作
2020/07/30 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
[02:38]DOTA2超级联赛专访Loda 认为IG世界最强
2013/05/27 DOTA
Python素数检测的方法
2015/05/11 Python
利用Python实现Shp格式向GeoJSON的转换方法
2019/07/09 Python
Django CBV与FBV原理及实例详解
2019/08/12 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
Python中的Cookie模块如何使用
2020/06/04 Python
Python利用matplotlib绘制散点图的新手教程
2020/11/05 Python
Solaris操作系统的线程机制
2015/07/28 面试题
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
美发活动策划书
2014/01/14 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
2014年乡镇人大工作总结
2014/11/25 职场文书
2014年信息技术工作总结
2014/12/16 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
质检员岗位职责
2015/02/03 职场文书
python模块与C和C++动态库相互调用实现过程示例
2021/11/02 Python
mysql中数据库覆盖导入的几种方式总结
2022/03/25 MySQL