详解基于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 相关文章推荐
Pycharm学习教程(5) Python快捷键相关设置
May 03 Python
Python和C/C++交互的几种方法总结
May 11 Python
Python用户推荐系统曼哈顿算法实现完整代码
Dec 01 Python
python3+dlib实现人脸识别和情绪分析
Apr 21 Python
Django+zTree构建组织架构树的方法
Aug 21 Python
tensorflow如何批量读取图片
Aug 29 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
Sep 24 Python
python用类实现文章敏感词的过滤方法示例
Oct 27 Python
使用python绘制cdf的多种实现方法
Feb 25 Python
Python如何实现后端自定义认证并实现多条件登陆
Jun 22 Python
Django-simple-captcha验证码包使用方法详解
Nov 28 Python
python爬虫工具例举说明
Nov 30 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开发框架myqee新手快速入门教程
2014/07/14 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
2020/07/10 PHP
JavaScript 动态创建VML的方法
2009/10/14 Javascript
JQuery开发的数独游戏代码
2010/10/29 Javascript
JavaScript基础语法、dom操作树及document对象
2014/12/02 Javascript
js判断鼠标左、中、右键哪个被点击的方法
2015/01/27 Javascript
Bootstrap Table 删除和批量删除
2017/09/22 Javascript
利用jqprint插件打印页面内容的实现方法
2018/01/09 Javascript
jquery.picsign图片标注组件实例详解
2018/02/02 jQuery
详解Node.js中的Async和Await函数
2018/02/22 Javascript
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
关于vuejs中v-if和v-show的区别及v-show不起作用问题
2018/03/26 Javascript
Vue前端开发规范整理(推荐)
2018/04/23 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
解决vue 打包发布去#和页面空白的问题
2018/09/04 Javascript
layer弹出层显示在top顶层的方法
2019/09/11 Javascript
vscode中Vue别名路径提示的实现
2020/07/31 Javascript
在Python中测试访问同一数据的竞争条件的方法
2015/04/23 Python
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
老生常谈python之鸭子类和多态
2017/06/13 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
2019/02/20 Python
详解Django CAS 解决方案
2019/10/30 Python
keras 权重保存和权重载入方式
2020/05/21 Python
Python爬虫爬取糗事百科段子实例分享
2020/07/31 Python
python正则表达式 匹配反斜杠的操作方法
2020/08/07 Python
Python识别处理照片中的条形码
2020/11/16 Python
护理专业自我鉴定
2014/01/30 职场文书
2015年小学开学寄语
2015/02/27 职场文书
大学生社会实践感想
2015/08/11 职场文书
应届毕业生的自我评价
2019/06/21 职场文书
CSS极坐标的实例代码
2021/06/03 HTML / CSS
bootstrapv4轮播图去除两侧阴影及线框的方法
2022/02/15 HTML / CSS
MySQL性能指标TPS+QPS+IOPS压测
2022/08/05 MySQL