用PHP从pdf中提取图像

时间:2012-11-01 08:38:39

标签: php pdf image-processing

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

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

gray scale image from pdf

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

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

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

1. CYMK image
2. 8 bit for each component

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

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

2 个答案:

答案 0 :(得分: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内容流完成的任何旋转,剪切,颜色反转等都将被忽略。   

答案 1 :(得分: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);
        }
    }
}

?>