详解基于python的多张不同宽高图片拼接成大图


Posted in Python onSeptember 26, 2019

半年前写过一篇将多张图片拼接成大图的博客,是讲的把所有图片先转换为256×256的图片后再进行拼接,今天看到一个朋友的评论说如何拼接非正方形图片,如47×57,之前有个朋友也问过这个,我当时理解错了,以为是要把不同尺寸的照片如32×45、56×75等拼接成大图,当时还纳闷,那不是很难看吗,还得填充非图片元素,emmm,只怪当年太天真。。

于是乎搞了下非方形图片的拼接,上代码:

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
 
import PIL.Image as Image
 
import os
 
IMAGES_PATH = 'D:\Mafengwo\photo\五月坦桑的暖风,非洲原野的呼唤\\' # 图片集地址
 
IMAGES_FORMAT = ['.jpg', '.JPG'] # 图片格式
 
IMAGE_SIZE_W = 47 # 每张小图片的宽
IMAGE_SIZE_H = 57 # 每张小图片的高
 
IMAGE_ROW = 5 # 图片间隔,也就是合并成一张图后,一共有几行
 
IMAGE_COLUMN = 4 # 图片间隔,也就是合并成一张图后,一共有几列
 
IMAGE_SAVE_PATH = 'final.jpg' # 图片转换后的地址
 
# 获取图片集地址下的所有图片名称
 
image_names = [name for name in os.listdir(IMAGES_PATH) for item in IMAGES_FORMAT if
        os.path.splitext(name)[1] == item]
 
# 简单的对于参数的设定和实际图片集的大小进行数量判断
if len(image_names) != IMAGE_ROW * IMAGE_COLUMN:
  raise ValueError("合成图片的参数和要求的数量不能匹配!")
 
# 定义图像拼接函数
def image_compose():
  to_image = Image.new('RGB', (IMAGE_COLUMN * IMAGE_SIZE_W, IMAGE_ROW * IMAGE_SIZE_H)) # 创建一个新图
 
  # 循环遍历,把每张图片按顺序粘贴到对应位置上
 
  for y in range(1, IMAGE_ROW + 1):
 
    for x in range(1, IMAGE_COLUMN + 1):
      from_image = Image.open(IMAGES_PATH + image_names[IMAGE_COLUMN * (y - 1) + x - 1]).resize(
 
        (IMAGE_SIZE_W, IMAGE_SIZE_H), Image.ANTIALIAS)#重塑(统一)照片的大小
 
      to_image.paste(from_image, ((x - 1) * IMAGE_SIZE_W, (y - 1) * IMAGE_SIZE_H))
      # im.paste(image, position)---粘贴image到im的position(左上角)位置。
 
  return to_image.save(IMAGE_SAVE_PATH) # 保存新图
 
 
image_compose() # 调用函数

对比之前的博客,没有改动太多,只是太久没看了,又梳理了一遍,把之前的方形图片的边长IMAGE_SIZE拆分成了矩形的长和宽,当然习惯称之为高和宽

这里需要注意的就是下面两处用到IMAGE_SIZE_W和IMAGE_SIZE_H的地方,注释已经说清楚了,我们先是把需要拼接的各种尺寸的图片统一塑形为47×57大小的图片,然后依次粘贴到我们创建的新图中,这里的paste方法中位置指的是图片的左上角,从该处粘贴一张IMAGE_SIZE_W×IMAGE_SIZE_H大小的图片,他这个顺序就是从第一行开始依次粘贴,只不过位置是从0开始的,可以理解成一次粘贴到(0,0),(0,1),(0,2)…………(1,0),(1,1)…………位置上,区别的就是我们这里粘贴的不是一个点而是一张有宽高的图片,所以第一张图片粘贴位置是(0,0),第二张是(IMAGE_SIZE_W,0),第三张是(IMAGE_SIZE_W*2,0)就这么先搞定第一行再走第二行,一直这么下去。。

还是原来的图片,看下不同的效果:

详解基于python的多张不同宽高图片拼接成大图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
利用Python绘制MySQL数据图实现数据可视化
Mar 30 Python
Python 功能和特点(新手必学)
Dec 30 Python
解决python报错MemoryError的问题
Jun 26 Python
pandas去除重复列的实现方法
Jan 29 Python
python设置环境变量的原因和方法
Jun 24 Python
Django打印出在数据库中执行的语句问题
Jul 25 Python
Python学习笔记之错误和异常及访问错误消息详解
Aug 08 Python
Python autoescape标签用法解析
Jan 17 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
Feb 25 Python
python读取hdfs并返回dataframe教程
Jun 05 Python
Python改变对象的字符串显示的方法
Aug 01 Python
聊聊pytorch测试的时候为何要加上model.eval()
May 23 Python
Python容器使用的5个技巧和2个误区总结
Sep 26 #Python
通过python3实现投票功能代码实例
Sep 26 #Python
Python编写打字训练小程序
Sep 26 #Python
Python 如何优雅的将数字转化为时间格式的方法
Sep 26 #Python
python3.7实现云之讯、聚合短信平台的短信发送功能
Sep 26 #Python
python 模拟创建seafile 目录操作示例
Sep 26 #Python
python RC4加密操作示例【测试可用】
Sep 26 #Python
You might like
自制汽车收音机天线:收听广播的技巧和方法
2021/03/02 无线电
PHP大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
[原创]php求圆周率的简单实现方法
2016/05/30 PHP
CSS+JS构建的图片查看器
2006/07/22 Javascript
Prototype RegExp对象 学习
2009/07/19 Javascript
Javascript Throttle & Debounce应用介绍
2013/03/19 Javascript
Google官方支持的NodeJS访问API,提供后台登录授权
2014/07/29 NodeJs
浅谈jQuery的offset()方法及示例分享
2015/07/17 Javascript
JS高仿抛物线加入购物车特效实现代码
2017/02/20 Javascript
Bootstrap实现基于carousel.js框架的轮播图效果
2017/05/02 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
用ReactJS和Python的Flask框架编写留言板的代码示例
2015/12/19 Python
Windows平台Python连接sqlite3数据库的方法分析
2017/07/12 Python
Python使用内置json模块解析json格式数据的方法
2017/07/20 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
Python OpenCV中的resize()函数的使用
2019/06/20 Python
Python实现某论坛自动签到功能
2019/08/20 Python
python破解bilibili滑动验证码登录功能
2019/09/11 Python
Python正则表达式急速入门(小结)
2019/12/16 Python
python时间日期操作方法实例小结
2020/02/06 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
Django nginx配置实现过程详解
2020/09/10 Python
python切割图片的示例
2020/11/12 Python
Html5 实现微信分享及自定义内容的流程
2019/08/20 HTML / CSS
理工大学毕业生自荐信
2013/11/01 职场文书
教师专业理论水平的自我评价分享
2013/11/09 职场文书
实习生的自我鉴定范文欣赏
2013/11/20 职场文书
开办化妆品公司创业计划书
2013/12/26 职场文书
计算机专业优秀大学生自我总结
2014/01/21 职场文书
运动会演讲稿50字
2014/08/25 职场文书
感谢信范文大全
2015/01/23 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS