这是我去年选修python程序设计时候的作业四,当时是皇甫伟老师教的然后范茜莹姐姐当的助教还代了两节课(虽然我作为颜狗沉迷颜值没好好听就是了),但是,python程序设计还是值得我来安利的,大二计通贝壳er都去选!!!

前文链接:

  • python程序设计之turtle绘图
  • Python程序设计之词频统计
  • Python程序设计之数字华容道

目录

作业要求

设计思路

运行结果

心得体会

源代码附上


作业要求

你打算用照片做一个照片墙,也就是在一张图片(背景墙)上的不同位置放了很多小图片。于是你收集了一些图片(如风景照等),你要做的工作包括下面的任务:

(1)将所收集的图片进行切分,切成一个个小单元,准备嵌入在照片墙。

(2)用上述单元在在照片墙上拼出数字图案,该数字是你的学号。

设计思路

(1)使用Pillow分别构建同样大小的图片text.jpg、wall.jpg,再根据两张图片的相同位置的像素情况构建final.jpg

(2)首先将图片统一重命名待用。然后创建text.jpg来存放照片墙的文字图层:

text = "41921012" # 设置文字图层内容font = ImageFont.truetype("arial.ttf", int(MAX_HEIGHT*1))   # 选择字体和字体大小text_image = Image.new("RGB", (MAX_WIDTH,MAX_HEIGHT)) # 新建一张空图draw = ImageDraw.Draw(text_image)draw.text((0,0), text,font = font,fill = "red")   # 写入字text_image.save("text.jpg")

之后随机选择照片,调整其大小,按顺序粘贴组成一张大的图片wall.jpg来存放照片墙的背景图层:

wall_image = Image.new("RGB", (MAX_WIDTH,MAX_HEIGHT)) # 新建空图# 通过循环粘贴小图片成大图片for x in range(MAX_WIDTH//MIN_WIDTH):for y in range(MAX_HEIGHT//MIN_HEIGHT):num = random.randint(1,5)    # 随机选图tmp = Image.open("photo/"+str(num)+".jpg")tmp = tmp.resize((MIN_WIDTH,MIN_HEIGHT),Image.NEAREST)    # 调整大小wall_image.paste(tmp,(x*MIN_WIDTH,y*MIN_HEIGHT))  #粘贴图片  wall_image.save("wall.jpg")

最后新建一张大小一样的图片final.jpg,通过Pillow.getpixel()获取两张图的像素信息,逐个像素进行比较,若text.jpg中的一点像素为红色,则对final.jpg的同一点使用Pillow.putpixel()赋同一点处wall.jpg的像素信息:

final_image = Image.new("RGB", (MAX_WIDTH,MAX_HEIGHT))    # 新建空图# 循环比较各个位置像素点for l in range(MAX_WIDTH):for h in range(MAX_HEIGHT):dot = (l,h)color_1 = text_image.getpixel(dot)color_2 = wall_image.getpixel(dot)if color_1 == (255,0,0):  # 如果该点处text.jpg为大红色final_image.putpixel(dot,color_2)   # 将该图的像素点赋值为wall.jpg同样位置像素点的值final_image.save("final.jpg")

运行结果

(1)text:

(2)wall:

(3)final:

心得体会

在调试过程中,整体上比较顺利,中间遇到了几个问题简单总结以下:

  1. 一开始比较无从下手,在请教了同学之后才有了思路,实际实现类似于PS的蒙版操作;
  2. 选择的图片格式有要求,我一开始选用的是.tif格式的照片,但实际运行的时候发现图片过大超出PIL库能运行的最大像素值,相同的图片格式改为jpg,jpeg等等都可以极大的加快程序运行速度。

源代码附上:

