我在我的网站上有以下代码,我必须用上传的pdf文件创建图像,我的问题是我无法正确显示颜色(是的,pdf文件中可以有文本和图像):< / p>
$img = new imagick();
$img->setResolution(72, 72);
$img->readImage($dir_f.$file);
$img->set ImageCompression(imagick::COMPRESSION_NO);
$img->setImageCompressionQuality(100);
$num_pages = $img->getNumberImages();
for($i = 0;$i < $num_pages; $i++) {
$fina l_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.'.png';
$img->setIteratorIndex($i);
$img->setImageCompression(imagick::COMPRESSION_NO);
$img->setImageCompressionQuality(100);
$img->setimageformat("png");
$img->writeImage($save_to);
$file_image = str_replace(dirname(__FILE__)."/../../", "/", $save_to);
$file_images[] = array($file_image, $index[$ii]);
}
$img->destroy();
我得到了不同的结果,这取决于我一直使用的颜色空间类型,但没有正确的颜色。
当我没有设置颜色空间时,它变得明亮。 当我使用色彩空间srgb或cmyk时,图像变得明亮, 当我使用色彩空间COMPRESSION_NO它变得明亮 当我使用色彩空间rgb时它变暗了
希望有人能够帮助我。
答案 0 :(得分:0)
这看起来像Ghostscript中的一个错误,它是ImageMagick通常用来将PDF转换为位图格式的委托程序。
使用Ghostscript版本8.70我看到你看到的输出相同,即图像比直接查看PDF时要轻。
下载Ghostscript version 9并运行以下命令进行转换后,我会看到与PDF相同的颜色。
您可能需要升级到Ghostscript 9或弄清楚PDF格式有什么特别之处才能让Ghostscript无法正确转换它。我认为PDF可能有非标准的颜色配置文件或奇怪的颜色空间。但是,使用GS9转换它可以正常工作,这可能是解决问题的最简单方法。
./ghostscript-9.16-linux-x86_64/gs-916-linux_x86_64 -q -dQUIET -dSAFER -dBATCH \
-dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 \
-dAlignToPixels=0 -dGridFitTT=1 -sDEVICE=pngalpha \
-dFirstPage=1 -dLastPage=3 \
-dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r72 \
-sOutputFile=gs-%d.png 153311-flyers-sample-papers-volume-2.pdf