本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,,版权归原作者所有,如有问题请及时联系我们以作处理
原创:蓝小白1024
想要获取更多Python学习资料,了解更多关于Python的知识,可以加Q群630390733踊跃发言,大家一起来学习讨论吧!
Python图像处理-把一个方形图片以圆形图的样式贴到另一张图上面的指定位置
使用 PIL 模块, 在生成个人的海报页面, 或者其他页面, 需要在这张海报上面贴上一个圆形的图片, 就好比圆形的个人头像什么的.
两张底图
- 这个是准备转换为圆形的图片
head_image.jpg
-
- 底图(820*512)
- 1608690598-1238475.jpg
效果图(成品图)
- 吧head_image.jpg贴到底图的右上角, 并显示为圆形大小150*150
实现代码
# 导入需要的包
from PIL import Image, ImageDraw
# 底图
base_image = Image.open("./image/1608690598-1238475.jpg")
width, height = base_image.size # 底图的宽和高
# 生成一张尺寸和底图尺寸一样 背景色为白色的 "模板"
bg = Image.new('RGB', (width, height), color=(255,255,0,0))
# bg.paste(base_image, (0, 0))
# 头像尺寸
avatar_size = (150, 150)
# 加载头像文件到 avatar
avatar = Image.open("./head_image.jpg")
# 把头像的尺寸设置成我们需要的大小, 使用resize 调整图片的尺寸
avatar = avatar.resize(avatar_size)
# 新建一个蒙板图, 注意必须是 RGBA 模式
mask = Image.new('RGBA', (150, 150), color=(0,0,0,0))
# mask.paste(avatar, (0, 0))
# 画一个圆
mask_draw = ImageDraw.Draw(mask)
mask_draw.ellipse((0,0, avatar_size[0], avatar_size[1]), fill=(159,159,160))
# 这里保存可以生成一个蒙版一个正方形中间有一个圆
# mask.save("./image/hello_pil_image.png", "PNG")
# 吧背景图 1608690598-1238475.jpg 贴到生成的空白模板中
bg.paste(base_image, (0, 0))
# # 计算头像位置 (width-150, 0)就是右上角减去圆形图的宽
# 在把 转换好的尺寸的 head_image.jpg 贴到 指定位置, - PIL 模块写入东西的时候都是从左上角开始
# 第三个参数是生成好的蒙版图
bg.paste(avatar, (width-150, 0), mask)
# 保存图片
bg.save("./image/hello_pil.png", "PNG")
# GUI环境可以使用下面方式直接预览
# bg.show()
PIL 模块写入东西的时候都是从左上角开始, 所以当写入一个东西的时候, 想要写入指定位置, 要先计算写入东西的尺寸, 然后再计算写入东西的左上角所在的坐标