入门python小工具(2)之生成简单照片墙
工具功能在背景板中按照选择格式粘贴照片形成有规则形状的照片墙。如图使用介绍需要自行准备好背景图片、粘贴入墙的照片和粘贴黑白格式图片上图的格式图片为梅花。按照运行时的输入提示输入文件路径即可。源代码from PIL import Image import PIL import os import random import time print(路径可直接复制喔) wall_pathinput(输入照片墙格式图片的路径:).replace(,) back_pathinput(输入背景板图片的路径).replace(,) pics_pathinput(输入需插入照片墙的照片文件(文件夹)路径).replace(,) img_wallImage.open(wall_path)#获取选择好的照片墙格式素材 img_backImage.open(back_path)#获取选择好的背景板图片 imgs_namesos.listdir(pics_path)#获取要加入照片墙内的照片文件名列表 backlenint(input(确认最终生成照片墙的边长(请输入整数)\n(推荐边长为2000):)) piclenint(input(请确认贴入照片墙的照片边长(请输入整数)\n(推荐边长为100):)) img_wallimg_wall.resize((int(backlen/piclen),int(backlen/piclen))) img_backimg_back.resize((backlen,backlen))#设置背景版尺寸 img_wallimg_wall.convert(1)#照片墙转化为二值图片 figure[]#定义一个空列表准备存放像素信息 for i in range(int(backlen/piclen)): row[] for j in range(int(backlen/piclen)): piximg_wall.getpixel((i,j))%254#取模将像素信息简化为1或0 row.append(pix) figure.append(row)#循环结束后嵌套列表figure已存放每个列表的像素值。figure列表的作用是提供粘贴图片到背景版上所需要的位置信息 rowlen(figure) collen(figure[0]) #开始粘贴 for i in range(row): for j in range (col): if figure[i][j]0: imgPathpics_path\\random.choice(imgs_names) picImage.open(imgPath).resize((piclen,piclen)) img_back.paste(pic,(piclen*i,piclen*j)) save_pathinput(请输入最终生成照片墙的保存路径(如C:\\Users\\24909\\Desktop\\picwall.png):).replace(,) img_back.save(save_path) print(生成成功请在输入的保存路径中查找结果) time.sleep(2)思路用户给到的照片墙格式图片的作用是用于获取粘贴图片的位置使粘贴完成后形成照片墙格式图片的形状。将照片墙格式图片转化为二值图片二值图片的像素只有0和255有利于信息转化代码里将像素值%254把像素值边长0和1。取模步骤可用可不用后就能把像素信息存入嵌套列表figure中。遍历列表figure若读取到figure中0时粘贴图片而粘贴坐标位置就为figure的索引ij即行列分别乘上设置的粘贴图片大小。可如此理解格式图片上的二值像素点之于格式图片的比例大小粘贴图片之于背景图片的比例大小由此粘贴的图片就相当于一个背景图片上的“大像素0点”。再根据figure存着的像素信息遇0则粘贴。最终使得粘贴照片构成形状与格式图片一致。如图示意一个粘贴出来的50图案大像素大像素大像素大像素大像素大像素大像素大像素大像素大像素大像素大像素大像素大像素大像素大像素大像素大像素大像素大像素大像素大像素大像素大像素大像素大像素大像素大像素大像素涉及的简单优化1.用户输入时通常会直接复制粘贴路径因此存储起时可能会将直接粘贴的双引号也存入导致最后程序查找路径时会无法识别双引号如程序会读取查找C:\Users\24909\Desktop\back.jpg而不是C:\Users\24909\Desktop\back.jpg。代码中可添加.replace( , )将引号替换为“啥也没有”。而替换成空格会影响程序读取文件路径2.代码最后的sleep也是为了让用户有反应时间去知道程序运行成功而不是认为程序无故闪退。打包后的.exe程序小问题1.输入错误路径造成无法读取会直接闪退2.需粘贴的图片若原本尺寸与输入的边长尺寸不同粘贴时会有拉伸图片的情况呈现不出原图的效果。最好要在程序外裁剪后再粘贴照片墙。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2498257.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!