[英]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();
您需要將圖像背景顏色設置為白色。 為此,我添加了$ 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.