如何将qrcode.image.pil.PilImage转换为PIL.Image.Image?
解决CTkImage与qr_code库生成图片的类型不兼容问题
问题原因
qr_code库生成的PilImage是该库自定义的子类,尽管它继承自PIL的Image.Image,但CustomTkinter的CTkImage对类型检查要求严格,直接传入会触发类型不匹配错误。
解决方案
只需将qr_code生成的PilImage显式转换为PIL原生的Image.Image实例即可,提供两种可行方法:
方法1:通过convert方法转换
利用PIL图片的convert()方法返回原生Image对象:
import qrcode from PIL import Image import customtkinter as ctk # 生成二维码 qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4) qr.add_data("你的二维码内容") qr.make(fit=True) # 生成qr_code的PilImage对象 qr_pil_img = qr.make_image(fill_color="black", back_color="white") # 转换为PIL原生Image对象 pil_img = qr_pil_img.convert("RGB") # 创建CTkImage并使用 ctk_img = ctk.CTkImage(light_image=pil_img, size=(200, 200)) label = ctk.CTkLabel(master=app, image=ctk_img, text="") label.pack()
方法2:直接获取PilImage内部的原生Image实例
qr_code的PilImage类内部维护了一个原生的PIL Image对象,可直接通过image属性获取:
# 生成qr_code的PilImage对象后,直接取内部image属性 pil_img = qr_pil_img.image # 创建CTkImage并使用 ctk_img = ctk.CTkImage(light_image=pil_img, size=(200, 200))
两种方法都能满足CTkImage的类型要求,任选其一即可。
内容的提问来源于stack exchange,提问作者Adrian8115
相关产品推荐
相关产品推荐

