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




