set density parameter for imagick with php

12,826

Solution 1

You need to set Resolution before you read the file.

$im = new imagick();
$im->setResolution(200,200);
$im->readImage(__DIR__ . DIRECTORY_SEPARATOR.$PDFName.'['.$i.']');

Than, the result will be perfect.

Hope this help someone.

Solution 2

From the manual http://php.net/manual/en/imagick.setresolution.php

Imagick::setResolution() must be called before loading or creating an image.

See this answer Pdf to image using php-imagick api

Share:
12,826
dechiffre
Author by

dechiffre

Updated on June 13, 2022

Comments

  • dechiffre
    dechiffre almost 2 years

    I want to convert a pdf page to a png image with Imagick.

    I tried with PHP, but the image quality was very low.
    When I tried with command line, the result was perfect.

    PHP code

    $im = new imagick( __DIR__ . DIRECTORY_SEPARATOR.$PDFName.'['.$i.']' );  
    $params = $im->identifyImage();
    $width = $params['geometry']['width']*1;
    $height = $params['geometry']['height']*1;
    $im->setResolution(400,400);
    $im->resizeImage($width ,$height, imagick::FILTER_SINC, 1, true);
    $im->writeImage(__DIR__ . DIRECTORY_SEPARATOR.'pdf_pages\\'.$i.'.png'); 
    $im->clear(); 
    $im->destroy();
    

    Command line code

    convert -density 400 a.pdf -resize 25% -a.png
    

    PHP code (2nd attempt)

    $im = new imagick( __DIR__ . DIRECTORY_SEPARATOR.$PDFName.'['.$i.']' );  
    $im->setOption('density','400x400');
    $im->setOption('resize','25%');
    $im->writeImage(__DIR__ . DIRECTORY_SEPARATOR.'pdf_pages\\'.$i.'.png'); 
    $im->clear(); 
    $im->destroy();
    

    Still bad results.

    What can I do? I want to use the density parameter in my PHP code, but how?

    Output with PHP enter image description here

    Output with command line enter image description here