使用PHP和ImageMagick将PDF转换为高质量JPG

7

我快要抓狂了。

我有一个300 DPI的PDF文件,想将其转换为一个尺寸为2550x3300的300 DPI的JPG文件。我被告知 ImageMagick 可以实现这一点,所以我使用 ImageMagick 进行操作,但是它只返回一个大小约为原始PDF大小1/5的JPG。

这不是源图像的问题——我已经使用了几个高质量的PDF文件,它们都存在同样的问题。

在 StackOverflow 上搜索了很多解决方案后,我想到了以下使用方法:

$im = new imagick($srcimg);
$im->setImageResolution(2550,3300);
$im->setImageFormat('jpeg');
$im->setImageCompression(imagick::COMPRESSION_JPEG); 
$im->setImageCompressionQuality(100);
$im->writeImage($targetimg);
$im->clear();
$im->destroy();

但它仍然不起作用。 我也尝试使用 $img->resizeImage() 来调整 JPG 的大小,但如果是正确的尺寸,它的质量就会非常糟糕。 完全无头绪。感谢您的帮助!
2个回答

12

如果我先使用setImageResolution,那么该类尚未被声明。如果我这样做$im = new imagick(),然后$im->setImageResolution,然后$im->readImage($srcimg),我会得到这个错误:Fatal error: Uncaught exception 'ImagickException' with message 'Can not process empty Imagick object' in ... - Brian Mayer
1
尝试在空对象上使用 $im->setResolution()(请参见手册中有关 Imagick::setResolution 的注释)。 - dakdad
是的 - 我刚刚做到了这一点,并且我让它工作了,尽管只需要300,300。诀窍是改变顺序并使用setResolution而不是setImageResolution。谢谢! - Brian Mayer
1
这是非常正确的,谢谢。大家重复一遍:在读取图像之前设置分辨率。此外,使用setResolution等方法而不是setImageResolution,否则会出错。这让我有些困惑。 - coupdecoop

10

这将是正确的方式,质量会得到提高。

$im = new imagick();
$im->setResolution(300, 300);
$im->readImage($srcimg);
$im->setImageFormat('jpeg');
$im->setImageCompression(imagick::COMPRESSION_JPEG); 
$im->setImageCompressionQuality(100);
$im->writeImage($targetimg);
$im->clear();
$im->destroy();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接