Как правильно добавить альфа-канал к изображению, извлеченному из PDF-файла с помощью PyMuPDF - PullRequest
1 голос
/ 17 апреля 2020

Я пытаюсь извлечь изображения из PDF с помощью PyMuPDF и этот рецепт . Для некоторых изображений с прозрачностью жесткого края это работает. Но для изображений с матовой прозрачностью я получаю артефакты по краям.

Когда я извлекаю изображение без альфа-информации и альфа-маску в виде отдельных PNG и объединяю их с использованием GIMP, результат получается ожидаемым, поэтому информация вроде бы там есть.

Может кто-нибудь помочь? Я пропускаю шаг?

import fitz

doc = fitz.open(r"Some.pdf")

for i in range(len(doc)):
    for img in doc.getPageImageList(i):
        xref = img[0]
        smask = img[1]
        pix1 = fitz.Pixmap(doc, xref)
        if smask != 0:
            pix2 = fitz.Pixmap(doc, smask)
            pix = fitz.Pixmap(pix1)
            pix.setAlpha(pix2.samples)
        else:
            pix = pix1

        if pix.n - pix.alpha < 4:       # this is GRAY or RGB
            pix.writePNG("img-%s-%s.png" % (i, xref))
        else:               # CMYK: convert to RGB first
            pix1 = fitz.Pixmap(fitz.csRGB, pix)
            pix1.writePNG("img-%s-%s.png" % (i, xref))
            pix1 = None
        pix = None
...