簡體   English   中英

Php Imagick:Pdf轉換為JPG的質量很差

[英]Php Imagick : Pdf are converted into JPG with Very bad quality

我在我的一個項目中使用Imagick擴展。 這對我來說是新的。

以下是我的代碼。

                $pdfPath = $config['upload_path'] . '/' . $fileName;
                $im = new imagick();
                $im->setResolution(300, 300);
                $im->readImage($pdfPath);
                $im->setImageFormat('jpeg');
                $im->setImageCompression(imagick::COMPRESSION_JPEG); 
                $im->setImageCompressionQuality(100);
                $im->writeImage($config['upload_path'] . '/' . str_replace('pdf', 'jpeg', $fileName));
                $im->clear();
                $im->destroy();

這使我的圖像質量很差。 所有文本都轉換為黑色背景。 圖像也顯示不正確。 參見下圖,該圖是從PDF轉換而來的。 在此處輸入圖片說明 請幫我。

您需要將圖像背景顏色設置為白色。 為此,我添加了$ im->-> flattenImages();選項。 在這里您可以找到解決方案https://www.binarytides.com/convert-pdf-image-imagemagick-php/

$pdfPath = $config['upload_path'] . '/' . $fileName;
$im = new imagick();
$im->setResolution(300, 300);
$im->readImage($pdfPath);
$im->setImageFormat('jpeg');
$im->setImageCompression(imagick::COMPRESSION_JPEG); 
$im->setImageCompressionQuality(100);
$im->writeImage($config['upload_path'] . '/' . str_replace('pdf', 'jpeg', $fileName));
$im->clear();
$im->destroy();

$pdfPath = $config['upload_path'] . '/' . $fileName;
$im = new imagick();
$im->setResolution(300, 300);
$im->readImage($pdfPath);
$im->setImageFormat('jpeg');
$im->setImageCompression(imagick::COMPRESSION_JPEG); 
$im->setImageCompressionQuality(100);
// -flatten option, this is necessary for images with transparency, it will produce white background for transparent regions
$im = $im->flattenImages();
$im->writeImage($config['upload_path'] . '/' . str_replace('pdf', 'jpeg', $fileName));
$im->clear();
$im->destroy();

我不確定這是否對您有幫助。

我認為問題出在以下事實:我們在從pdf輸入每英寸點的分辨率,並在制作jpeg時將其輸出為每英寸像素。

該代碼在看起來可以保持正確的寬高比的范圍內起作用,我可以確定出我用來測試的pdf。 但這不是很清楚,我看不懂任何文字。 這是我用的。

    $pdfPath = $config['upload_path'] . '/' . $fileName;
    $img = new imagick();
    $img->setResolution(300, 300);
    $img->readImage($pdfPath);  //Open after yuo set resolution.
    $img->setImageUnits(imagick::RESOLUTION_PIXELSPERINCH); //Declare the units for resolution.
    $img->setImageFormat('jpeg');
    $img->setImageCompression(imagick::COMPRESSION_JPEG);
    $img->setImageCompressionQuality(100);
    $img->writeImage($config['upload_path'] . '/' . str_replace('pdf', 'jpeg', $fileName));
    $img->clear();
    $img->destroy();

根據我的閱讀,您可能需要在計算機上安裝Ghostscript,從命令行執行腳本似乎是首選,並且可以提供更好的結果和性能。

我找到了這篇文章,看起來好像其中載有大量有關圖像格式以及imagemagik如何處理它們的信息。 PDF上有一些。

http://www.imagemagick.org/Usage/formats/#tiff

我可能會研究一個包含所有內置內容的PHP PDF庫。 重新發明輪子沒有意義。 可能已經內置了一個功能來完全執行您的嘗試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM