Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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 3.x 如何将alpha通道正确添加到使用PyMuPDF从PDF提取的图像中_Python 3.x_Png_Pymupdf - Fatal编程技术网

Python 3.x 如何将alpha通道正确添加到使用PyMuPDF从PDF提取的图像中

Python 3.x 如何将alpha通道正确添加到使用PyMuPDF从PDF提取的图像中,python-3.x,png,pymupdf,Python 3.x,Png,Pymupdf,我正在尝试使用PyMuPDF和从PDF中提取图像。对于某些具有硬边透明度的图像,它是有效的。但是对于具有蒙版透明度的图像,我会沿着边缘获得瑕疵 当我提取没有alpha信息的图像和作为单独PNG的alpha掩码,并使用GIMP组合它们时,结果与预期的一样,因此信息似乎存在 有人能帮忙吗?我漏了一步吗 import fitz doc = fitz.open(r"Some.pdf") for i in range(len(doc)): for img in doc.getPageImage

我正在尝试使用PyMuPDF和从PDF中提取图像。对于某些具有硬边透明度的图像,它是有效的。但是对于具有蒙版透明度的图像,我会沿着边缘获得瑕疵

当我提取没有alpha信息的图像和作为单独PNG的alpha掩码,并使用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
导入fitz
doc=fitz.open(r“Some.pdf”)
对于范围内的i(len(doc)):
对于文档getPageImageList(i)中的img:
外部参照=img[0]
smask=img[1]
pix1=fitz.Pixmap(文档,外部参照)
如果是smask!=0:
pix2=fitz.Pixmap(doc,smask)
pix=fitz.Pixmap(pix1)
pix.setAlpha(pix2.samples)
其他:
pix=pix1
如果pix.n-pix.alpha<4:#这是灰色或RGB
pix.writePNG(“img-%s-%s.png”%(i,外部参照))
其他:#CMYK:首先转换为RGB
pix1=fitz.Pixmap(fitz.csRGB,pix)
pix1.writePNG(“img-%s-%s.png”%(i,外部参照))
pix1=无
pix=无

FYI:我通过分别保存不透明度遮罩和图像,然后使用PyPng库组合图像,获得了我想要的。这段代码非常难看,应该只用于小图像(因为它当前读取整个图像,而不是使用迭代器),所以我不会立即发布它,但如果我能清理它,我会在这里分享。不过,我仍然对只使用PyMuPDF的解决方案感兴趣。仅供参考:我通过分别保存不透明度遮罩和图像,然后使用PyPng库组合图像,成功地获得了我想要的结果。这段代码非常难看,应该只用于小图像(因为它当前读取整个图像,而不是使用迭代器),所以我不会立即发布它,但如果我能清理它,我会在这里分享。不过,我仍然对只使用PyMuPDF的解决方案感兴趣。