详解基于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除法运算小技巧
Apr 05 Python
python 文件查找及内容匹配方法
Oct 25 Python
Python Django Cookie 简单用法解析
Aug 13 Python
Python实现平行坐标图的绘制(plotly)方式
Nov 22 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
Dec 25 Python
Tensorflow实现多GPU并行方式
Feb 03 Python
配置python的编程环境之Anaconda + VSCode的教程
Mar 29 Python
Python如何爬取51cto数据并存入MySQL
Aug 25 Python
Python中实现一行拆多行和多行并一行的示例代码
Sep 06 Python
详解python 支持向量机(SVM)算法
Sep 18 Python
python3中确保枚举值代码分析
Dec 02 Python
基于Python实现股票收益率分析
Apr 02 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配置心得包含MYSQL5乱码解决
2006/11/20 PHP
php session和cookie使用说明
2010/04/07 PHP
php截取后台登陆密码的代码
2012/05/05 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
PHP的静态方法与普通方法用法实例分析
2019/09/26 PHP
jQuery Ajax异步处理Json数据详解
2013/11/05 Javascript
我的Node.js学习之路(一)
2014/07/06 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
JQuery核心函数是什么及使用方法介绍
2016/05/03 Javascript
JavaScript数值千分位格式化的两种简单实现方法
2016/08/01 Javascript
angularjs+bootstrap实现自定义分页的实例代码
2017/06/19 Javascript
基于AngularJS实现表单验证功能
2017/07/28 Javascript
微信小程序中button组件的边框设置的实例详解
2017/09/27 Javascript
浅谈Node 调试工具入门教程
2018/03/20 Javascript
Vuex入门到上手教程
2018/06/20 Javascript
JavaScript对象的浅拷贝与深拷贝实例分析
2018/07/25 Javascript
详解Angular6 热加载配置方案
2018/08/18 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
ElementUI之Message功能拓展详解
2019/10/18 Javascript
echarts实现晶体球面投影的实例教程
2020/10/10 Javascript
python利用不到一百行代码实现一个小siri
2017/03/02 Python
python中requests使用代理proxies方法介绍
2017/10/25 Python
详解Python with/as使用说明
2018/12/13 Python
django云端留言板实例详解
2019/07/22 Python
Python序列化与反序列化pickle用法实例
2019/11/11 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
职务任命书范本
2014/06/05 职场文书
加强机关作风建设心得体会
2014/10/22 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书
二年级学生期末评语
2014/12/26 职场文书
大学生入党群众意见书
2015/06/02 职场文书
承兑汇票延期证明
2015/06/23 职场文书
基督教追悼会答谢词
2015/09/29 职场文书
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
JavaScript最完整的深浅拷贝实现方式详解
2022/02/28 Javascript
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript