详解基于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之import机制详解
Jul 03 Python
跟老齐学Python之大话题小函数(1)
Oct 10 Python
Python扫描IP段查看指定端口是否开放的方法
Jun 09 Python
使用Python读写文本文件及编写简单的文本编辑器
Mar 11 Python
Python 绘图库 Matplotlib 入门教程
Apr 19 Python
python实现本地图片转存并重命名的示例代码
Oct 27 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
Sep 20 Python
python应用文件读取与登录注册功能
Sep 23 Python
pyspark给dataframe增加新的一列的实现示例
Apr 24 Python
python except异常处理之后不退出,解决异常继续执行的实现
Apr 25 Python
解决tensorflow读取本地MNITS_data失败的原因
Jun 22 Python
opencv实现图像平移效果
Mar 24 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
虫族 ZERG 概述
2020/03/14 星际争霸
PHP中鲜为人知的10个函数
2014/02/28 PHP
php处理复杂xml数据示例
2016/07/11 PHP
Laravel 5.3 学习笔记之 错误&日志
2016/08/28 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
javascript 常用代码技巧大收集
2009/02/25 Javascript
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
jQuery内容过滤选择器用法分析
2015/02/10 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
2015/07/05 Javascript
表单验证正则表达式实例代码详解
2015/11/09 Javascript
利用Angularjs实现幻灯片效果
2016/09/07 Javascript
jQuery实现鼠标跟随效果
2017/02/20 Javascript
JavaScript中 this 指向问题深度解析
2017/02/21 Javascript
jQuery实现table中两列CheckBox只能选中一个的示例
2017/09/22 jQuery
原生JS实现多条件筛选
2020/08/19 Javascript
Python中多线程thread与threading的实现方法
2014/08/18 Python
用Python制作简单的钢琴程序的教程
2015/04/01 Python
Python下线程之间的共享和释放示例
2015/05/04 Python
Python 专题四 文件基础知识
2017/03/20 Python
Python 中的Selenium异常处理实例代码
2018/05/03 Python
Python3.5实现的罗马数字转换成整数功能示例
2019/02/25 Python
使用PyCharm进行远程开发和调试的实现
2019/11/04 Python
IE矩阵Matrix滤镜旋转与缩放及如何结合transform
2012/11/29 HTML / CSS
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
保安拾金不昧表扬信
2014/01/15 职场文书
美德好少年事迹材料
2014/01/19 职场文书
大学生暑期实践感言
2014/02/26 职场文书
2014幼儿园大班工作总结
2014/11/10 职场文书
道歉的话语大全
2015/05/12 职场文书
高中军训感想
2015/08/07 职场文书
2016年公司新年寄语
2015/08/17 职场文书
python实现网络五子棋
2021/04/11 Python
Python Django 后台管理之后台模型属性详解
2021/04/25 Python
python中的被动信息搜集
2021/04/29 Python
Java SSM配置文件案例详解
2021/08/30 Java/Android