美文网首页
2019-05-20 用 Python 表白 520

2019-05-20 用 Python 表白 520

作者: fa9cbce62562 | 来源:发表于2019-05-20 14:10 被阅读0次

    PS:本文写于5月初,特在 520 当天发表。

    前几天看到有人分享了微信头像制作的照片墙,感觉挺有意思的。正好还有半个月就是 520 了,让嫌弃我不够浪漫的老婆也刮目相看一把,于是突发奇想,可不可以将带老婆一起旅行的照片制作成照片墙呢?矩形太普通了,来个心形?520形?

    说做就做!度娘了一下心形的矩阵,纸上画出数字 5 2 和心形的排列,逐行计算坐标,试了一下,嗯,完美!

    以下我给大家分享一下我的思路(初学 Python,欢迎交流~)

    用到的第三方库是 Pillow,觉得这个更适合做简单的图像处理。

    1. 准备素材,这是最关键的,挑一些拍的美的照片,否则后果很严重(这里一共需要 75 个照片,保险起见,多准备三五张)
    2. 用自带的 os 库的 os.listdir 方法获取照片所在文件夹下所有文件的 file name,过滤掉非 .jpg 和 .JPG 文件
    3. 用 PIL 库中的 ExifTags 方法获取图片文件的拍摄日期,然后按日期先后顺序排序,生成过滤后的文件名的列表
    4. 这个照片墙一共有 8 行 23 列,列出 8 行 23 列 每个 cell 的左上角点的坐标值(x, y),不需要粘贴照片的 cell 的横坐标定位 0,生成所有 cell 坐标值的列表
    5. 过滤掉所有横坐标为 0 的 cell,得出新的列表,这个列表就是需要粘贴照片的 cell,列表长度为 75
    6. 接下来裁剪照片,横向和纵向的照片分情况裁剪,对于纵横比例小于 1.1 的做拉伸处理,这样在保证头像完整的前提下变形不会严重。这里有个坑,照片用图像处理工具做了旋转处理后,看着方向对了,但其实 Orientation 值并没有改变,导致粘贴照片后头像方向还是水平的,所以这里做了判断。
      另外,由于暂时还没研究人脸识别,所以对于头像不居中的情况采取了执行代码前手动裁剪的笨方法,这个后期学习了 Python人脸识别技术后再来更新。
    7. 前期准备工作做完了,开始最重要的一步——逐个 cell 粘贴图片
      先创建一个背景图片,我用了稍暗一点的红色做背景。
      用 for 循环,在第一个 cell 上粘贴 file name 的 list 中的第一个,也就是日期最早的图片,一直粘贴到最后一张,保存。
    8. 最后,在做好的图片中底部空白行中添加 2 处文字,一个是一段英文表达爱的美文,一个是水印(虽然很容易被 PS,不过照片具有私人性,别人拿不认识人的照片也没有用,哈哈。)
      im.show() 一下,大功告成!

    怎么样,是不是很简单?这个礼物发给女友/老婆,一定会收获感动的!亲测哦!!!

    来,看一下我的作品!


    PhotoWall_520_text.jpg

    完整代码如下:
    学习之用,转载请注明出处。谢谢!

    Code_PhotoWall_520.jpeg

    相关文章

      网友评论

          本文标题:2019-05-20 用 Python 表白 520

          本文链接:https://www.haomeiwen.com/subject/bmckzqtx.html