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网络编程之读取网站根目录实例
Sep 30 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
Jan 24 Python
python 使用get_argument获取url query参数
Apr 28 Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 Python
Django框架首页和登录页分离操作示例
May 28 Python
Python中变量的输入输出实例代码详解
Jul 28 Python
python爬虫豆瓣网的模拟登录实现
Aug 21 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
Jan 16 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
Apr 21 Python
pycharm专业版远程登录服务器的详细教程
Sep 15 Python
Django框架中视图的用法
Jun 10 Python
python内置模块之上下文管理contextlib
Jun 14 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 setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
CentOS 上搭建 PHP7 开发测试环境
2017/02/26 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
Javascript倒计时代码
2010/08/12 Javascript
js给页面加style无效果的解决方法
2014/01/20 Javascript
JavaScript和CSS交互的方法汇总
2014/12/02 Javascript
Javascript中数组sort和reverse用法分析
2014/12/30 Javascript
jquery.mobile 共同布局遇到的问题小结
2015/02/10 Javascript
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
下一代Bootstrap的5个特点 超酷炫!
2016/06/17 Javascript
AngularJS中filter的使用实例详解
2017/08/25 Javascript
JavaScript基础之流程控制语句的用法
2017/08/31 Javascript
详解各版本React路由的跳转的方法
2018/05/10 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
2019/04/23 Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
2019/06/10 Javascript
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
python最小生成树kruskal与prim算法详解
2019/01/17 Python
Python supervisor强大的进程管理工具的使用
2019/04/24 Python
详解用python写一个抽奖程序
2019/05/10 Python
Python FFT合成波形的实例
2019/12/04 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
2019/12/09 Python
Python concurrent.futures模块使用实例
2019/12/24 Python
Python 找出英文单词列表(list)中最长单词链
2020/12/14 Python
css3实现平移效果(transfrom:translate)的示例
2020/11/13 HTML / CSS
6PM官网:折扣鞋、服装及配饰
2018/08/03 全球购物
美国伴娘礼服商店:Evening Collective
2019/10/07 全球购物
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
高三历史教学反思
2014/01/09 职场文书
酒店节能降耗方案
2014/05/08 职场文书
2014全年工作总结
2014/11/27 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
《鲸》教学反思
2016/02/23 职场文书