我有一个问题,我想在图像中的某个位置绘制一个圆/对象,然后我想绘制从该图像发出的光线 - 每条光线相隔1度。然而,光线只能投射在145度的光线上 - 所以它不会形成一个完整的圆形。我正在使用Python PIL(我是新手)来完成这项任务 - 尽管我对语言要求并不严格。
def drawSunshine(im):
draw = ImageDraw.Draw(im)
x, y = im.size
draw.ellipse((370,200, 400,230), fill='red',outline='black')
draw.line((370,205,390,218), fill='black',width=3)
draw.point((100,100),'red')
im.show()
我在想我可以通过遍历圆圈周围的每个像素来开始。然后我就可以改变那个像素的颜色。
编辑 这种方法对我有意义,因为我计划在黑白PNG文件上绘制此图像。如果当前像素为白色,我将绘制该行的另一个像素,如果当前像素为黑色:我会认为它是一个障碍并在此时终止该行。
然而,主要问题:
答案 0 :(得分:3)
这是一个你可以调整的小功能;
import Image, ImageDraw
from math import sin, cos, pi
width, height = 400, 400
skyBlue = (135, 206, 235)
im = Image.new("RGBA", (width, height), skyBlue)
#Draw Sun
draw = ImageDraw.Draw(im)
def drawSun(draw, centre, radius, rays=False, startAngle=0, finishAngle=360, rayAngle=10, rayGap=10, rayLength=1000, rayColour="Yellow", rayOutline="Orange"):
x1,x2 = centre[0] - radius, centre[0] + radius
y1,y2 = centre[1] - radius, centre[1] + radius
if rays:
for rayStart in range(startAngle, finishAngle, rayAngle+rayGap):
rayEnd = (rayStart+rayAngle) * pi/180
rayStart *= pi/180
corner1 = centre[0] + rayLength*cos(rayStart), centre[1] + rayLength*sin(rayStart)
corner2 = centre[0] + rayLength*cos(rayEnd), centre[1] + rayLength*sin(rayEnd)
print [centre, corner1, corner2]
draw.polygon([centre, corner1, corner2], fill="Yellow", outline="Orange")
draw.ellipse((x1, y1, x2, y2), fill="Yellow", outline="Orange")
drawSun(draw, (100, 100), 40, rays=True, startAngle=0, finishAngle=145, rayAngle=3, rayGap=5)
im.save("example.png")