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中操作文件之seek()方法的使用教程
May 24 Python
Python中字符串的常见操作技巧总结
Jul 28 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
Apr 29 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
Jul 19 Python
Python面向对象原理与基础语法详解
Jan 02 Python
Pytorch 保存模型生成图片方式
Jan 10 Python
新年福利来一波之Python轻松集齐五福(demo)
Jan 20 Python
django之从html页面表单获取输入的数据实例
Mar 16 Python
Python super()方法原理详解
Mar 31 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
Oct 15 Python
Pycharm在指定目录下生成文件和删除文件的实现
Dec 28 Python
Python anaconda安装库命令详解
Oct 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
初探PHP5
2006/10/09 PHP
php调用c接口无错版介绍
2014/03/11 PHP
php猜单词游戏
2015/09/29 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
在vs2010中调试javascript代码方法
2011/02/11 Javascript
jquery垂直公告滚动实现代码
2013/12/08 Javascript
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
JavaScript中instanceof运算符的使用示例
2016/06/08 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
Vue中添加过渡效果的方法
2017/03/16 Javascript
jQuery+pjax简单示例汇总
2017/04/21 jQuery
基于Vue实现timepicker
2017/04/25 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
jquery在启动页面时,自动加载数据的实例
2018/01/22 jQuery
vue结合Echarts实现点击高亮效果的示例
2018/03/17 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
2018/08/22 Javascript
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
2018/11/21 Javascript
WebGL three.js学习笔记之阴影与实现物体的动画效果
2019/04/25 Javascript
[47:31]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.12
2020/12/16 DOTA
Python中请使用isinstance()判断变量类型
2014/08/25 Python
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
神经网络python源码分享
2017/12/15 Python
使用Python监视指定目录下文件变更的方法
2018/10/15 Python
python实现多线程端口扫描
2019/08/31 Python
在Python IDLE 下调用anaconda中的库教程
2020/03/09 Python
Python dict的常用方法示例代码
2020/06/23 Python
localStorage 设置过期时间的方法实现
2018/12/21 HTML / CSS
全球领先的美容用品专卖店:Beauty Plus Salon
2018/09/04 全球购物
药学专业毕业生求职信
2013/10/20 职场文书
求职信范文英文版
2014/01/05 职场文书
2014年公司迎新年活动方案
2014/02/24 职场文书
十佳少年事迹材料
2014/12/25 职场文书
学生会任命书范本
2015/09/21 职场文书
利用Pycharm连接服务器的全过程记录
2021/07/01 Python