Python之PIL库中的ImageDraw对象提示 ‘ImageFont‘ object has no attribute ‘getmask2‘

最近在B站上看到一个比较有意思的视频:《怎么把自己的照片变成抖音网红字符画,用python手把手教你》,链接如下:https://www.bilibili.com/video/BV1XA411j7yz/?spm_id_from=333.788.recommend_more_video.-1

在动手实践时,遇到了两个问题:

1、AttributeError: 'ImageFont' object has no attribute 'getmask2'

2、UnicodeEncodeError: 'latin-1' codec can't encode character '\u559c' in position 0: ordinal not in range(256)

后来在github上搜到了解决方案,估计这个问题对于墙内的码友不太号搜索,特此记录下:

只需要在ImageDraw.Draw.txt()函数中指定位置参数font即就可以。我的部分代码截图如下:

谨记那个font的初始化字体一定是要支持汉语的

github上的参考地址如下:https://github.com/python-pillow/Pillow/issues/2779

拉到最后一条回复即可看到相关内容

这个错误是由于ImageFont对象没有getmask2属性引起的。getmask2()方法已经在Pillow 7.0.0版本中被弃用,因此如果你使用的是Pillow 7.0.0或更高版本,你需要使用getmask()方法来代替getmask2()方法。如果你使用的是Pillow 6.0.0或更低版本,你可以使用getmask2()方法。你可以通过检查你的Pillow版本来确定你应该使用哪个方法。你可以使用以下代码来检查你的Pillow版本: ```python import PIL print(PIL.__version__) ``` 如果你的Pillow版本是7.0.0或更高版本,你需要使用getmask()方法来代替getmask2()方法。以下是一个使用getmask()方法的例子: ```python from PIL import Image, ImageDraw, ImageFont # 创建一个Image对象 image = Image.new('RGB', (200, 100), color = (255, 255, 255)) # 获取一个字体对象 font = ImageFont.truetype('arial.ttf', 36) # 获取一个Draw对象 draw = ImageDraw.Draw(image) # 在图像上绘制文本 text = 'Hello, World!' textwidth, textheight = draw.textsize(text, font) x = (image.width - textwidth) / 2 y = (image.height - textheight) / 2 draw.text((x, y), text, font=font, fill=(0, 0, 0)) # 获取图像的alpha通道 alpha = image.split()[-1] # 获取字体的掩码 mask = font.getmask(text, mode='L') # 获取字体的掩码的alpha通道 mask_alpha = mask.convert('1').convert('L') # 将字体的掩码的alpha通道与图像的alpha通道相乘 new_alpha = alpha.point(lambda i: i * (mask_alpha.getpixel((i % mask_alpha.width, i // mask_alpha.width)) / 255)) # 将新的alpha通道与原始图像合并 image.putalpha(new_alpha) # 显示图像 image.show() ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值