gpt4 book ai didi

python - 使用 PIL 的 Imagedraw 创建具有给定厚度的圆弧

转载 作者:太空狗 更新时间:2023-10-29 21:55:43 29 4
gpt4 key购买 nike

我正在尝试使用 PIL 和 Imagedraw 创建分段弧。 arc 函数让我很容易画出弧线,但它只是一条线。我需要能够放置给定半径和厚度(ID 到 OD)的圆弧,但 AI 找不到任何类型的厚度或宽度设置。有没有办法做到这一点?如果没有,是否有其他方法可以使用 PIL 执行此操作?

片段:

import Image
import ImageDraw

conv = 0.1
ID = 15
OD = 20
image = Image.new('1',(int(ceil(OD/conv))+2,int(ceil(OD/conv))+1), 1)
draw = ImageDraw.Draw(image)
diam = OD-ID
box=(1, 1, int(ceil(diam/conv)), int(ceil(diam/conv))) #create bounding box
draw.arc(box, 0, 90, 0) #draw circle in black

最佳答案

我根据 Mark 创建了以下圆弧替换函数的建议:

https://gist.github.com/skion/9259926

像素可能不完美(也不快),但似乎接近我的需要。如果您有更好的版本,请在要点中发表评论。

def arc(draw, bbox, start, end, fill, width=1, segments=100):
"""
Hack that looks similar to PIL's draw.arc(), but can specify a line width.
"""
# radians
start *= math.pi / 180
end *= math.pi / 180

# angle step
da = (end - start) / segments

# shift end points with half a segment angle
start -= da / 2
end -= da / 2

# ellips radii
rx = (bbox[2] - bbox[0]) / 2
ry = (bbox[3] - bbox[1]) / 2

# box centre
cx = bbox[0] + rx
cy = bbox[1] + ry

# segment length
l = (rx+ry) * da / 2.0

for i in range(segments):

# angle centre
a = start + (i+0.5) * da

# x,y centre
x = cx + math.cos(a) * rx
y = cy + math.sin(a) * ry

# derivatives
dx = -math.sin(a) * rx / (rx+ry)
dy = math.cos(a) * ry / (rx+ry)

draw.line([(x-dx*l,y-dy*l), (x+dx*l, y+dy*l)], fill=fill, width=width)

关于python - 使用 PIL 的 Imagedraw 创建具有给定厚度的圆弧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7070912/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com