详解基于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 相关文章推荐
django模型中的字段和model名显示为中文小技巧分享
Nov 18 Python
python实现颜色空间转换程序(Tkinter)
Dec 31 Python
从CentOS安装完成到生成词云python的实例
Dec 01 Python
python 获取文件下所有文件或目录os.walk()的实例
Apr 23 Python
python获取微信小程序手机号并绑定遇到的坑
Nov 19 Python
基于Python实现船舶的MMSI的获取(推荐)
Oct 21 Python
python+Django+pycharm+mysql 搭建首个web项目详解
Nov 29 Python
windows python3安装Jupyter Notebooks教程
Apr 13 Python
keras中模型训练class_weight,sample_weight区别说明
May 23 Python
python实现最短路径的实例方法
Jul 19 Python
Python高阶函数与装饰器函数的深入讲解
Nov 10 Python
Python编写万花尺图案实例
Jan 03 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
php is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
php 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
php抓取并保存网站图片的实现代码
2015/10/28 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
小型js框架veryide.librar源代码
2009/03/05 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
2016/03/07 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
dul无法加载bootstrap实现unload table/user恢复
2016/09/29 Javascript
Select2.js下拉框使用小结
2016/10/24 Javascript
Vue组件之极简的地址选择器的实现
2018/05/31 Javascript
vue实现在线翻译功能
2019/09/27 Javascript
Javascript和jquery在selenium的使用过程
2019/10/31 jQuery
js实现自动播放匀速轮播图
2020/02/06 Javascript
Vue+Element ui 根据后台返回数据设置动态表头操作
2020/09/21 Javascript
python从ftp下载数据保存实例
2013/11/20 Python
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
2014/05/23 Python
Python程序中使用SQLAlchemy时出现乱码的解决方案
2015/04/24 Python
Tornado高并发处理方法实例代码
2018/01/15 Python
django 在原有表格添加或删除字段的实例
2018/05/27 Python
python读取文件名并改名字的实例
2019/01/07 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
2019/03/01 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
Python利用逻辑回归分类实现模板
2020/02/15 Python
Python基于stuck实现scoket文件传输
2020/04/02 Python
python 如何区分return和yield
2020/09/22 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
2020/10/15 Python
联想台湾官网:Lenovo TW
2018/05/09 全球购物
加拿大著名的奢侈品购物网站:SSENSE(支持中文)
2020/06/25 全球购物
编写一个类体现构造,公有,私有方法,静态,私有变量
2013/08/10 面试题
保外就医申请书范文
2015/08/06 职场文书
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
2021/11/11 Python
Python中字符串对象语法分享
2022/02/24 Python