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 库,它已经内置了所有内容。重新发明轮子没有意义。可能已经内置了一个功能来完全按照您的意愿执行操作。
我在我的一个项目中使用 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 库,它已经内置了所有内容。重新发明轮子没有意义。可能已经内置了一个功能来完全按照您的意愿执行操作。