Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用PyPDF2从PDF中提取的图像是倾斜的,并且其颜色是反转的_Python_Pdf_Pypdf2_Pypdf - Fatal编程技术网

Python 使用PyPDF2从PDF中提取的图像是倾斜的,并且其颜色是反转的

Python 使用PyPDF2从PDF中提取的图像是倾斜的,并且其颜色是反转的,python,pdf,pypdf2,pypdf,Python,Pdf,Pypdf2,Pypdf,我使用以下代码从PDF文件中提取图像: 从PIL导入图像 从PyPDF2导入PdfileReader,通用 从io导入字节io 从输入导入列表开始 进口zlib 导入系统 导入结构 用于CCITT的def tiff头(宽度:int,高度:int,img大小:int,CCITT组:int=4)->字节: tiff_头_结构='列表: 图像:列表[图像]=[] file=PdfFileReader(打开(文件名为“rb”)) nPages=file.getNumPages() 对于范围内的i(n页)

我使用以下代码从PDF文件中提取图像:

从PIL导入图像
从PyPDF2导入PdfileReader,通用
从io导入字节io
从输入导入列表开始
进口zlib
导入系统
导入结构
用于CCITT的def tiff头(宽度:int,高度:int,img大小:int,CCITT组:int=4)->字节:
tiff_头_结构='列表:
图像:列表[图像]=[]
file=PdfFileReader(打开(文件名为“rb”))
nPages=file.getNumPages()
对于范围内的i(n页):
page=file.getPage(i)
尝试:
root_objects=page[“/Resources”[“/XObject”].getObject()#devrait s'appeler getObjects。。。
除KeyError外:
持续
图像+=对象到图像(根对象)
返回图像
如果名称=“\uuuuu main\uuuuuuuu”:
fichier=sys.argv[1]
图像=pdf_至_图像(菲希尔)
#打印(“\n”.join(映射(str,图像)))
对于图像中的图像:
image.show()
通过
它适用于几乎所有的PDF文件,但其中一个文件的行为怪异。这是一个可以找到的PDF示例。当我将这个PDF文件传递给上面的代码时,结果是倾斜的,黑白颜色是颠倒的

关于这个PDF中的image对象,我注意到的唯一一点是它有一个
DecodeParms
条目,它的值是
{'/Predictor':15'/Columns':2550'/Colors':3}
。我不知道它是否相关,但这是我测试过的唯一一个具有这些功能的PDF


提前谢谢

是的,这是相关的。数据用带预测器的FlateCode编码。因此,如果您需要
图像
对象的原始像素,则需要在使用
zlib.decompress
后反预测数据。有关如何做到这一点,请参阅


PyPDF2可能还有一些方法可供您使用。

非常感谢。事实证明,PyPDF2的方法getData()通常会反转过滤器,但这里的过滤器不是0、1、2、3或4,而是255、154、144。。。我怀疑这些不是过滤器,但我的文件没有被正确读取。PyPDF2断言
断言len(数据)%rowlength==0
失败。