python img2pdf 模块不能上传含alpha通道透明度的图片

官网说明

pypi-img2pdf

Input images with alpha channels are not allowed. PDF doesn’t support alpha channels in images and thus, the alpha channel of the input would have to be discarded. But img2pdf will always be lossless and thus, input images must not carry transparency information.

不允许使用带有Alpha通道的输入图像。PDF不支持图像中的Alpha通道,因此必须丢弃输入的Alpha通道。但是img2pdf将始终是无损的,因此,输入图像不得包含透明度信息。

    if ics in ["LA", "PA", "RGBA"] or "transparency" in imgdata.info:
        logging.warning(
            "Image contains transparency which cannot be retained " "in PDF."
        )
        logging.warning("img2pdf will not perform a lossy operation.")
        logging.warning("You can remove the alpha channel using imagemagick:")
        logging.warning(
            "  $ convert input.png -background white -alpha "
            "remove -alpha off output.png"
        )
        raise Exception("Refusing to work on images with alpha channel")

读取图片

cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道
cv2.IMREAD_GRAYSCALE:读入灰度图片
cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道

import numpy as np
import cv2
img = cv2.imread(1.jpg’,cv2.IMREAD_GRAYSCALE)
print(img.shape)  # 查看alpha通道
# (120, 125, 3)输出为3表示没有alpha通道,如果是4表示有alpha通道

添加alpha通道

opencv 读取图片后通道为BGR的格式,这里做个示范将图片的左半边设置为透明效果。

import cv2
import numpy as np
 
img = cv2.imread("/home/shuai/Desktop/lena.jpg") 
b_channel, g_channel, r_channel = cv2.split(img) 
alpha_channel = np.ones(b_channel.shape, dtype=b_channel.dtype) * 255
# 最小值为0
alpha_channel[:, :int(b_channel.shape[1] / 2)] = 100 
img_BGRA = cv2.merge((b_channel, g_channel, r_channel, alpha_channel)) 
cv2.imwrite("lena.png", img_BGRA) 
### 回答1: 使用OpenCV的cv2模块读取PNG图片时,可以通过设置cv2.IMREAD_UNCHANGED标志来读取alpha通道。以下是一个示例代码: ```python import cv2 # 读取PNG图片并保留alpha通道 img = cv2.imread('image.png', cv2.IMREAD_UNCHANGED) # 获取alpha通道 alpha_channel = img[:, :, 3] # 显示原始图片alpha通道 cv2.imshow('Original Image', img) cv2.imshow('Alpha Channel', alpha_channel) # 等待按下任意键退出 cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这个示例中,cv2.IMREAD_UNCHANGED标志告诉OpenCV读取PNG图片时不仅要读取RGB通道,还要读取alpha通道。然后,我们可以使用NumPy的切片操作获取alpha通道,并将其显示出来。 ### 回答2: 使用Python的cv2库获取png图片alpha通道可以通过以下步骤实现: 1. 首先,导入cv2库:import cv2 2. 使用cv2.imread()函数读取png图片,该函数返回一个包图片像素值的numpy数组:image = cv2.imread("image.png", cv2.IMREAD_UNCHANGED) 这里要使用cv2.IMREAD_UNCHANGED参数来保留原始的alpha通道信息。 3. 访问numpy数组的第四个通道,即alpha通道,即image[:, :, 3]。alpha通道的像素值范围从0到255,表示透明度。 4. 可以对alpha通道进行操作,例如将所有非全透明的像素设置为完全不透明:image[:, :, 3][image[:, :, 3] > 0] = 255 这里使用numpy的逻辑索引来选取非全透明的像素,并将其alpha通道设置为255。 5. 可以对得到的alpha通道进行进一步的处理,例如通过cv2.imshow()将alpha通道显示出来: cv2.imshow("Alpha Channel", image[:, :, 3]) cv2.waitKey(0) 注意,显示图像时需要等待按键按下才能关闭显示窗口,可以使用cv2.waitKey(0)来实现。 通过以上步骤,就可以使用cv2库获取并处理png图片alpha通道,实现各种对透明度的操作。 ### 回答3: 使用cv2获取PNG图片alpha通道,可以通过以下步骤实现: 1. 首先,导入cv2库:import cv2 2. 使用cv2库的imread()函数读取PNG图片文件:image = cv2.imread('image.png', cv2.IMREAD_UNCHANGED) 注意:cv2.IMREAD_UNCHANGED参数用于保留图片中的所有通道,包括alpha通道。 3. 检查图片是否包alpha通道:if image.shape[-1] == 4 4. 如果图片alpha通道,则可以通过以下方式获取alpha通道数据: - 如果alpha通道使用8位整数表示(范围在0-255之间),可以使用如下代码获取alpha通道数据:alpha_channel = image[:, :, 3] - 如果alpha通道使用32位浮点数表示(范围在0.0-1.0之间),可以使用如下代码获取alpha通道数据:alpha_channel = image[:, :, 3] / 255.0 5. 最后,可以根据需要使用alpha通道数据进行后续处理,比如可视化或者图像合成等操作。 注意:在使用cv2读取PNG图片时,如果图片alpha通道使用了不同的数据类型,可能会导致获取结果不准确。因此,需要根据具体情况选择合适的处理方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值