我正试图用PHP从PDF中提取图像。
我已经部分成功了 - 我有一张灰度图像...
......而且我知道我必须在它上面应用一个公式才能获得颜色!
但首先,我需要将图像的二进制数据转换为数字,然后应用the Adobe PDF specs中的公式。
所以基本上,假设你有附加的图像(包含PDF中的所有数据,没有修改)而且它是
1. CYMK image
2. 8 bit for each component
并且您需要使用附加Adobe规范在“图像”部分下使用PHP将其转换为彩色图像。
我该怎么做才能解决这个问题?
答案 0 :(得分:3)
安装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);
}
}
}
?>