我被困住了,真的可以在这个上使用一些帮助。我正在使用PHP和Imagick生成一个效果很好的缩略图。但是,我注意到CMYK PDF总是以灰度生成。所以我通过获取CMYK PDF并使用Adobe Acrobat Pro手动将其转换为RGB来测试这一点。然后我通过以下代码重新运行它,它产生了一个彩色图像。我知道
$image->transformImageColorSpace(1);
or
$image->setImageColorSpace(1);
然而,这不起作用。 将pdf转换为彩色PNG图像的正确方法是什么?我看过以下链接没有运气:
http://php.net/manual/en/imagick.setimagecolorspace.php
Convert PDF to JPEG with PHP and ImageMagick
对此的任何帮助都会很棒。
以下是代码:
$filePath = fileSaveUserUpload("path/to/file", ""); //path changed here...
$_SESSION['FILEPATH'] = $filePath;
//-------------first makes a thumbnail of first page in image/pdf
$extension_pos = strrpos($filePath, '.'); // find position (number) of the last dot, so where the extension starts
$image = new Imagick();
$image->readImage($filePath."[0]"); //reads an image at a path(first page only in this case)
$image->transformImageColorSpace(1); //convert to RGB
$image->setbackgroundcolor('white'); //replace transparency with this color
$image->setCompression(Imagick::COMPRESSION_LOSSLESSJPEG);
$image->setCompressionQuality(150);
$image->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE); //remove transparency
$image->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN); //make everything that was transparent white
$image->thumbnailImage(0,250); //max height 300 but try and preserve aspect ratio (wdithxheight)
$thumbnail = substr($filePath, 0, $extension_pos) . '_thumb.png';// . substr($filePath, $extension_pos);
$image->writeImage($thumbnail);
$image->clear();
$image->destroy();
更新
我正在使用以下imagick版本:
ImageMagick 6.9.1-2 Q16 x86 2015-04-14
3.3.0RC2
GhostScript版本: 9.18
这是原始PDF(在此处更改为图片):
以下是它制作的缩略图:
这仅适用于CMYK PDF。如果我使用相同的PDF并通过adobe acrobat将其转换为RGB,它就会出现颜色。我对此进行了测试,但仍然适用。
答案 0 :(得分:1)
从2019年开始打招呼。此问题仍然存在于gs 9.26上(9.27在 all 上不起作用)
设置颜色空间,然后再加载文件,然后进行转换。
// setup imagick for colour
$Img = new Imagick();
$Img->SetResolution(200,200);
$Img->SetColorspace(Imagick::COLORSPACE_SRGB);
// now read pdf first page.
$Img->ReadImage("{$File}[0]");
$Img->TransformImageColorSpace(Imagick::COLORSPACE_SRGB);
// the rest of your stuff.
答案 1 :(得分:0)
您可以尝试更改:
$image->transformImageColorSpace(1);
到
$image->transformImageColorSpace(Imagick::COLORSPACE_RGB);
。
我不确定你要对1
做什么,但是根据PHP.net,有预定义的颜色空间可以添加到transformImageColorSpace();
以获得图像输出使用正确的色彩空间。
答案 2 :(得分:0)
您看到的问题很可能是GhostScript的旧版本没有正确进行转换。下面是在安装了GhostScript版本8.70的系统上调用代码时生成的图像:
顺便说一句,你几乎肯定想要使用SRGB色彩空间,而不是普通的旧RGB。 SRGB是用于在计算机屏幕上显示图像的正确选项。
$image->transformImageColorSpace(\Imagick::COLORSPACE_SRGB);
这是一个命令行来测试ghostscript本身进行转换:
./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 tree-blackandwhite.pdf
它应该将图像转换为PNG。您可能需要仅使用./gs-916-linux_x86_64
替换gs
。