Making a colorful pdf fax-friendly

IMagick is a native PHP extension to create and modify images using the ImageMagick API. ImageMagick Studio LLC did not write nor does it maintain the IMagick extension, however, IMagick users are welcome to discuss the extension here.
Post Reply
senty
Posts: 3
Joined: 2018-01-27T13:16:23-07:00
Authentication code: 1152

Making a colorful pdf fax-friendly

Post by senty »

I am trying to make a colorful pdf fax-friendly (convert to gray-scale and make the size A4). How Twilio does it for fax is very impressive, and ultimately I am trying to achieve it.

This is the original pdf, ie my input.pdf (please notice that resolution is 120x120):
https://drive.google.com/open?id=1Ppw79 ... NtD3bIqYOn_

When I give the above pdf to Twilio, this is how they convert it (which is very impressive): https://drive.google.com/open?id=1YdC9e ... EJ-4URsS8P

Using the below code, I achieved something close to Twilio's one, but mine is getting a bit blurry (whereas Twilio's one is crystal sharp).
The output pdf: https://drive.google.com/file/d/1bZhUuq ... sp=sharing

Code: Select all

 $imagick = new \Imagick();
 $imagick->readImage($path);
 $imagick->resizeImage(595, 842, \Imagick::FILTER_CATROM, 1, true);
 $imagick->setBackgroundColor(new \ImagickPixel('white'));

 $imagick->quantizeImage(255, \Imagick::COLORSPACE_GRAY, 1, TRUE, FALSE);
 $imagick->orderedPosterizeImage('o8x8');

 $w = $imagick->getImageWidth();
 $h = $imagick->getImageHeight();

 $imagick->extentImage ( 595 , 843 , ($w-595)/2, ($h-843)/2 );
 $imagick->setImageFormat('pdf');

 $imagick->writeImage($endpath);
User avatar
fmw42
Posts: 25562
Joined: 2007-07-02T17:14:51-07:00
Authentication code: 1152
Location: Sunnyvale, California, USA

Re: Making a colorful pdf fax-friendly

Post by fmw42 »

You need to set a large density before reading the input PDF, such as 600. See setImageResolution in Imagick. I gave you the same suggestion one stack overflow.
senty
Posts: 3
Joined: 2018-01-27T13:16:23-07:00
Authentication code: 1152

Re: Making a colorful pdf fax-friendly

Post by senty »

Yes, I saw your answer on StackOverflow, and all your answers were very helpful, however;

Code: Select all

 $imagick->readImage($path);
 $imagick->Imagick::setImageResolution( 600, 600 )
 $imagick->resizeImage(595, 842, \Imagick::FILTER_CATROM, 1, true);
If I try `$imagick->Imagick::setImageResolution( 600, 600 );`, it ends up generating a PDF in a size of '0.99 x 1.40 in' (so not an A4 size), whereas without that line, the pdf size is "8.26 x 11.71 in" or Twilio's export is "8.50 x 11 in".

What I mean is using 'setImageResolution' manipulates the extending image size
User avatar
fmw42
Posts: 25562
Joined: 2007-07-02T17:14:51-07:00
Authentication code: 1152
Location: Sunnyvale, California, USA

Re: Making a colorful pdf fax-friendly

Post by fmw42 »

Keep the setImageResolution (600,600) before reading the input. But after resizeImage, set the density back to 72 (dpi) or whatever when divided into the pixel size 595x842 will give your desired A4 inches.

See https://www.imagemagick.org/script/comm ... s.php#page

595/72=8.27
842/72=11.7

You can set it to different densities for Width and Height in setImageResolution so that you get the exact dimension in inches that you want.

The density 600 is needed before reading the PDF so that it renders at high resolution without blurring. The density 72 resets the density for the given pixel dimensions 595*842 so that you get your desired size in inches for the output.
senty
Posts: 3
Joined: 2018-01-27T13:16:23-07:00
Authentication code: 1152

Re: Making a colorful pdf fax-friendly

Post by senty »

Can you please show me in the snippet where to add it? I couldn't understand 'before reading the input' and 'after resize, set the density back to 72 (dpi)'.

Code: Select all

$imagick->readImage($path);
 $imagick->Imagick::setImageResolution( 600, 600 ) // as far as I understand, this is at the right place
 $imagick->resizeImage(595, 842, \Imagick::FILTER_CATROM, 1, true);
// but what to do here? how to set it back to 72dpi? 
User avatar
fmw42
Posts: 25562
Joined: 2007-07-02T17:14:51-07:00
Authentication code: 1152
Location: Sunnyvale, California, USA

Re: Making a colorful pdf fax-friendly

Post by fmw42 »

$imagick = new \Imagick();
$imagick->Imagick::setImageResolution( 600, 600 );
$imagick->readImage($path);
$imagick->resizeImage(595, 842, \Imagick::FILTER_CATROM, 1, true);
$imagick->setBackgroundColor(new \ImagickPixel('white'));

$imagick->quantizeImage(255, \Imagick::COLORSPACE_GRAY, 1, TRUE, FALSE);
$imagick->orderedPosterizeImage('o8x8');

$w = $imagick->getImageWidth();
$h = $imagick->getImageHeight();

$imagick->extentImage ( 595 , 843 , ($w-595)/2, ($h-843)/2 );
$imagick->Imagick::setImageResolution( 72, 72 );
$imagick->setImageFormat('pdf');

$imagick->writeImage($endpath);
atariZen
Posts: 25
Joined: 2016-02-09T12:58:42-07:00
Authentication code: 1151

Re: Making a colorful pdf fax-friendly

Post by atariZen »

Is that PERL? I can't read it. Would someone please post the answer in commandline format?

Thanks!
User avatar
fmw42
Posts: 25562
Joined: 2007-07-02T17:14:51-07:00
Authentication code: 1152
Location: Sunnyvale, California, USA

Re: Making a colorful pdf fax-friendly

Post by fmw42 »

The code above is for PHP Imagick.

Please identify your IM version and platform, since syntax may differ. Also post an example PDF to some free hosting service such as dropbox.com that will not change the format (or zip the PDF). The explain exactly what you want to do relative to your input PDF regarding background, output size, format, etc.

See the top-most post in this forum "IMPORTANT: Please Read This FIRST Before Posting" at http://www.imagemagick.org/discourse-se ... f=1&t=9620

For novices, see

http://www.imagemagick.org/discourse-se ... f=1&t=9620
http://www.imagemagick.org/script/comma ... essing.php
http://www.imagemagick.org/Usage/reference.html
http://www.imagemagick.org/Usage/
Post Reply