import os
from PIL import Image,ImageFont,ImageDraw
import randomMIN_WIDTH = 100
MIN_HEIGHT = 100
MAX_HEIGHT = 1000
MAX_WIDTH = 4500
path = 'photo'
num = 1for file in os.listdir(path):os.rename(os.path.join(path,file),os.path.join(path,str(num)+".jpg"))num+=1text = "41921012" # 设置文字图层内容
font = ImageFont.truetype("arial.ttf", int(MAX_HEIGHT*1))   # 选择字体和字体大小
text_image = Image.new("RGB", (MAX_WIDTH,MAX_HEIGHT)) # 新建一张空图
draw = ImageDraw.Draw(text_image)
draw.text((0,0), text,font = font,fill = "red")   # 写入字
text_image.save("text.jpg")
wall_image = Image.new("RGB", (MAX_WIDTH,MAX_HEIGHT)) # 新建空图
# 通过循环粘贴小图片成大图片
for x in range(MAX_WIDTH//MIN_WIDTH):for y in range(MAX_HEIGHT//MIN_HEIGHT):num = random.randint(1,5)    # 随机选图tmp = Image.open("photo/"+str(num)+".jpg")tmp = tmp.resize((MIN_WIDTH,MIN_HEIGHT),Image.NEAREST)    # 调整大小wall_image.paste(tmp,(x*MIN_WIDTH,y*MIN_HEIGHT))  #粘贴图片
wall_image.save("wall.jpg")
final_image = Image.new("RGB", (MAX_WIDTH,MAX_HEIGHT))    # 新建空图
# 循环比较各个位置像素点
for l in range(MAX_WIDTH):for h in range(MAX_HEIGHT):dot = (l,h)color_1 = text_image.getpixel(dot)color_2 = wall_image.getpixel(dot)if color_1 == (255,0,0):  # 如果该点处text.jpg为大红色final_image.putpixel(dot,color_2)   # 将该图的像素点赋值为wall.jpg同样位置像素点的值
final_image.save("final.jpg")

Python程序设计之照片墙相关推荐

  1. Python程序设计之送你一首集句诗

    这是我去年选修python程序设计时候的作业五,当时是皇甫伟老师教的然后范茜莹姐姐当的助教还代了两节课(虽然我作为颜狗沉迷颜值没好好听就是了),但是,python程序设计还是值得我来安利的,大二计通贝 ...

  2. Python程序设计 大作业 简化的PS

    查看原文 Python程序设计 作业 海龟绘图 文本处理 分组游戏设计 数字照片墙 送你一首集句诗 简化的PS Python程序设计 大作业 简化的PS Python程序设计 作业 摘要 1. 项目背 ...

  3. Python程序设计 作业5 送你一首集句诗

    查看原文 Python程序设计 作业 海龟绘图 文本处理 分组游戏设计 数字照片墙 送你一首集句诗 简化的PS Python程序设计 作业5 送你一首集句诗 Python程序设计 作业 设计思路: 实 ...

  4. Python 程序设计(第二版)董付国_清华大学出版社_习题答案与分析【针对8.4及其之前的】

    更多精彩内容:(没有设置公众号获得,麻烦动动小手~谢谢) CSDN下载:Python编程无师自通电子书,[美]科里·奥尔索夫(Cory Althoff)-文档类-CSDN下载 百度云:链接:https ...

  5. 《Python程序设计》题库(2)

    侵权联系我删除: [写在这里,方便右键百度搜索!] <Python程序设计>题库 填空题 Python安装扩展库常用的是_______工具.(pip) Python标准库math中用来计算 ...

  6. python程序设计试卷_Python程序设计试题库

    < Python 程序设计>题库 一.填空题 第一章基础知识 1 . Python 安装扩展库常用的是 ________ 具.( pip ) 2 . Python 标准库 math 中用来 ...

  7. python设计选择题代码_《Python程序设计》试题库

    WORD 完美格式 < Python 程序设计>题库 一.填空题 第一章 基础知识 1 . Python 安装扩展库常用的是 _______ 工具.( pip ) 2 . Python 标 ...

  8. python程序设计梁勇 百度网盘_20194220 2019-2020-2 《Python程序设计》实验二报告

    20194220 2019-2020-2 <Python程序设计>实验二报告 课程:<Python程序设计> 班级: 1942 姓名: 梁勇 学号:20194220 实验教师: ...

  9. python笔试题110题_《Python程序设计》试题库

    .. ;. < Python 程序设计>题库 一.填空题 第一章 基础知识 1 . Python 安装扩展库常用的是 _______ 工具.( pip ) 2 . Python 标准库 m ...

最新文章

  1. outlook恢复已删除邮件
  2. android n等分 layout,RecyclerView GridLayoutManager 等分间距
  3. 月份对比_6月份钢坯市场或将高位回落
  4. java中关于线程的状态属性_深入理解Java多线程与并发框(第①篇)——线程的状态...
  5. r 64位连接mysql_R与Mysql数据库连接的两种方法
  6. 面试相关-转载-well,yzl——持续更新
  7. 聚簇索引,非聚簇索引
  8. 如果写不好 SQL,有没有好用的报表软件?
  9. 输出递归因数分解php,[学习笔记] Miller-Rabin质数测试 Pollard-Rho质因数分解
  10. java时间管理_IT 人,如何构建自己的时间管理系统?
  11. 详谈硬盘分区表格式MBR与GUID/GPT
  12. XGBOOST原理解析
  13. Unity 调用打印机遇到的坑
  14. INE深圳硅谷双线发布演讲实录 | CEOCTO羽睿-去中心化的最后一块版图
  15. 软件测试岗位考核指标,(最新整理)测试人员考核标准
  16. Machine Learning -- 揭开机器学习的面纱
  17. 面试汇总-Spring-IOC和AOP
  18. 趣解TCP/IP之二哥与三弟的故事
  19. 微信小程序添加卡券,领取到卡包
  20. 电脑管理员密码忘记了,如何解决

热门文章

  1. 初学JavaScript:js中的对象(对象+原型对象)
  2. 2023年链工宝安全生产月答案题库
  3. Flink学习之流处理架构
  4. 2021年初级会计考试题库app
  5. 微信小程序—选择地理位置并显示
  6. linux下搜狗打字软件下载,搜狗linux输入法
  7. 程序员自我修养之长篇连载
  8. tomcat闪退原因
  9. LaTeX:导数相关符号
  10. 【数据科学】您将需要的最全面的数据科学/机器学习面试指南