2024-06-11 13:51:24 发布
网友
有没有办法用python做漂亮的圆角呢?目前在我的项目中使用了PIL和GD2。它们都有一个arc()方法,可以绘制一个四分圆,但是四分圆没有反锯齿,因此图像看起来很清晰。
arc()
有没有什么简单的方法可以使抗锯齿/平滑的圆角?
所以,好吧,我找到了解决办法。
我使用了之前提出的超采样方法,但是我发现图像变得模糊。所以,我不会提供完整的代码,但我会解释我的解决方案。
这可能看起来有点白痴,但我没有找到任何其他方法来做到这一点,而不涉及任何其他图书馆。
使用PIL,你可以在图像上画出白色(或任何你需要的颜色,包括透明的)角。然后你复制它。你现在应该有两个清晰的无反锯齿白色圆角图像。
现在您应该使用放大-缩小超级采样(有关详细信息,请参见上面的bobince答案)方法来使其中一个图像平滑(我使用了8倍缩放)。
现在你有了两个图像-一个有脆角,另一个有平滑角,但图像模糊。
你现在必须使脆图像的角透明,并将整个图像粘贴到平滑的图像上。我使用了PIL库中的Image.composite(crispy_Image,smooth_Image,crispy_Image)方法来完成这项工作。
喂!
你必须supersample:把弧线画成一个更大的图像并缩小它。
例如,一个白色、平滑的半透明右下16x16边框,带有4x4x正方形超级采样:
>>> import Image, ImageDraw >>> im= Image.new('RGBA', (16*4, 16*4), (255, 255, 255, 0)) >>> dr= ImageDraw.ImageDraw(im) >>> dr.pieslice((-64, -64, 64, 64), 0, 340, fill=(255,255,255,255)) >>> im= im.resize((16, 16), Image.ANTIALIAS) >>> im.save('border-se.png')
我通常使用图像作为遮罩,例如:
边框.png
alt text http://nadiana.com/sites/default/files/pil_tutorial/border.png
border = Image.open('border.png') source = border.convert('RGB') img.paste(source, mask=border)
可以调整遮罩的大小以适应所需的尺寸。只需确保使用Image.antialas方法。
你可以参考我不久前写的tutorial了解更多细节(无耻的插件)
如果你想对大小和半径有更多的控制,那么你需要使用arc或pieslice。我不知道你的情况,但我用PIL创建的这个圆角矩形看起来足够平滑:
alt text http://nadiana.com/sites/default/files/round_rectangle.png
这是我用来画的the code
也许你应该检查一下phatch:http://photobatch.wikidot.com/tutorials它是用Python和PIL编写的,可以对照片应用圆角。
以下链接指向用于应用圆角的代码: http://bazaar.launchpad.net/~stani/phatch/trunk/annotate/head:/phatch/actions/round.py
在我看来也很光滑。
所以,好吧,我找到了解决办法。
我使用了之前提出的超采样方法,但是我发现图像变得模糊。所以,我不会提供完整的代码,但我会解释我的解决方案。
这可能看起来有点白痴,但我没有找到任何其他方法来做到这一点,而不涉及任何其他图书馆。
使用PIL,你可以在图像上画出白色(或任何你需要的颜色,包括透明的)角。然后你复制它。你现在应该有两个清晰的无反锯齿白色圆角图像。
现在您应该使用放大-缩小超级采样(有关详细信息,请参见上面的bobince答案)方法来使其中一个图像平滑(我使用了8倍缩放)。
现在你有了两个图像-一个有脆角,另一个有平滑角,但图像模糊。
你现在必须使脆图像的角透明,并将整个图像粘贴到平滑的图像上。我使用了PIL库中的Image.composite(crispy_Image,smooth_Image,crispy_Image)方法来完成这项工作。
喂!
你必须supersample:把弧线画成一个更大的图像并缩小它。
例如,一个白色、平滑的半透明右下16x16边框,带有4x4x正方形超级采样:
我通常使用图像作为遮罩,例如:
边框.png
alt text http://nadiana.com/sites/default/files/pil_tutorial/border.png
可以调整遮罩的大小以适应所需的尺寸。只需确保使用Image.antialas方法。
你可以参考我不久前写的tutorial了解更多细节(无耻的插件)
如果你想对大小和半径有更多的控制,那么你需要使用arc或pieslice。我不知道你的情况,但我用PIL创建的这个圆角矩形看起来足够平滑:
alt text http://nadiana.com/sites/default/files/round_rectangle.png
这是我用来画的the code
也许你应该检查一下phatch:http://photobatch.wikidot.com/tutorials它是用Python和PIL编写的,可以对照片应用圆角。
以下链接指向用于应用圆角的代码: http://bazaar.launchpad.net/~stani/phatch/trunk/annotate/head:/phatch/actions/round.py
在我看来也很光滑。
相关问题 更多 >
编程相关推荐