Reportlab RGBA颜色代码异常:RGB参数不生效仅Alpha值起作用
解决Reportlab Color类RGB参数失效、仅Alpha生效的问题
你遇到的问题是因为Reportlab的Color类默认接收0-1范围内的浮点RGB值,而非0-255的整数。当你传入200、100这类超过1的数值时,会被自动截断为1,最终得到RGB(1,1,1)的白色,加上0.5的透明度就变成了半透明白色。
两种修正方案:
方案1:将RGB值转换为0-1的浮点数
把每个RGB分量除以255,转换成浮点范围:
from reportlab.lib.colors import Color, black from reportlab.pdfgen.canvas import Canvas # 转换为0-1范围的浮点值 color1 = Color(200/255, 100/255, 100/255, 0.5) c = Canvas("test.pdf", pagesize=(400,200)) c.setFillColor(black) c.rect(0, 0, 100, 100, fill=1) c.setFillColor(color1) c.rect(0, 0, 50, 50, fill=1) c.save()
方案2:指定space='rgb'参数,直接使用0-255数值
通过显式指定颜色空间为rgb,可以直接传入0-255的整数:
from reportlab.lib.colors import Color, black from reportlab.pdfgen.canvas import Canvas # 指定space参数为rgb,支持0-255数值 color1 = Color(red=200, green=100, blue=100, alpha=0.5, space='rgb') c = Canvas("test.pdf", pagesize=(400,200)) c.setFillColor(black) c.rect(0, 0, 100, 100, fill=1) c.setFillColor(color1) c.rect(0, 0, 50, 50, fill=1) c.save()
原理说明
Reportlab的Color类默认使用'deviceRGB'颜色空间,要求RGB值为0-1的浮点数;而当指定space='rgb'时,会使用sRGB颜色空间,支持0-255的整数输入,内部会自动转换为浮点值。
内容的提问来源于stack exchange,提问作者Rusca8
相关产品推荐
相关产品推荐

