PDF to JPG conversion using PHP

后端 未结 5 930
后悔当初
后悔当初 2020-12-13 13:37

I\'m trying to convert PDF to IMG (JPG) with help PHP.

I\'m using imagick extension.

this is my code

    $fp_pdf = fopen($pdf, \'rb\');

             


        
相关标签:
5条回答
  • 2020-12-13 14:18

    As mentioned before, setting the resolution before reading the file does the trick:

    $fp_pdf = fopen($pdf, 'rb');
    
    $img = new imagick(); // [0] can be used to set page number
    $img->setResolution(300,300);
    $img->readImageFile($fp_pdf);
    $img->setImageFormat( "jpg" );
    $img->setImageCompression(imagick::COMPRESSION_JPEG); 
    $img->setImageCompressionQuality(90); 
    
    $img->setImageUnits(imagick::RESOLUTION_PIXELSPERINCH);
    
    $data = $img->getImageBlob(); 
    
    0 讨论(0)
  • 2020-12-13 14:28

    You could use imagemagick through exec() or similar, the shell arguments are much less verbose than the PHP extension.

    $pdf_file = escapeshellarg( "mysafepdf.pdf" );
    $jpg_file = escapeshellarg( "output.jpg" );
    
    $result = 0;
    exec( "convert -density 300 {$pdf_file} {$jpg_file}", null, $result );
    
    // at this point $result should == 0 if the conversion was successful
    

    It's the "-density" (which sets the DPI to read the source file as) option that specifically fixes your problem.

    Also imagemagick by default uses a -quality setting of 92 for JPEG writing in most cases - so you probably don't need to explicitly declare it.

    0 讨论(0)
  • 2020-12-13 14:28

    You have to call setResolution before reading the image. Otherwise imagemagick will use the default system dpi.

    0 讨论(0)
  • 2020-12-13 14:34

    ImageMagick uses GhostScript to process JPEGs, so you'd do better to exec GhostScript directly, which would be much more efficient and give you more control. It would also be only 1 exec statement, instead of playing around with the IMagick functions.

    0 讨论(0)
  • 2020-12-13 14:36

    It looks like you missed two setters:

    Imagick::setImagePage() http://www.php.net/manual/en/function.imagick-setimagepage.php

    And:

    Imagick::setImageExtent() http://www.php.net/manual/en/function.imagick-setimageextent.php

    In order to get the correct parameters for these functions, you may try the following:

    $fp_pdf = fopen($pdf, 'rb');
    $params=array();
    
        $img = new imagick(); 
        $img->readImageFile($fp_pdf);
        /*my modification: */$img->setImageUnits(imagick::RESOLUTION_PIXELSPERINCH);
        /*my modification: */$params=$img->identifyImage();
        $img->setImageFormat( "jpg" );
        $img->setImageCompression(imagick::COMPRESSION_JPEG); 
        $img->setImageCompressionQuality(90); 
        /*my modification: */$img->setPage($params['geometry']['width'], $params['geometry']['height'], 0, 0)
        /*my modification: */$img->setResolution($params['resolution']['x'], $params['resolution']['y']);
        $img->setImageUnits(imagick::RESOLUTION_PIXELSPERINCH);
        $data = $img->getImageBlob();
    

    If you find that some others attributes should be set, then let me show you the information that $params is holding. It may proof useful for you:

    $params=array(
        [imageName],
        [format], 
        [geometry] => Array
            (
                [width]
                [height] 
            )
        [type], 
        [colorSpace], 
        [resolution],
            (
                [x] 
                [y]
            )
    
        [units],
        [fileSize],
        [compression],
        [signature], 
    

    )

    To be honest, I'm not completely sure if this will work. Is just a try in order to help you. I sincerely hope it does.

    0 讨论(0)
提交回复
热议问题