图片透明度处理

Alpha值的含义:
对于 RGBA(或 BGRA )数据, Alpha 通道中存储的 Alpha 值,实际上应该是 Opaque 值,即不透明度。当 Alpha 值为 255 时,表示不透明; Alpha 值为 0 时,表示全透明。
Alpha 值也经常用 0 ~ 1 这个区间的数字来表示。 0 表示全透明, 1 表示不透明。

Alpha 模式有两种,直接 Alpha 和预乘 Alpha 。

使用直接 Alpha 描述 RGBA 颜色时,颜色的 Alpha 值会存储在 Alpha 通道中。例如,若要描述具有 60% 不透明度的绿色,请使用以下值:(0 , 255 , 0 , 255 * 0.1) = (0 , 255 , 0 , 153)。值 255 指示全绿, 153(255 的 60%)指示颜色应具有 60% 的不透明度。

使用预乘 Alpha 描述 RGBA 颜色时,每种颜色都会与 Alpha 值相乘:(0 * 0.6, 255 * 0.6 , 0 * 0.6 , 255 * 0.6) = (0 , 153 , 0 , 153)。同时 Alpha 值也会存储在 Alpha 通道中。
PSD、TIF、TAG、PNG等格式支持Alpha通道,它们不仅支持红绿蓝三色通道而且还支持黑白灰通道。通常都是利用Alpha通道来保存抠图或者透明背景的图片。
JPEG格式不支持Alpha通道,所以无法对JPEG格式设置透明度。但可以先遍历JPEG格式图片每个像素,并且添加Alpha值,这样可以得到自己想要的透明度,但是一旦保存成JPEG格式,再次读取被图片会变成白色背景。

QImage *pi = new QImage(t_pchar2, 128, 128, QImage::Format_RGBA8888_Premultiplied);

这是把像素数据变成128*128大小的QImage图片,QImage::Format_RGBA8888_Premultiplied是解码格式,解码格式有许多,取决于t_pchar2里面存储的数据,如果里面数据是按照R, G,B, A排列。在需要Alpha值的情况下,只能选择QImage::Format_RGBA8888_Premultiplied

enum QImage::Format
QImage::Format_Invalid 图像无效
QImage::Format_Mono 存储使用1位每像素的图像,字节填充最重要位第一
QImage::Format_MonoLSB 存储使用1位每像素的图像,字节填充不显著位第一
QImage::Format_Indexed8 图像存储使用8位指标转化成Colormap
QImage::Format_RGB32 存储使用32位RGB格式的图像(0xffrrggbb)
QImage::Format_ARGB32 存储使用32为ARGB格式的图像(0xaarrggbb)
QImage::Format_ARGB32_Premultiplied 图像存储使用一个自左乘32位ARGB格式
QImage::Format_RGB16 图像存储使用5-6-5 16位RGB格式
QImage::Format_ARGB8565_Premultiplied 图像存储使用一个自左乘24位ARGB格式8-5-6-5
QImage::Format_RGB666 图像存储使用6-6-6 24位RGB格式,未使用的最重要的位总是为零
QImage::Format_ARGB6666_Premultiplied 图像存储使用一个自左乘24位ARGB格式6-6-6-6
QImage::Format_RGB555 图像存储使用16位RGB格式(5-5-5),位置用的最重要的始终为零
QImage::Format_ARGB8555_Premultiplied 图像存储使用一个自左乘24位ARGB格式8-5-5-5
QImage::Format_RGB888 图像存储使用8-8-8 24位RGB格式
QImage::Format_RGB444 图像存储使用16位RGB格式(4-4-4)未使用的位始终为零
QImage::Format_ARGB4444_Premultiplied 图像存储使用一个自左乘16位ARGB格式4-4-4-4
QImage::Format_RGBX8888 图像存储使用32位字节命令RGB(x)格式8-8-8-8
QImage::Format_RGBA8888 存储使用32位字节命令RGBA格式(8-8-8-8)的的图像
QImage::Format_RGBA8888_Premultiplied 图像存储使用一个自左乘32位字节命令RGBA格式8-8-8-8
QImage::Format_BGR30 存储使用32位BGR格式(x-10-10-10)的的图像
QImage::Format_A2BGR30_Premultiplied 图像存储使用32位自左乘abgr格式2-10-10-10
QImage::Format_RGB30 存储使用32位RGB格式(x-10-10-10)的的图像
QImage::Format_A2RGB30_Premultiplied 图像存储使用2-10-10-10 32位自左乘ARGB格式
QImage::Format_Alpha8 该图像是使用一个8位的阿尔法格式存储
QImage::Format_Grayscale8 图像是使用一个8位灰度格式存储
某些像素格式包含自左乘的颜色值。自左乘的意思是颜色值已与 alpha 值相乘。

常用颜色的RGB值如下:
颜色名 R值 G值 B值
红 255 0 0
蓝 0 0 255
绿 0 255 0
白 255 255 255
黄 255 255 0
黑 0 0 0
青 0 255 255

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pillow是一个Python图像处理库,它可以用来处理图像中的透明度。要处理图像的透明度,你可以使用Pillow中的`Image`类和相关的方法。 首先,你需要打开一张带有透明度的图像。你可以使用`open()`函数来打开图像文件,并将其赋值给一个变量。例如: ```python from PIL import Image image = Image.open("image.png") ``` 接下来,你可以使用`convert()`方法将图像转换为带有Alpha通道的模式。Alpha通道用于表示每个像素的透明度。例如,你可以将图像转换为RGBA模式: ```python image = image.convert("RGBA") ``` 现在,你可以使用`split()`方法将图像拆分为不同的通道。其中包括红色通道(R)、绿色通道(G)、蓝色通道(B)和Alpha通道(A)。例如: ```python red, green, blue, alpha = image.split() ``` 你可以对Alpha通道进行一些操作,如调整透明度、提取透明度值等。例如,使用`point()`方法可以对每个像素的透明度进行操作。以下是一个示例,将透明度设置为50%: ```python new_alpha = alpha.point(lambda p: p * 0.5) ``` 最后,你可以使用`merge()`方法将修改后的通道重新合并为一个图像: ```python new_image = Image.merge("RGBA", (red, green, blue, new_alpha)) ``` 现在,`new_image`就是处理后的图像,其中透明度已经被修改。 这只是使用Pillow处理图像透明度的其中一种方式。你还可以尝试其他方法和功能,根据你的具体需求来处理图像透明度

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值