簡體   English   中英

在python中從PDF中提取圖像

[英]Extract an image from a PDF in python

我正在嘗試使用 PyPDF2 從 pdf 中提取圖像,但是當我的代碼獲取它時,圖像與實際外觀非常不同,請看下面的示例:

文本 但它應該是這樣的:

文本

這是我正在使用的pdf:

https://www.hbp.com/resources/SAMPLE%20PDF.pdf

這是我的代碼:

pdf_filename = "SAMPLE.pdf"
pdf_file = open(pdf_filename, 'rb')
cond_scan_reader = PyPDF2.PdfFileReader(pdf_file)
page = cond_scan_reader.getPage(0)

xObject = page['/Resources']['/XObject'].getObject()
i = 0
for obj in xObject:
    # print(xObject[obj])
    if xObject[obj]['/Subtype'] == '/Image':
        if xObject[obj]['/Filter'] == '/DCTDecode':
            data = xObject[obj]._data
            img = open("{}".format(i) + ".jpg", "wb")
            img.write(data)
            img.close()
            i += 1 

因為我需要將圖像保持在它的顏色模式,如果它是 CMYK,我不能將它轉換為 RBG,因為我需要這些信息。 另外,我試圖從我從 pdf 獲得的圖像中獲取 dpi,該信息是否始終存儲在圖像中? 提前致謝

希望這有效:您可能需要使用另一個庫,例如Pillow

下面是一個例子:


    from PIL import Image
    image = Image.open("path_to_image")
    if image.mode == 'CMYK':
        image = image.convert('RGB')
    image.write("path_to_image.jpg")

參考: 從 CMYK 轉換為 RGB

我使用pdfreader從您的示例中提取圖像。 該圖像使用ICCBased色彩空間,其值為N=4Intent值為RelativeColorimetric 這意味着“最接近的”PDF 色彩空間是DeviceCMYK

您所需要的只是將圖像轉換為 RGB 並反轉顏色。

這是代碼:

from pdfreader import SimplePDFViewer
import PIL.ImageOps 

fd = open("SAMPLE PDF.pdf", "rb")
viewer = SimplePDFViewer(fd)

viewer.render()
img = viewer.canvas.images['Im0']

# this displays ICCBased 4 RelativeColorimetric
print(img.ColorSpace[0], img.ColorSpace[1].N, img.Intent)

pil_image = img.to_Pillow()
pil_image = pil_image.convert("RGB")
inverted = PIL.ImageOps.invert(pil_image)


inverted.save("sample.png")

閱讀有關 PDF 對象的更多信息:Image (sec. 8.9.5) , InlineImage (sec. 8.9.7)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM