最近在做一个图片算法
遇到一个问题,就是下面这个图片使用 python 的 PIL 图监测是一通道的
但是这个图片是彩色的,而且背景是透明的,但却是一个 jpg 图片
为什么?
- 我一直以为,只有 png 可以有透明图层,jpg 是不行的?
- 一通道不是灰色图片的意思吗?这个老虎图明显是彩色的呀
我使用 python 的 PIL 库,将老虎图转成 RGB 的时候,会有警告
image_path = 'tiger.jpg'
image = Image.open(image_path)
image = image.convert('RGB')
/Users/ponponon/.local/share/virtualenvs/image2vector-n-kX1tX6/lib/python3.8/site-packages/PIL/Image.py:979: UserWarning: Palette images with Transparency expressed in bytes should be converted to RGBA images
warnings.warn(
大概意思就是说,indexed image 应该转成 RGBA 而不是 RGB
为什么呢?
是因为 indexed image 都应该转成 RGBA,还是带有透明图层的 indexed image 应该转成 RGB 呢?
我知道 png 可以是 indexed image。另外,jpg、bmp、tif 等等也可以是 indexed image 吗?
从你的问题下载下来的图片就是 png。用 ImageMagick 看到是有 Alpha 通道的 PNG 。
详细结果如下:
文件系统里显示的类型,有可能只是根据扩展名判断的,并没有读取实际的文件内容。jpg 扩展名的文件里面存一个 png ,大部分画图、显示的软件也都还是可以处理的
图像存储里,还有一种叫 indexed color 。他的图像数据只有一个通道,其中的数据并不是颜色值,而是指向一个调色板的索引。调色板也是存储在图片里的,其中记录了图片中使用的所有颜色。这种图片并不是黑白的。说图片颜色的时候,有时会有 64色,256色,都是这种。64色、256色就是调色板里有64种颜色或者256种颜色。现在硬件性能好了,这种格式已经几乎不用了。
它的意思是,有 8 位透明度通道的图片应该转换成 RGBA 而不是 RGB 。透明度是存储在 Alpha 通道里的。
关于后一个补充,你其实应该问一个新问题的。你这样改问题,并不容易被人看到 ...