我在尝试使用imagick和PHP(5.5)将PDF转换为图像时遇到问题。一切正常我可以为PDF中的每个页面创建一个图像,但我遇到了以下问题。并且已经被困在这里好几天了。
代码如下:
$file_name = basename($file_name);
$img = new imagick();
$img->readImage($dir.'/'.$file_name);
$img->setImageBackgroundColor('white');
$img->setResolution(72,72);
$img->resampleImage(72,72,imagick::FILTER_LANCZOS,0);
$img->setImageUnits(imagick::RESOLUTION_PIXELSPERINCH);
$img->setImageCompression(imagick::COMPRESSION_JPEG);
$img->setImageCompressionQuality(100);
$img->stripImage();
$num_pages = $img->getNumberImages();
for($i = 0;$i < $num_pages; $i++) {
$img->setIteratorIndex($i);
$img->setImageBackgroundColor('white');
$img->flattenImages();
$img->setImageFormat("jpeg");
$final_name = str_replace(" ", "+", basename(str_replace(".".$file_ext,"", $file_name)));
$final_name = preg_replace("/[^a-zA-Z0-9-+]/", "", $final_name);
$save_to = $pdf_dir."/".str_replace(".".$file_ext,"", $final_name).'-'.$i.'.jpg';
$img->writeImage($save_to);
$file_image = str_replace(dirname(__FILE__)."/../../", "/", $save_to);
$file_images[] = $file_image;
}
$img->destroy();
答案 0 :(得分:0)
您的代码中存在一些错误。
需要在加载PDF
您需要使用setBackgroundColor而不是setImageBackgroundColor。
您可能想要设置单个页面压缩质量,但请参见下文。
所以代码:
$imagick = new Imagick();
$imagick->setResolution(72, 72);
$imagick->readImage($file_name);
$imagick->setBackgroundColor('white');
$imagick->setImageCompression(imagick::COMPRESSION_JPEG);
$imagick->setImageCompressionQuality(70);
foreach ($imagick as $c => $_page) {
$_page->setBackgroundColor('white');
$_page->setImageCompressionQuality(70);
$_page->setImageFormat('jpg');
$_page->writeImage($file."_background-$c.jpg");
}
不过,你使用100质量的JPEG这一事实令人不安。如果这是将要发送到浏览器的图像,则质量应低于100.如果您将其用作中间图片,则使用PNG作为中间格式更好,因为它是无损的并且它支持透明度。
答案 1 :(得分:0)
这似乎做了伎俩,改为回答了一点,因为我无法让你的foreach工作,因为它使它按预期工作: 谢谢你让我免于很多头疼。
$img = new imagick();
$img->setResolution(72, 72);
$img->readImage($dir.'/'.$file_name);
$img->setBackgroundColor('white');
$img->setImageCompression(imagick::COMPRESSION_JPEG);
$img->setImageCompressionQuality(70);
$num_pages = $img->getNumberImages();
for($i = 0;$i < $num_pages; $i++) {
$final_name = str_replace(" ", "+", basename(str_replace(".".$file_ext,"", $file_name)));
$final_name = preg_replace("/[^a-zA-Z0-9-+]/", "", $final_name);
$save_to = $pdf_dir."/".str_replace(".".$file_ext,"", $final_name).'-'.$i.'.jpg';
$img->setIteratorIndex($i);
$img->setBackgroundColor('white');
$img->setImageCompressionQuality(70);
$img->setImageFormat('jpg');
$img->writeImage($save_to);
$file_image = str_replace(dirname(__FILE__)."/../../", "/", $save_to);
$file_images[] = $file_image;
}