imagick 创建了错误的色彩空间/颜色
imagick creates wrong colorspace / colors
我的网站上有以下代码,我必须用上传的 pdf 文件创建图像,我的问题是我无法获得正确的颜色(是的,pdf 文件中可以同时包含文本和图像) :
$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 时,它变暗了
希望有人能够帮助我。
这看起来像是 Ghostscript 中的一个错误,Ghostscript 是 ImageMagick 通常用来将 PDF 转换为位图格式的委托程序。
使用 Ghostscript 版本 8.70 我看到了与您看到的相同的输出,即图像比直接查看 PDF 时更亮。
下载 Ghostscript version 9 和 运行 下面的命令进行转换后,我看到了与 PDF 中相同的颜色。
您可能需要升级到 Ghostscript 9,或者找出导致 Ghostscript 无法正确转换的 PDF 的特殊之处。我认为 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
我的网站上有以下代码,我必须用上传的 pdf 文件创建图像,我的问题是我无法获得正确的颜色(是的,pdf 文件中可以同时包含文本和图像) :
$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 时,它变暗了
希望有人能够帮助我。
这看起来像是 Ghostscript 中的一个错误,Ghostscript 是 ImageMagick 通常用来将 PDF 转换为位图格式的委托程序。
使用 Ghostscript 版本 8.70 我看到了与您看到的相同的输出,即图像比直接查看 PDF 时更亮。
下载 Ghostscript version 9 和 运行 下面的命令进行转换后,我看到了与 PDF 中相同的颜色。
您可能需要升级到 Ghostscript 9,或者找出导致 Ghostscript 无法正确转换的 PDF 的特殊之处。我认为 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