python:getmask库报错

原问题:getmask2报错:

AttitubuteError:‘ImageFont’ object has no attibute ‘getmask2

详细报错细节:

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)

解决方法1
下载需要字体
例如:在代码中需要Arial.ttf ,下载Arial.ttf放在/home/XXX/.config/XXX/下

仍然报错

AttitubuteError:‘ImageFont’ object has no attibute ‘getmask2,
但是上述中详细报错中的问题已经解决

解决方法2:
getmask2() 换成 getmask()

两个函数中的参数不同,仍然会报错:

too many values to unpack

原因:

源码

getmask(text, mode='', direction=None, features=None, language=None, stroke_width=0, anchor=None, ink=0, start=None)[source]

getmask2(text, mode='', direction=None, features=None, language=None, stroke_width=0, anchor=None, ink=0, start=None, *args, **kwargs)[source]

根据实际情况来调整函数中的参数使两个函数中的参数达到一致
或者,在调用时,根据输入的参数结构来调整

最后,如果在虚拟环境中需要更新环境才能生效,不在虚拟环境中忽略该提示

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误是由于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() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值