我从SciKit-Image中找到了此功能,该功能可让您将正常或抗锯齿的线条绘制到numpy数组中。也可以选择创建多边形,但是这些多边形不会抗锯齿
由于没有绘制粗线(宽度大于一个像素)的功能,因此我考虑绘制多边形,并在边缘上绘制线以具有抗锯齿效果。但是我认为这不是最好的解决方案。
这就是为什么我想问,是否有更好的选择将粗的抗锯齿线绘制到一个numpy数组中(可能带有matplotlib或某物)?
import numpy as np
from PIL import Image
from PIL import ImageDraw
scale = 2
width, height = 300, 200
img = Image.new('L', (width, height), 0)
draw = ImageDraw.Draw(img)
draw.line([(50, 50), (250, 150)], fill=255, width=10)
img = img.resize((width//scale, height//scale), Image.ANTIALIAS)
img.save('/tmp/antialiased.png')
antialiased = np.asarray(img)
print(antialiased[25:35, 25:35])
# [[252 251 250 255 255 237 127 18 0 0]
# [255 251 253 254 251 255 255 237 127 18]
# [184 255 255 254 252 254 251 255 255 237]
# [ 0 72 184 255 255 254 252 254 251 255]
# [ 1 0 0 72 184 255 255 254 252 254]
# [ 0 3 1 0 0 72 184 255 255 254]
# [ 0 0 0 3 1 0 0 72 184 255]
# [ 0 0 0 0 0 3 1 0 0 72]
# [ 0 0 0 0 0 0 0 3 1 0]
# [ 0 0 0 0 0 0 0 0 0 3]]
img = Image.new('L', (width//scale, height//scale), 0)
draw = ImageDraw.Draw(img)
draw.line([(25, 25), (125, 75)], fill=255, width=5)
img.save('/tmp/aliased.png')
aliased = np.asarray(img)
print(aliased[25:35, 25:35])
# [[255 255 255 255 255 255 255 0 0 0]
# [255 255 255 255 255 255 255 255 255 0]
# [255 255 255 255 255 255 255 255 255 255]
# [ 0 0 255 255 255 255 255 255 255 255]
# [ 0 0 0 0 255 255 255 255 255 255]
# [ 0 0 0 0 0 0 255 255 255 255]
# [ 0 0 0 0 0 0 0 0 255 255]
# [ 0 0 0 0 0 0 0 0 0 0]
# [ 0 0 0 0 0 0 0 0 0 0]
# [ 0 0 0 0 0 0 0 0 0 0]]
Run Code Online (Sandbox Code Playgroud)
antialiased.png:
aliased.png
| 归档时间: |
|
| 查看次数: |
1247 次 |
| 最近记录: |