Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I improve ReportLab image quality?

I'm building a label printer. It consists of a logo and some text, not tough. I have already spent 3 days trying to get the original SVG logo to draw to screen but the SVG is too complex, using too many gradients, etc.

So I have a high quality bitmapped logo (as a JPG or PNG) and I'm drawing that on a ReportLab canvas. The image in question is much larger than 85*123px. I did this hoping ReportLab would embed the whole thing and scale it accordingly. Here's how I'm doing it:

canvas.drawImage('logo.jpg', 22+xoffset, 460, 85, 123)

The problem is, my assumption was incorrect. It seems to scale it down to 85*123px at screen resolution and that means when it's printed, it doesn't look great.

Does ReportLab have any DPI commands for canvases or documents so I can keep the quality sane?

like image 205
Oli Avatar asked Jan 17 '12 11:01

Oli


2 Answers

Having previously worked at the ReportLab company, I can tell you that raster images do not go through any automatic resampling/downscaling while being included in the PDF. The 85*123 dimensions you are using are not pixels, but points (pt) which are a physical unit like millimetres or inches.

I would suggest printing the PDF with different quality images to confirm this or otherwise zooming in very, very far using your PDF viewer. It will always look a bit fuzzy in a PDF viewer as the image is resampled twice (once in the imaging software and then again to the pixels available to the PDF viewer).

This is how I would calculate what size in pixels to make a raster image for it to print well at a given physical size:

Assume I want the picture to be 2 inches wide, there are 72 points in a inch so the width in my code would be 144. I know that a good crisp resolution to print at is 300dpi (dots per inch) so the raster image is saved at 600px wide.

like image 66
Damian Moore Avatar answered Sep 22 '22 07:09

Damian Moore


One option that I thought of while writing the question is: increase the size of the PDF and let the printer sort things out.

If I just multiplied all my numbers by 5 and the printer did manage to figure things out, I'd have close to 350DPI... But I'm making quite an assumption.

like image 45
Oli Avatar answered Sep 20 '22 07:09

Oli