4

我正在尝试使用 PHP 从 PDF 中提取图像。

我已经部分成功了 - 我有一个灰度图像......

来自pdf的灰度图像

...而且我知道我必须在其上应用一个公式才能获得颜色!

但首先,我需要将图像的二进制数据转换为数字,然后应用Adob​​e PDF 规范中的公式。

所以基本上,假设你有附加的图像(包含 PDF 中的所有数据,没有修改),它是

1. CYMK image
2. 8 bit for each component

并且您需要使用附加的 Adob​​e 规范,在“图像”部分下,使用 PHP 将其转换为彩色图像。

我能做些什么来解决这个问题?

4

2 回答 2

3

您可以使用pdfimages

安装时会安装该软件包xpdf。手册页描述:

Pdfimages 将可移植文档格式 (PDF) 文件中的图像保存为可移植像素图 (PPM)、可移植位图 (PBM) 或 JPEG 文件。

Pdfimages 读取 PDF 文件,扫描一页或多页 PDF 文件,并为每个图像写入一个 PPM、PBM 或 JPEG 文件 image-root-nnn.xxx,其中 nnn 是图像编号,xxx 是图像类型(.ppm、.pbm、.jpg)。

注意:pdfimages 从 PDF 文件中提取原始图像数据,而不执行任何额外的转换。由 PDF 内容流完成的任何旋转、剪切、颜色反转等都将被忽略。

于 2012-11-01T08:41:52.980 回答
1

您显示的图像不是灰度的,它只是倒置的。尝试反转颜色字节,你会得到好的颜色。由于 Photoshop 将 100% 的颜色存储为 0x0,导致 JPEG 图像中的 CMYK 颜色存储存在问题。

编辑:如何在 PHP 中反转,取自这篇博文它正在处理 rgb 数据,必须适应 CMYK

<?php
function image_filter_invert(&$image){
    $width = imagesx($image);
    $height = imagesy($image);
    for($x = 0; $x < $width; $x++){
        for($y = 0; $y < $height; $y++){
            $rgb = imagecolorat($image, $x, $y);
            $r = 0xFF-(($rgb>>16)&0xFF);
            $g = 0xFF-(($rgb>>8)&0xFF);
            $b = 0xFF-($rgb&0xFF);
            $color = imagecolorallocate($image, $r, $g, $b);
            imagesetpixel($image, $x, $y, $color);
        }
    }
}

?>
于 2012-11-01T09:55:47.127 回答