[reportlab-users] RGBA Colors
Kevin D Smith
Kevin.Smith at sixquickrun.com
Tue Nov 24 12:17:24 EST 2009
On Nov 24, 2009, at 10:53 AM, Robin Becker wrote:
> Kevin D Smith wrote:
>> A little while ago I asked if there was a way to get RGBA colors
>> (like in CSS3) where the A component is an alpha value to set
>> transparency. While doing some searching last night, I realized
>> that the svn version of ReportLab already has alpha support;
>> however, it didn't go quite as far as I had hoped. Methods were
>> added to the canvas to set the fill and stroke opacity, which is
>> nice, but if you are using Platypus, you don't have access to them.
>> I messed around with the code a bit in textobject.py and colors.py
>> to add alpha arguments to all of the color methods as well as an
>> alpha component to rgb and cmyk colors. With the attached patch,
>> you can specify colors with an alpha value that can be used in
>> Platypus or anywhere else colors are used. I would like this patch
>> to be considered for official use so that I don't have to remember
>> to add this support for my projects. Does anyone know what that
>> would take?
> .........
>
> This looks like a nice patch, but there might be hidden problems.
> The opacity patch was contributed and one of the approaches
> considered was that opacity should go into the colour objects.
> However, since opacity is actually stored on the canvas there are
> problems related to using a mixture of colours containing alpha and
> non-alpha colours.
>
> In the colour+a model setting a colour with a in [0,1] means an
> action is carried out on the canvas.
>
> So
>
> setFill(red+alpha=0.5) ==> canvas alpha = 0.5
>
> follow that by
>
> setFill(black+alpha=None) canvas alpha remains 0.5
>
> which I would argue is unexpected. Forgive me if your patch doesn't
> exactly follow this model, but that's what my quick scan seems to
> imply.
>
> We seem to need to get the incoming colour+alpha=None to restore the
> appropriate alpha value. The problem then is what that value should
> be; who owns the alpha value?
>
> I'm not against this idea, I did already consider such a mechanism.
> Perhaps others would like to comment.
>
> One other point is that it is very easy to make a flowable that
> allows platypus to mess with canvas properties.
> --
> Robin Becker
I see your point about alpha not being reset. I was using the None
value in the methods and the colors themselves so that they wouldn't
force a PDF document to be versioned as 1.4 unless alpha was
explicitly used. If I didn't care about that fact, I would have set
alpha to 1 in all of those places. But it is a bit problematic making
it both work properly and be backwards compatible.
As far as writing flowables to use the canvas properties, at the
moment, I use very basic components of platypus like paragraphs and
tables. I would prefer not to have to write customized ones just to
get alpha values in the colors.
Kevin D Smith
Kevin.Smith at sixquickrun.com
More information about the reportlab-users
mailing list