【问题标题】:PDF Thumbnail always generated as grayscale using ImagickPDF 缩略图总是使用 Imagick 生成为灰度
【发布时间】:2016-05-03 18:30:21
【问题描述】:

我被困住了,真的可以在这方面使用一些帮助。我正在使用 PHP 和 Imagick 生成一个效果很好的缩略图。但是,我注意到 CMYK PDF 始终以灰度生成。因此,我通过获取 CMYK PDF 并使用 Adob​​e 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,它会出现颜色。我对此进行了测试,它仍然适用。

【问题讨论】:

  • i) 如果您的 ImageMagick 或 GhostScript 版本超过 2 年,这可能是一个错误。 ii) 你能发布一个示例图片吗?
  • 2016 年 3 月 2 日 - 这仍然是一个从未解决的问题。我可能使用的任何其他图像转换都会有所帮助
  • 请在某处发布示例 PDF - 如有必要,请在 Imagick 问题页面上github.com/mkoppanen/imagick
  • 这是我一直在测试的 PDF 的链接:dropbox.com/s/pzv5cowulz827hd/tree-blackandwhite.pdf?dl=0 老实说,您并不真的需要我的测试 PDF。只需获取任何 pdf 并将颜色空间更改为 CMYK,它就会使用上述代码重现错误。我在这里所做的只是从网上下载一张图片。将其转换为 pdf,将颜色空间更改为 CMYK。如果我将其更改为 RGB,它将显示为颜色。

标签: php ghostscript imagick cmyk


【解决方案1】:

从 2019 年开始问候。在 gs 9.26 上仍然存在这个问题(9.27 在所有中都不起作用)

在加载文件之前设置色彩空间,之后对其进行转换。

// 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.

【讨论】:

  • 非常感谢。这就是我需要的!
  • 这就像一个魅力!谢谢@bobmagicii!
【解决方案2】:

您看到的问题可能是旧版本的 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

【讨论】:

  • 很高兴了解 SRGB 色彩空间。我使用的是 GS 版本 9.18。如果您使用的是 GhostScript 8.70,我将不得不尝试找到一个较低的版本,然后尝试一下,看看效果如何。
  • 刚刚卸载了 GS 9.18 并安装了运行相同代码的 GS 8.70,但它仍在生成黑白照片...我不确定我在做什么与你不同。
  • 我安装了 x86 版本,因为我在 Windows 上运行 XAMPP。所以我使用 exe 安装到我的 Program Files(x86) 目录。您正在运行 linux 设置吗?
  • 是的,我在 Centos 上运行。 GS 9.16 也适合我。
  • DROPBOX Command Line Image 这是我运行的命令的图片。它运行但没有输出任何东西。没有错误或图像。有我能找到的日志文件吗?
【解决方案3】:

您可以尝试更改:

$image->transformImageColorSpace(1);

$image->transformImageColorSpace(Imagick::COLORSPACE_RGB);

我不确定您想用1 做什么,但根据PHP.net,可以将预定义的色彩空间添加到transformImageColorSpace(); 以使图像输出具有正确的色彩空间。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-16
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
相关资源
最近更新 更多