[reportlab-users] Implementation of drawImage anchoring
    Yoann Roman 
    yroman-reportlab at altalang.com
       
    Thu Aug 28 13:40:56 EDT 2008
    
    
  
Robin Becker wrote...
> >> I've been reading (and re-reading) the doc for drawImage in Canvas, and
> >> I'm pretty sure the implementation doesn't match what's described. To 
> >> quote:
> >>
> >> [snip]
> >>
> >> I've got a patch for lib.boxstuff to get it to do what's stated in the
> >> doc, but I wanted to verify whether the doc or the implementation was
> >> incorrect. In my case, I needed what was stated in the doc.
> > 
> > Anyone have any ideas on this? If the implementation is correct, what's 
> > the proper way to get the behavior described in the doc (i.e., centering 
> > an image within a box anchored at x, y)?
> 
> So your original box corners are
> 
> (x,y), (x+width,y+width)
> 
> you wish to place the centre of the image at the centre of the box so use 
> anchor 'c' and then use x+width*0.5, y+height*0.5; that should place the 
> centre of the image on the centre of the original box.
> 
> If the image or object doesn't support anchoring then you'll need to know 
> the size of the image or box in order to display it properly using some 
> other anchor point. It seems that drawImage does so you should be OK here.
So centering the image was a poor example. What I was looking for was a 
generic way to anchor an image anywhere in a *virtual* box with a given 
(x, y) and (width, height). As I understood it, that's what drawImage's 
anchor was for.
As an alternate example, if I want to anchor my (100, 50) image in the 
northeast corner of a (200, 200) box, I'd expect to do this:
    canvas = Canvas('canvas.pdf', pagesize=LETTER)
    canvas.rect(0, 0, 200, 200, fill=1) # for illustration only
    size = canvas.drawImage('test.png', 0, 0, 200, 200, \
                            preserveAspectRatio=1, anchor='ne')
    canvas.save()
In this case, the image ends up off the page with *its* northeast corner 
anchored at (0, 0). To get it right, the (x, y) for drawImage would have 
to be (200, 250) or (width, height + imgHeight).
I could wrap all my drawImage calls to translate the (x, y) coordinates 
to the appropriate values for each anchor, but I'd need to know the 
dimensions of the image, which I don't get back until *after* drawImage. 
It feels like I'd need to duplicate a lot of drawImage's image loading code 
to do this translation.
Am I just missing something?
Thanks,
-- 
Yoann Roman
    
    
More information about the reportlab-users
mailing list