Python程序设计 作业
Python程序设计 作业4 数字照片墙
- Python程序设计 作业
- 设计思路:
- 实现方案
- 关键代码说明
- 构建文字图层
- 构建背景图层
- 构建最终图片
- 效果展示
- 心得体会
设计思路:
使用Pillow
分别构建同样大小的图片text.jpg
、wall.jpg
,再根据两张图片的相同位置的像素情况构建final.jpg
实现方案
首先将图片统一重命名待用。然后构建text.jpg
来存放照片墙的文字图层。之后随机选择照片,调整其大小,按顺序粘贴组成一张大的图片wall.jpg
来存放照片墙的背景图层。最后新建一张空的大小一样的图片final.jpg
。通过Pillow.getpixel()
获取两张图的像素信息,逐个像素进行比较,若text.jpg
中的一点像素为大红色,则对final.jpg
的同一点使用Pillow.putpixel()
赋同一点处wall.jpg
的像素信息。
关键代码说明
构建文字图层
text="41802198" # 设置文字图层内容
ft=ImageFont.truetype("shuma.ttf", int(BIG_HEIGHT*1)) # 选择字体和字体大小
text_image=Image.new("RGB", (BIG_WIDTH,BIG_HEIGHT)) # 新建一张空图
draw = ImageDraw.Draw(text_image)
draw.text((0,0), text,font=ft,fill="red") # 写入字
text_image.save("text.jpg")
构建背景图层
wall_image=Image.new("RGB", (BIG_WIDTH,BIG_HEIGHT)) # 新建空图
# 通过循环粘贴小图片成大图片
for x in range(BIG_WIDTH//SMALL_WIDTH):
for y in range(BIG_HEIGHT//SMALL_HEIGHT):
num=random.randint(1,10) # 随机选图
tmp=Image.open("photo/"+str(num)+".jpg")
tmp=tmp.resize((SMALL_WIDTH,SMALL_HEIGHT),Image.NEAREST) # 调整大小
wall_image.paste(tmp,(x*SMALL_WIDTH,y*SMALL_HEIGHT)) #粘贴图片
wall_image.save("wall.jpg")
构建最终图片
wall_image=Image.new("RGB", (BIG_WIDTH,BIG_HEIGHT)) # 新建空图
# 通过循环粘贴小图片成大图片
for x in range(BIG_WIDTH//SMALL_WIDTH):
for y in range(BIG_HEIGHT//SMALL_HEIGHT):
num=random.randint(1,10) # 随机选图
tmp=Image.open("photo/"+str(num)+".jpg")
tmp=tmp.resize((SMALL_WIDTH,SMALL_HEIGHT),Image.NEAREST) # 调整大小
wall_image.paste(tmp,(x*SMALL_WIDTH,y*SMALL_HEIGHT)) #粘贴图片
wall_image.save("wall.jpg")
效果展示
心得体会
本次作业考察的主要对图片的操作,难度不大。需要我们对图片各种格式、通道有所了解。其余的无非就是一些简单的判断以及赋值。本次作业完成的方法有很多,每一种都能帮助我们更好地学习图片的相关知识,希望大家都能多尝试几种方法,学习到更多相关知识。