参考资料:
1、童晶《Python趣味创意编程》第10章
2、Pillow官方网站https://pillow.readthedocs.io/en/latest/reference/ImageDraw.html
一、line方法
ImageDraw.line(xy, fill=None, width=0, joint=None)
- xy:一组点的队列。形如[x1,y1,x2,y2] 或 [(x1,y1),(x2,y2),....]
- fill:线的颜色
- width:线宽
- joint:一系列线之间的连接类型。它可以是"curve", 用于圆边,或None
二、天空颜色渐变
绘制出天空颜色渐变的效果。
- 1、创建一个背景为远山颜色的画布
- 2、从顶部开始画上半部分
- 3、颜色插值,从天空颜色逐渐变为远山颜色。
- 4、循环使用渐变色画线条。
三、源程序
# -*- coding: utf-8 -*-
"""
Created on Feb 7 15:37:26 2022
@author: dalong10
"""
from PIL import Image, ImageColor, ImageDraw
# 生成字符串"hsv(30,100%,100%)":
def colorstr(h,s,v):
color1="hsv("+str(h)+","+str(s)+"%,"+str(v)+"%)"
return color1.format("+{color1}+",color1)
# 生成四种绘制元素
cClouds=ImageColor.getrgb("hsv(330,25%,100%)")
cSky=ImageColor.getrgb("hsv(220,50%,50%)")
cFurther=ImageColor.getrgb("hsv(230,25%,90%)")
cCloser=ImageColor.getrgb("hsv(270,70%,10%)")
# 创建一个背景为远山颜色的画布
width = 800
height = 600
image = Image.new('RGB', (width, height), cFurther)
d = ImageDraw.Draw(image)
for y in range(round(height/2)): #从顶部开始画上半部分
h=220+round((230-220)*y/round(height/2)) #线性插值
s=50+round((25-50)*y/round(height/2))
v=50+round((90-50)*y/round(height/2))
ccolor=colorstr(h,s,v)
d.line([0,y,width,y],ccolor,0,0) #渐变色
# print(y,h,s,v )
image.save('skycolor.jpg', 'jpeg')
image.show()
四、运行结果

网友评论