使用PHP从PDF中提取图像

4
我正在尝试使用PHP从PDF中提取图像。
我已经部分成功了 - 我有一张灰度图像...

gray scale image from pdf

我知道我需要对它应用一个公式来获得颜色!

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

因此,基本上,假设您有附加的图像(包含PDF的所有数据,没有修改)并且它是

1. CYMK image
2. 8 bit for each component

你需要使用附加的Adobe规范,在"Image"部分下,使用PHP将其转换为彩色图像。

我该怎么做才能解决这个问题?


你是如何提取图像的?能否展示一些代码或描述你使用的方法?也许只需要进行一些小的调整。 - Pekka
我使用了这个类并对其进行了修改 http://code.google.com/p/lucene-silverstripe-plugin/source/browse/trunk/thirdparty/class.pdf2text.php?r=19 - Samy Massoud
2个回答

3
您可以使用pdfimages
安装xpdf时会同时安装这个软件包。它的手册描述如下:
Pdfimages将 Portable Document Format(PDF)文件中的图片保存为Portable Pixmap(PPM)、Portable Bitmap(PBM)或JPEG文件。
Pdfimages读取PDF文件,扫描一个或多个页面,并为每个图像写入一个PPM、PBM或JPEG文件,文件名为image-root-nnn.xxx,其中nnn是图像编号,xxx是图像类型(.ppm、.pbm、.jpg)。
注意:pdfimages从PDF文件中提取原始图像数据,不执行任何额外的转换。PDF内容流执行的任何旋转、裁剪、颜色反转等操作都将被忽略。

显然,Load_image做的与我在这里要求的相反 http://php.net/manual/en/function.pdf-load-image.php 它将图像放入pdf中。 - Samy Massoud
亲爱的@Praveen Kumar,我已经提取了这张图片,我需要的是如何按照Adobe规范来在PHP中对这张图片进行着色。 - Samy Massoud
你可以使用类似于 php_gd 的东西。 - Praveen Kumar Purushothaman

1
你展示的图像不是灰度图,只是反转了颜色。尝试反转颜色字节,你会得到好的颜色。由于Photoshop将100%的颜色存储为0x0,所以在JPEG图像中存储CMYK颜色引起了一些麻烦。
编辑:如何在PHP中进行反转,取自this blogpost。它适用于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);
        }
    }
}

?>

我使用PHP GD编辑了答案,并提供了可能的解决方案。请注意,将JPEG转换为JPEG会使您失去一些质量,因为您正在使用有损编解码器重新压缩图像数据。 - user18428
我已经尝试过了,但没有成功,另外我还有另一种解决方案,但它只会使我的图像变成白色,没有颜色! - Samy Massoud
如果可以的话,请尝试将图像存储为CMYK Tiff文件(不使用JPEG压缩),这应该可以解决问题。 - user18428
这段代码是针对RGB数据(即3字节颜色)工作的,你在过程中缺少了一个字节。将其扩展为适用于CMYK等4字节颜色应该很简单。 - user18428
最好的方法是举个例子,我一直在努力挖掘,但到目前为止没有结果,所以请指点我:D - Samy Massoud
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接