详解基于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的Django框架中的项目进行单元测试的方法
Apr 11 Python
python实现简单爬虫功能的示例
Oct 24 Python
Python多进程multiprocessing.Pool类详解
Apr 27 Python
解决python测试opencv时imread导致的错误问题
Jan 26 Python
Python考拉兹猜想输出序列代码实践
Jul 05 Python
python实现车牌识别的示例代码
Aug 05 Python
浅谈Python中(&,|)和(and,or)之间的区别
Aug 07 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
Aug 26 Python
python构造函数init实例方法解析
Jan 19 Python
Python自动化之UnitTest框架实战记录
Sep 08 Python
手把手教你怎么用Python实现zip文件密码的破解
May 27 Python
如何判断pytorch是否支持GPU加速
Jun 01 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 分页类(模仿google)-面试题目解答
2009/09/13 PHP
TMDPHP 模板引擎使用教程
2012/03/13 PHP
PHP list() 将数组中的值赋给变量的简单实例
2016/06/13 PHP
php array_pop 删除数组最后一个元素实例
2016/11/02 PHP
PHP中__set()实例用法和基础讲解
2019/07/23 PHP
js控制框架刷新
2008/08/01 Javascript
JavaScript 拖拉缩放效果
2008/12/10 Javascript
JavaScript 变量命名规则
2009/09/23 Javascript
jquery 中的each()跳出循环的语句
2014/05/23 Javascript
JavaScript检测字符串中是否含有html标签实现方法
2015/07/01 Javascript
Javascript removeChild()删除节点及删除子节点的方法
2015/12/27 Javascript
jQuery插件HighCharts绘制的2D堆柱状图效果示例【附demo源码下载】
2017/03/14 Javascript
源码分析Vue.js的监听实现教程
2017/04/23 Javascript
create-react-app修改为多页面支持的方法
2018/05/17 Javascript
jQuery阻止事件冒泡实例分析
2018/07/03 jQuery
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
2018/08/22 Javascript
vue实现淘宝购物车功能
2020/04/20 Javascript
js获取图片的base64编码并压缩
2020/12/05 Javascript
原生js实现滑块区间组件
2021/01/20 Javascript
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
python集合用法实例分析
2015/05/30 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
2020/04/03 Python
Selenium使用Chrome模拟手机浏览器方法解析
2020/04/10 Python
关于Python3爬虫利器Appium的安装步骤
2020/07/29 Python
html5实现多文件的上传示例代码
2014/02/13 HTML / CSS
暇步士官网:Hush Puppies
2016/09/22 全球购物
美丽乡村建设实施方案
2014/03/23 职场文书
《毛主席在花山》教学反思
2014/04/20 职场文书
小学假期安全广播稿
2014/09/28 职场文书
一年级数学上册复习计划
2015/01/17 职场文书
小石潭记导游词
2015/02/03 职场文书
2015年光棍节活动总结
2015/03/24 职场文书
2015年班组建设工作总结
2015/05/13 职场文书
Redis遍历所有key的两个命令(KEYS 和 SCAN)
2021/04/12 Redis