【小工具】用PIL算法库制作出图片合成工具
生活随笔
收集整理的这篇文章主要介绍了
【小工具】用PIL算法库制作出图片合成工具
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
喜大普奔,之前写的爬歌工具,阅读超过10W,同时在线使用人数超过100人。。。
在众多同事及好友的邀请下,继续出炉了这个图片合成的脚本工具。
实现了分辨率、处理目录、批量处理参数的自定义,不同大小图片九宫格1秒合成!!
使用了这三个库
定义了两个函数,第一个是收集目录下图片的集合
第二个函数是将收集的图片进行大小调整,使长宽一致后可以粘合在一块。
【以下是成品展览:】
--==--==--
【善于自定义的可以取源码,直接拿来即用,1秒合成则取文章底部打包好的工具】
# -*- coding:utf-8 -*-import os import timefrom PIL import Image# global Image_path, Image_size, Image_row, Image_column, Image_format, Image_save_path global another_pathImage_path = r'E:\待处理图片\\' # 图片集地址 Image_format = ['.jpg', '.JPG'] # 预设图片的格式 Image_size = 256 # 每张图片大小,最终影响的是分辨率 256*256 Image_row = 3 # 图片间隔,也就是合并成一张图后有几行 Image_column = 3 # 图片间隔,也就是合并成一张图后有几列 Image_save_path = 'E:\\待处理图片\\final.png' # 最终形成的图片while 1:is_exist = input(r'①请确认电脑是否已经有E:\待处理图片 或替换了路径,是/否: ')another_path = Noneif is_exist.strip() == '是':print(' 恭喜!路径OK.')breakelse:print(' ~~~您可以替换路径,替换后需确认答复“是”~~~')another_path = input(r' 请输入您的正确图片地址,必要时,路径中每个文件夹都以\\隔开: ')if not another_path:print('您必须输入新路径的地址@huzk')another_path = Falseif '\\' in another_path[-1]: # 处理路径未以\结尾的异常Image_path = another_pathelse:Image_path = another_path + '\\'Image_save_path = Image_path + 'final.png' # 图片目录变更,应同时修改存储的绝对路径need_size = input('②您是否需要更改成更高分辨率,如有请直接输入,输入666即表示为666*666的分辨率[按Enter直接跳过]. ') if need_size:Image_size = int(need_size.strip())print(' 切换分辨率成功~~~')need_row = input('③请输入几行,合成图片默认三行[无更改,则按Enter直接跳过] ') need_column = input('④几列,合成图片默认三列[无更改,则按Enter直接跳过] ') if need_row:Image_row = int(need_row.strip()) if need_column:Image_column = int(need_column.strip())update_line = [] update_line.append(Image_path) if another_path is not None else print(' ☞没有变更路径') update_line.append(Image_size) if need_size else print(' ☞没有变更分辨率(固定高宽)') update_line.append(Image_row) if need_row else print(' ☞没有变更图片行数') update_line.append(Image_column) if need_column else print(' ☞没有变更图片列数')print('\n\n 全部配置已更新:' + str(update_line)) if len(update_line) != 0 else print(' 使用的是默认配置')def reconfirm():# 获取图片集地址下的所有图片名称image_names = [name for name in os.listdir(Image_path) for item in Image_format ifos.path.splitext(name)[1] == item]# 简单的对于参数的设定和实际图片集的大小进行数量判断if len(image_names) != Image_row * Image_column:print('Warn!!!Pictures nums appear some problems.') # 图片数量上出现问题,请重置Image_row和Image_columnraise ValueError('\n!合成图片的参数和要求的数量不能匹配!\n')else:return image_names# 定义图像拼接函数 def New_Image(name):to_image = Image.new('RGB', (Image_column * Image_size, Image_row * Image_size)) # 定义的新图# 循环遍历,把每张图片按顺序黏贴到对应位置上for y in range(1, Image_row + 1):for x in range(1, Image_column + 1):from_image = Image.open(Image_path + name[Image_column * (y - 1) + x - 1]).resize((Image_size, Image_size), Image.Resampling.LANCZOS)to_image.paste(from_image, ((x - 1) * Image_size, (y - 1) * Image_size))return to_image.save(Image_save_path) # 保存此图if __name__ == '__main__':# print(changes_attr())names = reconfirm()if names:New_Image(names) # 运行看看else:print('图片数量或者名称获取出错, 须符合预设格式jpg...')# New_Image()print('~~~\n运行完成,三秒后自动关闭窗口. ')for i in range(3)[::-1]:print(f'窗口关闭倒计时: {i + 1} 秒!')time.sleep(1)笔者使用的是python3,如果电脑编译环境不同,请直接取工具:
Tips:合成图片请在合理数字范围内命名,或者按名称顺序创建对应待合成图片
目前仅支持windows环境使用。
考虑后期付费支持国内第一图像识别的开放API,来AI优化图像。
https://pan.baidu.com/s/1bi1Ana0W3cmksXcmSCMlgQ?pwd=wynb
总结
以上是生活随笔为你收集整理的【小工具】用PIL算法库制作出图片合成工具的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 华西医院牵手易维帮助台实现精细化IT运维
- 下一篇: 市场营销实务【1】