You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python PIL叠加文字在RGBA白色背景图上颜色异常(显示透明),RGB斑马背景图正常的问题求助

Python PIL叠加文字在RGBA白色背景图上颜色异常(显示透明),RGB斑马背景图正常的问题求助

大家好,我最近在用PIL给图片叠加文字,之后用FPDF把叠加后的PNG转成PDF时遇到了个奇怪的问题:

  • 在斑马纹背景图上叠加文字,显示完全正常,文字是预期的黑色
  • 但在白色十字纹背景图上叠加同样的文字,文字看起来是透明的,颜色不对,转成PDF后也是这个情况

图片情况说明

  • 原始背景图:
    • 斑马纹PNG:模式为RGB
    • 白色十字纹PNG:模式为RGBA
  • 叠加文字后的效果:
    • 斑马纹背景+文字:文字颜色正常显示
    • 白色十字纹背景+文字:文字呈现透明感,无法正常看到黑色

我使用的叠加文字代码

fontuse = "D:/Ubuntusharefolder/CustomFonts/EnglishFonts/NotoSans-Medium.ttf"
font_color_bgra = (0,0,0,1)#black #(0,255,0,0)#green
font = ImageFont.truetype(fontuse, 32 * int(2), layout_engine=ImageFont.LAYOUT_RAQM)

src_img_use = np.array(Image.open(os.path.join(input_subfolder_path, filename) ) ) #(511, 898, 4)
print('src_img_use gen size: ',os.path.join(input_subfolder_path, filename), src_img_use.shape)
src_img_pil = Image.fromarray(src_img_use)
print('src_img_pil gen size: ', src_img_use.size)

img_pil_4dtxt = ImageDraw.Draw(src_img_pil)
img_pil_4dtxt.text(textpos,  subjectuse, font = font, fill = font_color_bgra) #fill = "black" ) 

src_img_pil.save(output_folder_final_path + '/updtxtimg/' + str(imgidx) + '_' + filename)
print('label_img_withtxt drawtext saved subjectuse idx', imgidx, subjectuse)

控制台日志对比

斑马纹背景图运行日志

> & C:/ProgramData/Anaconda3/python.exe ./code/txtoverimgv1.py
src_base imguse gen size:  (1920, 1080, 3)
input img file path: D:/testinput/order_image_1.png
src_imguse gen size:  (540, 360)
saved img in path: D:/testinput/updtxtimg/upd_order_image_1.png
<PIL.Image.Image image mode=RGB size=540x360 at 0x1293F0228E0>
saved_img1 done

白色背景图运行日志

> & C:/ProgramData/Anaconda3/python.exe ./code/txtoverimgv1.py
src_base imguse gen size:  (1920, 1080, 3)
input img file path: D:/testinput/order_image_1.png
src_imguse gen size:  (1920, 1080)
saved img in path: D:/testinput/updtxtimg/upd_order_image_1.png
<PIL.Image.Image image mode=RGBA size=1920x1080 at 0x2636D84B280>
saved_img1 done

能看到两张PNG图的模式不一样,一个是RGB一个是RGBA。我尝试在打开图片时强制转成RGB模式:

src_img_use = np.array(Image.open( input_subfolder_path + '/' + filename ).convert("RGB") ) 

这样处理后问题就解决了,但我想知道有没有更合适的方法,能直接正确处理RGBA格式的图片,而不用强制转成RGB?希望大家能帮我分析下问题出在哪,谢谢!

备注:内容来源于stack exchange,提问作者UserM

火山引擎 最新活动