在PHP中将彩色PDF转换为黑白(单色)PDF [适用于Twilio传真]

时间:2018-01-23 15:51:17

标签: php pdf imagemagick twilio imagick

我正在尝试将颜色pdf转换为黑白pdf。我将使用pdf将其发送到传真,我正在使用Twilio并且它明确地将颜色pdf转换为单色pdf但是,我想在我的服务器端执行它以便能够预览结果。

由于我有Imagick,并且主要在Imagick上发现了一些主题,我想尝试一下,但我找不到Imagick中必要的课程。我找到了一些灰度,但传真显然是黑色的&白色(单色),所以与传真机不相同。

我能找到的最近的是:

->transformImageColorSpace(\Imagick::COLORSPACE_SRGB)

->setImageColorSpace(Imagick::COLORSPACE_GRAY)

但这些是灰度,而不是单色。

另外,在Imagick formums中,我发现了这些命令,但我不想用shell_exec执行(因为我读过有几个下方)

// I am pretty sure this one should work, but couldn't find how to do it in php:
convert -density 288 in.pdf -resize 25% out.png  

// thus this one:
convert -density 600 in.pdf -threshold 15% -type bilevel -compress fax out.pdf

// Also found this one:
convert -density 288 image.pdf -resize 25% -threshold 50% -type bilevel image.tiff

如何使用上面的命令或任何其他PHP兼容的方式实现我想在php中实现的目标? Twilio是如何做到的?

更新

预期输出(Twilio如何做):

enter image description here

使用以下答案:

$img = new Imagick('path/to/document.pdf');
$img->quantizeImage(2,                        // Number of colors
                Imagick::COLORSPACE_GRAY, // Colorspace
                50,                        // Depth tree
                TRUE,                     // Dither
                FALSE);                   // Error correction
$img->writeImage('path/to/output.png')

enter image description here

更新2:

使用$img->quantizeImage(2, Imagick::COLORSPACE_GRAY, 1, TRUE, FALSE);

enter image description here

1 个答案:

答案 0 :(得分:1)

使用Imagick::quantizeImage单色化PDF

$img = new Imagick('path/to/document.pdf');
$img->quantizeImage(2,                        // Number of colors
                    Imagick::COLORSPACE_GRAY, // Colorspace
                    1,                        // Depth tree
                    TRUE,                     // Dither
                    FALSE);                   // Error correction
$img->writeImage('path/to/output.png')

例如......

$img = new Imagick();
$img->newPseudoImage(300, 300, 'radial-gradient:');
$img->quantizeImage(2, Imagick::COLORSPACE_GRAY, 1, TRUE, FALSE);
$img->writeImage('output.png');

output.png

**

或者增加颜色计数以允许黑色和黑色之间的灰度值。白色。有关很好的示例,请参阅用法文档Color Quantization and Dithering

$img = new Imagick();
$img->newPseudoImage(300, 300, 'radial-gradient:');
$img->quantizeImage(255, Imagick::COLORSPACE_GRAY, 1, TRUE, FALSE);
$img->writeImage('output.png');

output.png