博客
关于我
python-长宽不同多张图片生成一列长图
阅读量:123 次
发布时间:2019-02-26

本文共 2163 字,大约阅读时间需要 7 分钟。

今天朋友让我给他弄个长图,就是无缝衔接,宽度一致。大概是这样:

长图

之前就弄了一次,放到了PS里面,调整画布大小,一个个的放进去调整宽高,今天又来一次,很是麻烦。于是,就百度了一些在线制作网站,逛了逛github,结果,要么是要求宽高一致,要么就是默认按第一张宽度,后面图片宽度不够的白色补足,要么就是超过多少张收费。于是,一气之下就写了一个。

思路:用户选择图片,用户选择保存路径,使用Image读取图片,按照第一张图片调整大小,保存到保存路径(生成了OUT目录,防止读取时有其他图片),然后再从保存路径将这些图片使用paste连接在一起。

代码

from PIL import Imageimport osimport sysimport tkinter as tkfrom 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 = 0width = 0long_high = 0for pic in pic_paths:    for item in IMAGES_FORMAT:        if os.path.splitext(pic)[1] != item:            pass        else:            print(pic)            pic_name = pic.split("/")[-1]            img = Image.open(pic)  # 读取图片            (x, y) = img.size  # 获得图片大小            if flag == 0:                width = x                flag = 1            high = int(y * width / x)  # 计算高度            long_high += high            out = 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 if             os.path.splitext(name)[1] == item]paste_high = 0for pic in img_paths:    for item in IMAGES_FORMAT:        if os.path.splitext(pic)[1] != item:            pass        else:            img = Image.open(save_path + "/" + pic)  # 读取图片            (x, y) = img.size  # 获得图片大小            long_img.paste(img, (0, paste_high))  # 图片及位置(左上角坐标)            paste_high += ylong_img.save(save_path + "/" + "长图.jpg")print("完成...")os.system("pause")

结果截图

选择图片
选择保存路径
命令窗口显示制作情况
调整后的图片及长图

随后,使用pyinstall -F xxx.py进行打包,发送给他了。

相对于PS的结果,代码方式形成的长图(作用照片30-40张)虽然达不到9、10兆,但是也能4、5兆左右,在手机端查看还是很清晰。如果你想形成横向的,或者说图片直接有空隙,那么修改长图宽高以及paste函数的图片左上角位置参数即可。

转载地址:http://ogvf.baihongyu.com/

你可能感兴趣的文章
nanoGPT 教程:从零开始训练语言模型
查看>>
NASA网站曝严重漏洞,或将沦为黑客钓鱼网站?
查看>>
Nash:轻量级、安全且可靠的脚本语言
查看>>
NAS、SAN和DAS的区别
查看>>
NAS个人云存储服务器搭建
查看>>
NAS服务器有哪些优势
查看>>
NAT PAT故障排除实战指南:从原理到技巧的深度探索
查看>>
nat 网卡间数据包转发_你是不是从来没有了解过光纤网卡,它跟普通网卡有什么区别?...
查看>>
NAT-DDNS内网穿透技术,快解析DDNS的优势
查看>>
NAT-DDNS内网穿透技术,快解析DDNS的优势
查看>>
NAT-DDNS内网穿透技术,解决动态域名解析难题
查看>>
natapp搭建外网服务器
查看>>
NativePHP:使用PHP构建跨平台桌面应用的新框架
查看>>
nativescript(angular2)——ListView组件
查看>>
NativeWindow_01
查看>>
Native方式运行Fabric(非Docker方式)
查看>>
Nature | 电子学“超构器件”, 从零基础到精通,收藏这篇就够了!
查看>>
Nature和Science同时报道,新疆出土四千年前遗骸完成DNA测序,证实并非移民而是土著...
查看>>
Nature封面:只低一毫米,时间也会变慢!叶军团队首次在毫米尺度验证广义相对论...
查看>>
Nat、端口映射、内网穿透有什么区别?
查看>>