python-长宽不同多张图片生成一列长图
今天朋友让我给他弄个长图,就是无缝衔接,宽度一致。大概是这样:
之前就弄了一次,放到了PS里面,调整画布大小,一个个的放进去调整宽高,今天又来一次,很是麻烦。于是,就百度了一些在线制作网站,逛了逛github,结果,要么是要求宽高一致,要么就是默认按第一张宽度,后面图片宽度不够的白色补足,要么就是超过多少张收费。于是,一气之下就写了一个。
思路:用户选择图片,用户选择保存路径,使用Image读取图片,按照第一张图片调整大小,保存到保存路径(生成了OUT目录,防止读取时有其他图片),然后再从保存路径将这些图片使用paste连接在一起。
代码
from PIL import Image
import os
import sys
import tkinter as tk
from tkinter import filedialog# 图片格式
IMAGES_FORMAT = [".JPG", ".jpg", ".png", ".PNG", ".JPEG", ".jpeg"]
root = tk.Tk()
root.withdraw()
# 选择图片
print("请选择图片...")
pic_paths = filedialog.askopenfilenames()
# 选择保存路径
print("请选择长图保存路径...")
save_path = filedialog.askdirectory()
save_path = save_path + "/OUT"
root.destroy()
isExists = os.path.exists(save_path)
# 判断结果
if not isExists:# 如果不存在则创建目录os.makedirs(save_path)
print("调整后图片及长图保存路径:", save_path)
print("获得图片如下:")
flag = 0
width = 0
long_high = 0
for pic in pic_paths:for item in IMAGES_FORMAT:if os.path.splitext(pic)[1] != item:passelse:print(pic)pic_name = pic.split("/")[-1]img = Image.open(pic) # 读取图片(x, y) = img.size # 获得图片大小if flag == 0:width = xflag = 1high = int(y * width / x) # 计算高度long_high += highout = img.resize((width, high), Image.ANTIALIAS) # 调整图片大小out.save(save_path + "/" + pic_name) # 保存图片
print("调整后图片保存完成,开始制作长图...")
long_img = Image.new(mode='RGB', size=(width, long_high))
img_paths = [name for name in os.listdir(save_path) for item in IMAGES_FORMAT ifos.path.splitext(name)[1] == item]
paste_high = 0
for pic in img_paths:for item in IMAGES_FORMAT:if os.path.splitext(pic)[1] != item:passelse:img = Image.open(save_path + "/" + pic) # 读取图片(x, y) = img.size # 获得图片大小long_img.paste(img, (0, paste_high)) # 图片及位置(左上角坐标)paste_high += y
long_img.save(save_path + "/" + "长图.jpg")
print("完成...")
os.system("pause")
结果截图
随后,使用pyinstall -F xxx.py进行打包,发送给他了。
相对于PS的结果,代码方式形成的长图(作用照片30-40张)虽然达不到9、10兆,但是也能4、5兆左右,在手机端查看还是很清晰。如果你想形成横向的,或者说图片直接有空隙,那么修改长图宽高以及paste函数的图片左上角位置参数即可。
python-长宽不同多张图片生成一列长图相关推荐
- 求三个长方柱的体积,数据成员包括length(长)、width(高)。要求用成员函数实现以下功能: (1)用键盘分别输入三个长方柱的长宽高; (2)计算长方柱的体积;(3)输出3个长方柱的体积。
项目要求: 需要求三个长方柱的体积,请编写一个基于对象的程序,数据成员包括length(长).width(高).要求用成员函数实现以下功能: (1)用键盘分别输入三个长方柱的长宽高: (2)计算长方柱 ...
- vue项目将多张图片生成一个gif动图
当前做项目有一个需求是将多张图片生成一个gif动图的形式 类似下面图片几张图片叠加生成一个gif动图 图片涉及工作隐私,就不公开啦 我们要引入一个gif.js的引入包,但是他没有直接引入的方式,只能从 ...
- Python学习笔记_多张图片生成马赛克图
原文链接:使用Python简单实现马赛克拼图 代码如下: import os import time from functools import reduce from threading impor ...
- python学习之将两张图片生成为全景图片
文章目录 1.全景图片的介绍 2.如何实现 2.1.实现原理 2.2.实现代码 3.运行效果 1.全景图片的介绍 全景图通过广角的表现手段以及绘画.相片.视频.三维模型等形式,尽可能多表现出周围的环境 ...
- 解决 python pytplot绘图 图片长宽无法调整、文件保存为矢量图的问题记录。
这个问题困扰我许久,本身文档提供的控制函数都试过了,文档见下.https://pytplot.readthedocs.io/en/latest/index.html 诸如这些控件调整都是失败的. ws ...
- pdfbox pdf转图片,图片长宽大小与pdf保持一致
需求 需要将pdf转图片,用作预览,图片需要与pdf页的长宽大小保持一致. 依赖 org.apache.pdfbox:pdfbox:2.0.26 分析过程 pdfbox源码中,设置图片长宽大小的方法如 ...
- 5.前端CSS之基本属性(长宽,字体,文体,背景图片,阴影,border画圆,display)
1.块儿标签长宽height,width块儿标签可以设置长宽,设置长宽后依然独占一行 h1-h6,p,div行内标签无法设置长宽 写了 也不会生效 i,u,s,b span2.字体样式:font-fa ...
- Blender 插件开发 计算模型长宽高
模型的长宽高在写一些需要计算的插件时还是挺有用的,可以通过object.dimensions(模型尺寸)知道,可是遇到复数模型组成的物体计算长宽高就比较麻烦了,像我这个模型就是复数子模型组成的,用一个 ...
- Matplotlib 常用画图命令总结:使用 Python 在论文中画出一手漂亮的数据图
介绍 本文不是一篇详尽的.从简到繁的 Matplotlib 画图教程,而是用各种例子快速直观地让读者上手 Matplotlib 画图中的一些常用的.基础的操作.本文不对各种数据图(折线图.柱状图等)作 ...
最新文章
- LIVE 预告 | 佐治亚理工杨笛一:少数据,多框架的自然语言处理
- 滴滴AI负责人叶杰平:你的每一次出行,都已有AI落地的助力 | MEET 2020
- python怎么加载图片-如何用python获取图像
- 深度学习材料:从感知机到深度网络A Deep Learning Tutorial: From Perceptrons to Deep Networks
- asp.net faq: 在html文件中,用js获取session
- 小程序 mpvue 生命周期一览
- Mysql中SQL语句不使用索引的情况
- spring_装配Bean
- 字符串在Python中的本质是一个序列。 数字类型不是序列,不是可迭代对象,只能看做一个整体不可分割...
- 奇安信代码安全实验室招贤纳士
- AI学习笔记(十六)中文分词
- 又一种页面之间传值方式
- pythonATM,购物车项目实战6-用户登录功能的实现
- PHPWord通过docx模板替换标签,最终生成pdf文件
- 大话GraphQL新手上车
- 线性代数(numpy.linalg)
- 摄像机标定:像素焦距与毫米焦距转换
- 字符编码常识及问题解析
- ppt密码怎么设置,ppt权限密码如何破解?
- sklearn中StandardScaler()