详解基于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 搭建Web站点之Web服务器网关接口
Nov 06 Python
Python中functools模块函数解析
Mar 12 Python
python中单下划线_的常见用法总结
Jul 10 Python
利用Python+阿里云实现DDNS动态域名解析的方法
Apr 01 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
Apr 17 Python
python 并发编程 阻塞IO模型原理解析
Aug 20 Python
Python装饰器原理与基本用法分析
Jan 07 Python
TensorFlow tensor的拼接实例
Jan 19 Python
django ListView的使用 ListView中获取url中的参数值方式
Mar 27 Python
python保留格式汇总各部门excel内容的实现思路
Jun 01 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
Dec 28 Python
Python闭包的定义和使用方法
Apr 11 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中在foreach中使用foreach ($arr as &$value) 这种类型的解释
2013/06/24 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
jQuery 判断元素上是否绑定了事件
2009/10/28 Javascript
我遇到的参数传递中 双引号单引号嵌套问题
2010/02/11 Javascript
window resize和scroll事件的基本优化思路
2014/04/29 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
AngularJS 实现按需异步加载实例代码
2015/10/18 Javascript
Three.js学习之网格
2016/08/10 Javascript
AngularJS HTML DOM详解及示例代码
2016/08/17 Javascript
微信小程序 解决swiper不显示图片的方法
2017/01/04 Javascript
详解JavaScript中this的指向问题
2017/01/20 Javascript
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
微信小程序城市定位的实现实例(获取当前所在国家城市信息)
2017/05/17 Javascript
node.js连接MongoDB数据库的2种方法教程
2017/05/17 Javascript
vue.js加载新的内容(实例代码)
2017/06/01 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
2017/12/16 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
最简单的vue消息提示全局组件的方法
2019/06/16 Javascript
ES6 Map结构的应用实例分析
2019/06/26 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
javascript实现前端input密码输入强度验证
2020/06/24 Javascript
vue添加自定义右键菜单的完整实例
2020/12/08 Vue.js
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
Python上下文管理器和with块详解
2017/09/09 Python
Python IDLE清空窗口的实例
2018/06/25 Python
Windows下安装Scrapy
2018/10/17 Python
python hook监听事件详解
2018/10/25 Python
Python numpy.zero() 初始化矩阵实例
2019/11/27 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
python+opencv3生成一个自定义纯色图教程
2020/02/19 Python
德国香水、化妆品和护理产品网上商店:Parfumdreams
2018/09/26 全球购物
小学班干部竞选演讲稿
2014/04/24 职场文书
付款证明格式范文
2015/06/19 职场文书