作品展示
背景需求
难点:如何让生成图片带两个颜色的数字?
上一次学习活动中,发现03、04、05、06、08、09 、 23、26、28拼图都有困境,教师帮助。这些数字都包含圆弧结构,幼儿对于大量的圆弧碎片图形的多重组合(2个数字都是圆弧结构)感到茫然(这条圆弧和这条圆弧能拼在一起,但实际并不是正确位置)
因此,笔者希望将学号的两个数字用不同灰度颜色表示(办公室打印机没有彩色墨水)
十位数的数字用深灰色,个位数的数字用浅灰色,有明显区分。
难点:如何让生成图片带两个颜色的数字?
参考CSDn,修改代码,实现需求
1、仿抖音短视频系统源码,制作彩色验证码_云豹网络科技的博客-CSDN博客
2、用python实现生成验证码图片_python生成验证码图片_心系五道口的博客-CSDN博客
代码设置:
'''
目的:学号拼图的两个数字颜色不同(深灰\浅灰)
作者:阿夏
日期:2023年05月23日22:17'''
import random
import string
from random import choice, randint, randrange
from PIL import Image, ImageDraw, ImageFont
colour1=int(input('十位数的数字的颜色(100深灰)\n'))
colour2=int(input('个位数的数字的颜色(170中灰)\n'))
# 28个学号
num=[]
for x in range(1,29):
num.append('%02d'%x)
print(num)
# 循环28张图片
n=1
for x in range(len(num)):
# 读取num里面的每个数字
res1="{}".format(num[x])
print(res1)
# 25
# 26
# 27
# 28
# 图片大小、数字数量(坐标用) 背景色
size=[600,400] # 图片大小
characterNumber=2 # 几个数字随机抽取2个数字
bgcolor=(255,255,255) # 背景颜色 白色
imageTemp = Image.new('RGB', size, bgcolor)
draw = ImageDraw.Draw(imageTemp)
# text = selectedCharacters(characterNumber)
# 文字格式
text = res1
font = ImageFont.truetype('c:\\windows\\fonts\\arial.TTF', 350)
width, height = draw.textsize(text, font)
# # 随机字符位置(确保数字在中心)
startX = -90
widthEachCharater = width//characterNumber
a=[colour1,colour2] # 深灰、中灰
for i in range(characterNumber):
startX += widthEachCharater +1
# position = (startX, (size[1]-height)//2+randint(-5,5))
position = (startX,(size[1]-height)//7)
g=b=r=a[i] # 第1个数字 RGB色等于深灰# 第2个数字 RGB色等于终会
draw.text(xy=position, text=text[i], font=font, fill= (r,g,b)) # 填充色彩
# 对像素位置进行微调,实现扭曲的效果
imageFinal = Image.new('RGB', size, bgcolor)
pixelsFinal = imageFinal.load()
pixelsTemp = imageTemp.load()
for y in range(size[1]):
offset = randint(-1,0)
for x in range(size[0]):
newx = x+offset
if newx>=size[0]:
newx = size[0]-1
elif newx<0:
newx = 0
pixelsFinal[newx,y] = pixelsTemp[x,y]
imageFinal.save(r"C:\Users\jg2yXRZ\OneDrive\桌面\彩色数字\学号{}.jpg".format('%02d'%n))
n+=1
不同灰度的效果
第1个数字RGB(100 100 100)
第2个数字RGB(170 170 170)
感悟:
在无法使用彩色打印基础上,制作不同灰度的数字、文字、图案,提升幼儿拼图的效率