使用Python转换和合并图像和PDF

使用Python转换和合并图像和PDF,python,pdf,automation,Python,Pdf,Automation,因此,我正试图使用Python组合多个文件(PDF和图像)。到目前为止,我们成功地处理了PDF和“JPG”图像。但是,每次我尝试使用PIL将“PNG”图像转换为PDF时,都会弹出一个错误,提示“ValueError:无法保存模式RGBA” 我知道PIL可以将“RGBA”转换为“RGB”,但由于某些原因,下面的代码无法正常工作 你知道为什么吗 p.S.:一周前开始学习Python,如果您觉得这很明显,请友好一点 PYTHON代码 首先,您需要这样做: from PIL import Image

因此,我正试图使用Python组合多个文件(PDF和图像)。到目前为止,我们成功地处理了PDF和“JPG”图像。但是,每次我尝试使用PIL将“PNG”图像转换为PDF时,都会弹出一个错误,提示“ValueError:无法保存模式RGBA”

我知道PIL可以将“RGBA”转换为“RGB”,但由于某些原因,下面的代码无法正常工作

你知道为什么吗

p.S.:一周前开始学习Python,如果您觉得这很明显,请友好一点

PYTHON代码

首先,您需要这样做:

from PIL import Image

PNG_FILE = 'image.png'
PDF_FILE = 'doc.pdf'

rgba = Image.open(PNG_FILE)
rgb = Image.new('RGB', rgba.size, (255, 255, 255))  # white background
rgb.paste(rgba, mask=rgba.split()[3])               # paste using alpha channel as mask
rgb.save(PDF_FILE, 'PDF', resoultion=100.0)

您需要先将PNG从RGBA转换为RGB。 Png有一个额外的alpha通道,因此为RGBA。 RGBA为32位,RGB为24位。 如上所述

示例代码:

from PIL import Image

PNG_FILE = 'a.png'
PDF_FILE = 'b.pdf'

rgba = Image.open(PNG_FILE)
rgb = Image.new('RGB', rgba.size, (255, 255, 255))  # white background
rgb.paste(rgba, mask=rgba.split()[3])               # paste using alpha channel as mask
rgb.save(PDF_FILE, 'PDF', resoultion=100.0)

所以“Image.open(item).convert”不适用于这种情况?当然,您可以使用Image.open()子类打开图像,但是在转换RGBA=>RGB时,读取的数据类型和预期的数据类型将不匹配,RGB是第二个for循环中提到[Image.open(item).convert(“RGB”)]的行。。。只需删除该模式并使用上面的代码rgb=Image.new('rgb',rgba.size,(255,255,255)),然后将数据粘贴到其中。
from PIL import Image

PNG_FILE = 'a.png'
PDF_FILE = 'b.pdf'

rgba = Image.open(PNG_FILE)
rgb = Image.new('RGB', rgba.size, (255, 255, 255))  # white background
rgb.paste(rgba, mask=rgba.split()[3])               # paste using alpha channel as mask
rgb.save(PDF_FILE, 'PDF', resoultion=100.0)