Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Imagemagick PDF tp JPG劣质PHP_Php_Pdf_Imagemagick_Jpeg_Imagick - Fatal编程技术网

Imagemagick PDF tp JPG劣质PHP

Imagemagick PDF tp JPG劣质PHP,php,pdf,imagemagick,jpeg,imagick,Php,Pdf,Imagemagick,Jpeg,Imagick,我有一个大约大于100mb的大pdf文件 我想将pdf页面逐页转换为jpg保存 我的php脚本工作得很好,但图像质量差,甚至质量设置为100。Jpg输出最大宽度设置为1024 每个文件大小约为2.5mb。我一直在寻找这个问题,但每次都能找到命令行解决方案。我必须使用php $file = 'e-magazine/1/ebook.pdf'; if($file === null && !file_exists($file)) { throw new \Exception('

我有一个大约大于100mb的大pdf文件

我想将pdf页面逐页转换为jpg保存

我的php脚本工作得很好,但图像质量差,甚至质量设置为100。Jpg输出最大宽度设置为1024

每个文件大小约为2.5mb。我一直在寻找这个问题,但每次都能找到命令行解决方案。我必须使用php

$file = 'e-magazine/1/ebook.pdf';

if($file === null && !file_exists($file)) {
    throw new \Exception('FILE NOT EXISTS');
}

$nop = new \Imagick($file);

for($i = 0; $i <= $nop->getnumberimages(); $i++) {
    $image_file = 'e-magazine/1/'.($i+1).'.jpg';

    $im = new \Imagick();

    $im->readimage($file.'['.$i.']');
    $im->setImageCompressionQuality(100);
    $im->setimageformat('jpeg');
    $im->resizeImage(1024, 0, \Imagick::FILTER_CATROM, 1);
    $im->writeimage($image_file);

    $tm = new \Imagick();
    $tm->readimage($image_file);
    $tm->setImageCompressionQuality(60);
    $tm->setimageformat('jpeg');
    $tm->resizeImage(200, 0, \Imagick::FILTER_CATROM, 1);
    $tm->writeimage('e-magazine/1/thumbnails/'.($i+1).'_thumb.jpg');
}
$file='e-magazine/1/ebook.pdf';
如果($file==null&&!file_存在($file)){
抛出新\异常('文件不存在');
}
$nop=new\Imagick($file);
对于($i=0;$i getnumberimages();$i++){
$image_file='e-magazine/1/'($i+1)。'.jpg';
$im=new\Imagick();
$im->readimage($file.['.$i.]');
$im->setImageCompressionQuality(100);
$im->setimageformat('jpeg');
$im->resizeImage(1024,0,Imagick::FILTER\u CATROM,1);
$im->writeimage($image\u文件);
$tm=new\Imagick();
$tm->readimage($image\u文件);
$tm->setImageCompressionQuality(60);
$tm->setimageformat('jpeg');
$tm->resizeImage(200,0,Imagick::FILTER\u CATROM,1);
$tm->writeimage('e-magazine/1/thumbnails/'($i+1)。“\u thumb.jpg”);
}

如何纠正文件质量?

PDF是基于矢量的,而不是基于位图的,因此在读取文件之前,您需要设置密度,以便告诉ImageMagick您需要什么样的大小,然后它可以在输入时相应地光栅化。在阅读图像之前,请尝试以下操作:

$im->setResolution(288,288);

然后试着把这个值降低到144,然后比较质量直到你有足够的质量。这是质量与处理时间和内存需求之间的折衷。数字越大,质量越高,但内存越长。

我的完整解决方案是补偿PNG透明alpha通道

$im = new imagick();
$im->setResolution(300, 300);
$im->readimage($pdf_path.'_0.pdf[0]');
$im->setImageResolution(300, 300);
$im->setImageBackgroundColor('#ffffff');
$im = $im->flattenImages();
$im->setImageFormat('jpeg');
$im->setImageCompression(imagick::COMPRESSION_JPEG); 
$im->setImageCompressionQuality(100);
$im->resizeImage(1200, 0,  imagick::FILTER_LANCZOS, 1);

您能给出一些pdf中的示例页面和您得到的输出吗?请帮助在尝试代码UnableToOpenBlob“sample.pdf”时出错:没有这样的文件或目录@error/blob.c/OpenBlob/3315请帮助在尝试有问题的代码UnableToOpenBlob“sample.pdf”时出错:没有这样的文件或目录@error/blob.c/OpenBlob/3315请帮助在尝试有关代码时出错,无法打开OpenBlob“sample.pdf”:没有这样的文件或目录@error/blob.c/OpenBlob/3315