详解基于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 相关文章推荐
在Windows8上的搭建Python和Django环境
Jul 03 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
Jun 13 Python
python实现图书管理系统
Mar 12 Python
详解Django的model查询操作与查询性能优化
Oct 16 Python
python钉钉机器人运维脚本监控实例
Feb 20 Python
如何使用Python 打印各种三角形
Jun 28 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
Mar 10 Python
浅谈Python线程的同步互斥与死锁
Mar 22 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
Mar 24 Python
基于Python绘制美观动态圆环图、饼图
Jun 03 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
Jun 28 Python
Python如何获取文件路径/目录
Sep 22 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
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
Discuz! Passport 通行证整合
2008/03/27 PHP
php 引用(&)详解
2009/11/20 PHP
PHP 根据IP地址控制访问的代码
2010/04/22 PHP
JavaScript面象对象设计
2008/04/28 Javascript
jQuery对象和DOM对象相互转化
2009/04/24 Javascript
javascript suggest效果 自动完成实现代码分享
2012/02/17 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
轻量级网页遮罩层jQuery插件用法实例
2015/07/31 Javascript
Angularjs中UI Router全攻略
2016/01/29 Javascript
浅谈Javascript数据属性与访问器属性
2016/07/26 Javascript
利用Angularjs中模块ui-route管理状态的方法
2016/12/27 Javascript
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
详解react-redux插件入门
2018/04/19 Javascript
vue-lazyload使用总结(推荐)
2018/11/01 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
微信小程序之左右布局的实现代码
2019/12/13 Javascript
vue中js判断长时间不操作界面自动退出登录(推荐)
2020/01/22 Javascript
python执行等待程序直到第二天零点的方法
2015/04/23 Python
浅谈python中set使用
2016/06/30 Python
Python实现字符串格式化的方法小结
2017/02/20 Python
Python3 socket同步通信简单示例
2017/06/07 Python
python计算两个地址之间的距离方法
2018/06/09 Python
Python实现的栈、队列、文件目录遍历操作示例
2019/05/06 Python
Python算法中的时间复杂度问题
2019/11/19 Python
10个Python面试常问的问题(小结)
2019/11/20 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
如何判断计算机可能已经中马
2013/03/22 面试题
测试工程师程序员求职信范文
2014/02/20 职场文书
开业典礼主持词
2014/03/21 职场文书
小学生中国梦演讲稿
2014/04/23 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
大学生自荐信范文
2015/03/05 职场文书
MySQL存储过程及语法详解
2022/08/05 MySQL