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生成随机验证码的两种方法
Dec 22 Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
Jan 11 Python
深入浅析python with语句简介
Apr 11 Python
Python简单基础小程序的实例代码
Apr 28 Python
PyTorch 普通卷积和空洞卷积实例
Jan 07 Python
Python如何使用bokeh包和geojson数据绘制地图
Mar 21 Python
Jupyter Notebook打开任意文件夹操作
Apr 14 Python
Python新手学习函数默认参数设置
Jun 03 Python
Python中Selenium库使用教程详解
Jul 23 Python
Python xlrd/xlwt 创建excel文件及常用操作
Sep 24 Python
Python3+Flask安装使用教程详解
Feb 16 Python
python实现双链表
May 25 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
Uchome1.2 1.5 代码学习 common.php
2009/04/24 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
javascript字母大小写转换的4个函数详解
2014/05/09 Javascript
网站接入QQ登录的两种方法
2014/07/22 Javascript
JQuery EasyUI 加载两次url的原因分析及解决方案
2014/08/18 Javascript
JS是按值传递还是按引用传递
2015/01/30 Javascript
Validform表单验证总结篇
2016/10/31 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
ES6中let 和 const 的新特性
2018/09/03 Javascript
vue弹窗插件实战代码
2018/09/08 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
Python中函数的参数定义和可变参数用法实例分析
2015/06/04 Python
python接口调用已训练好的caffe模型测试分类方法
2019/08/26 Python
如何获取Python简单for循环索引
2019/11/21 Python
用python解压分析jar包实例
2020/01/16 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
应届生服装设计自我评价
2013/09/20 职场文书
医药大学生求职简历的自我评价
2013/10/17 职场文书
销售人员获奖感言
2014/02/05 职场文书
人力管理专业毕业生求职信
2014/02/27 职场文书
有关爱国演讲稿
2014/05/07 职场文书
集中采购方案
2014/06/10 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
研究生简历自我评
2015/03/11 职场文书
2015-2016年小学教导工作总结
2015/07/21 职场文书
追悼会家属答谢词
2015/09/29 职场文书
pytorch 两个GPU同时训练的解决方案
2021/06/01 Python