【Python】制作圆角图像的两种方案对比

需求:现有200*200像素JPG图片,需制作成129*129像素的PNG圆角头像。

两种方案。

 

方案1:直接将JPG图片,利用灰度图mask,叠加得到圆角PNG。

 

优势:方便,不需动手P个透明模板底图。

缺点:圆角锯齿非常明显,不能用于高清图,与PS使用剪切蒙版制作的圆角相比,锯齿明显。

效果图:左图为PS结果(129*129半径为10的圆角矩形作为蒙版),右图为代码执行结果。

可见,PS在处理圆角的时候,增加了过渡的效果,而Python程序则比较简陋,直接以锯齿状示人。所以直接在原图上用圆角代码硬切割效果不好(或者说还需要进一步用代码优化)。

Python硬切割圆角的代码如下,效果图及解释见我的另一篇博客

# 使用 PIL 将图象处理为圆角矩形
# Success
 
from PIL import Image, ImageDraw
 
radii=10
img = Image.open('flag.jpg')	
 
# 矩形图像转为圆角矩形
def circle_corner(img, radii):
	# 画圆(用于分离4个角)
	circle = Image.new('L', (radii * 2, radii * 2), 0)  # 创建黑色方形
	# circle.save('1.jpg','JPEG',qulity=100)
	draw = ImageDraw.Draw(circle)
	draw.ellipse((0, 0, radii * 2, radii * 2), fill=255)  # 黑色方形内切白色圆形
	# circle.save('2.jpg','JPEG',qulity=100)
 
	# 原图转为带有alpha通道(表示透明程度)
	img = img.convert("RGBA")
	w, h = img.size
 
	# 画4个角(将整圆分离为4个部分)
	alpha = Image.new('L', img.size, 255)	#与img同大小的白色矩形,L 表示黑白图
	# alpha.save('3.jpg','JPEG',qulity=100)
	alpha.paste(circle.crop((0, 0, radii, radii)), (0, 0))  # 左上角
	alpha.paste(circle.crop((radii, 0, radii * 2, radii)), (w - radii, 0))  # 右上角
	alpha.paste(circle.crop((radii, radii, radii * 2, radii * 2)), (w - radii, h - radii))  # 右下角
	alpha.paste(circle.crop((0, radii, radii, radii * 2)), (0, h - radii))  # 左下角
	# alpha.save('4.jpg','JPEG',qulity=100)
 
	img.putalpha(alpha)		# 白色区域透明可见,黑色区域不可见
	img.save('5.png','PNG',qulity=100)
 
	return img
 
img = circle_corner(img, radii)
img.save('result.png', 'png', quality = 100)

 

方案2:将圆角PNG与JPG叠加

 

优势:没有圆角锯齿,和PS效果相同,有过渡效果

缺点:需首先用PS剪切蒙版制作出129*129半径为10的黑底色圆角底图。

效果图:左图为PS结果(129*129半径为10的圆角矩形作为蒙版),右图为代码执行结果。

可以看到二者接近一致,Python效果不逊于PS(毕竟PNG底图还是PS导出的...)。反正,结论就是,本方法给适合制作高清头像。

代码很简单:

# mkicon
from PIL  import Image,ImageOps

img = Image.open('src.jpg').resize((129,129))

border = Image.open('b.png').convert('L')
invert = ImageOps.invert(border)
invert.save('invert.png')

img.putalpha(invert)
img.save('icon.png','PNG',qulity=100)

所需资源如图:

代码中 putalpha() 意为增加alpha透明通道,invert()将图像颜色反转, 至于 具体含义见pillow库官方手册

 

最后, 感谢国产截图软件 Snipaste 。文中图片均为博主首次使用Snipaste软件截取和编辑,国产的个人开发软件能有如此好用,真乃行业幸事。

 

这脑残CSDN审核,总是怀疑你发广告。我推荐个好用软件,半天不给我审核通过。你们审核机制就是这么审核么?我偶尔推荐一个东西就是广告?天天推才是广告好么。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qilei2010

送我一张彩票中了平分

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值