,又要进入一年一度的520了。作为一个不折不扣的程序员,我感到很恐慌。看来除了吃饭、买礼物、看电影,我没有更多的想法了,于是想着把女朋友从古至今的照片全部整理出来,准备做一个史无前例的照片墙。[阅读全文]当然,我这里用的图片都是百度的。私人照片不能公开。话不多说,进入正题,先把需要的非标准库梳理一下,只有一个PIL图像处理库,还有一个就是操作文件的os标准库。fromPILimportImageimportos然后,定义一个二维数组。这个二维数组是由0和1组成的,观察0的位置组合成一个心形。之后,我们需要按照这个规则放置需要的照片。一个心形的照片墙就形成了。位置=[[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1],[1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,1,1,1,1],[1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1],[1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1],[1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1],[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1],[1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1],[1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1],[1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1],[1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],]需要注意的是,0的个数其实就是0的个数photos,所以0的个数需要尽可能小于等于photos的个数。根据自己的实际情况微调即可。由于我们自己的每张照片的尺寸可能不统一,所以我们必须指定每张图片的放置方式。输入后的大小。img_w=img_h=192#宽和高都设置为192像素#计算location二维数组的行数和列数rows=len(location)columns=len(location[0])#使用row和列号和每个图像的像素来计算目标画布的大小。canvas=Image.new("RGB",(img_w*columns,img_h*rows),"white")我们需要将我们的照片放在这个画布上。接下来拍摄我们需要的素材照片,设置素材图片(女友照)所在的文件夹。source_img_dir=r"C:\software\pycharm-workspace\the-public\test008\images"source_imgs=os.listdir(source_img_dir)没有女朋友照片不要灰心,可以去百度一下下载吧,你可以看看我之前的文章'百度图片下载2.0'下载了很多照片,哈哈哈哈!接下来就可以生成我们期待的心形照片墙了,进入收割环节。#定义一个下标值,方便从我们的imgs数组中拍照。index=0#通过遍历二维数组中的行和列,将我们的照片放在相应的位置。forrowinrange(rows):forcolumninrange(columns):#如果当前二维数组中的元素为1,则说明该位置不在心形要求的位置,所以不会被处理。iflocation[row][column]==1:continue#如果当前二维数组中的元素为1,则需要在该位置放置一张照片else:try:#获取一张图片并以Image形式打开objectimage=Image.open(os.path.join(source_img_dir,source_imgs[index]))#重置当前照片的大小image=image.resize((img_w,img_h))#将照片图像对象放在画布上具体位置canvas.paste(image,(img_w*column,img_h*row))#增加图片列表中的图片下标索引+=1except:continuedisplayphotowallcanvas.show()savephotowallcanvas.save('Heart-shaped-photowall.png')至此,终于大功告成了,感谢大家一直以来的陪伴和支持,我们会继续努力,做出更多精彩的内容!【优秀往期】两个库处理python中javascript代码块/文件的引用...python是否实现excel数据与mysql数据库的互通!python实现超快的窗口截图,自动获取当前活动窗口并显示截图...如何用python制作解压小工具,再也不用下载各种格式的解压软件...python最简单的乌龟画法:奥运五环!
