如何获得位图图像的位深度
How to get bit depth of a bitmap image
我有一些图像,我想知道 .bmp 图像的位深度。这在 windows 中手动(属性>详细信息..)非常容易,但 google 似乎没有太多内容,我在这里看到的一个答案没有(对我来说)显示怎么做。
How to find the Bit Depth of an image
代码
import png as png
import numpy as np
r=png.Reader(filename = r'C:\Users\priper\Desktop\OPW_refac\grayscale.png')
a = r.read()
print(a[3]['bitdepth'])
或
from PIL import Image
import numpy as np
#Load the BMP file
img = Image.open(r'C:\Users\priper\Desktop\OPW_refac\HSS All As.bmp')
print(img, '\n')
print('bit depth :', img.mode)#this only tells me it is 8 pixels, I don't think it could tell me if it was 4.
#Or as a numpy array
img = np.array(Image.open(r'C:\Users\priper\Desktop\OPW_refac\HSS All As.bmp'))
print(img)
我可以读取 png 的位深度,但不知道哪个库可以如此轻松地从 bmp 中获取类似信息。
使用合适的库可能会更好,例如 wand
或 exiftool
,但如果您想要一些轻量级的东西,这可能就足够了 - 但我无法对其进行测试您尚未分享任何图片:
#!/usr/bin/env python3
import sys
import struct
# Read first 100 bytes
with open('a.bmp','rb') as f:
BMP = f.read(100)
if BMP[0:2] != b'BM':
sys.exit('ERROR: Incorrect BMP signature')
# Get BITMAPINFOHEADER size - https://en.wikipedia.org/wiki/BMP_file_format
BITMAPINFOHEADERSIZE = struct.unpack('<i',BMP[14:18])[0]
okSizes = [40, 52, 56, 108, 124]
if BITMAPINFOHEADERSIZE not in okSizes:
sys.exit(f'ERROR: BITMAPINFOHEADER size was {BITMAPINFOHEADERSIZE}, expected one of {okSizes}')
# Get bits per pixel
bpp = struct.unpack('<H',BMP[28:30])[0]
print(f'bbp: {bpp}')
我用 ImageMagick 创建了一个示例 BMP,如下所示:
magick -size 32x32 xc:red -define bmp:subtype=RGB565 a.bmp
然后我 运行 我的脚本得到 bpp:16
匹配 exiftool
输出:
exiftool a.bmp
ExifTool Version Number : 12.00
File Name : a.bmp
Directory : .
File Size : 2.1 kB
File Modification Date/Time : 2021:02:24 12:01:51+00:00
File Access Date/Time : 2021:02:24 12:01:52+00:00
File Inode Change Date/Time : 2021:02:24 12:01:51+00:00
File Permissions : rw-r--r--
File Type : BMP
File Type Extension : bmp
MIME Type : image/bmp
BMP Version : Windows V5
Image Width : 32
Image Height : 32
Planes : 1
Bit Depth : 16 <--- HERE IT IS
Compression : Bitfields
Image Length : 2048
Pixels Per Meter X : 0
Pixels Per Meter Y : 0
Num Colors : Use BitDepth
Num Important Colors : All
Red Mask : 0x0000f800
Green Mask : 0x000007e0
Blue Mask : 0x0000001f
Alpha Mask : 0x00000000
Color Space : sRGB
Rendering Intent : Picture (LCS_GM_IMAGES)
Image Size : 32x32
Megapixels : 0.001
然后我像这样创建了一个 24 位 BMP:
magick -size 32x32 xc:red a.bmp
我的 Python 和 exiftool
都报告 24 bpp。
关键字:Python。 BMP,图像处理,获取深度,位深度,bpp.
我有一些图像,我想知道 .bmp 图像的位深度。这在 windows 中手动(属性>详细信息..)非常容易,但 google 似乎没有太多内容,我在这里看到的一个答案没有(对我来说)显示怎么做。
How to find the Bit Depth of an image
代码
import png as png
import numpy as np
r=png.Reader(filename = r'C:\Users\priper\Desktop\OPW_refac\grayscale.png')
a = r.read()
print(a[3]['bitdepth'])
或
from PIL import Image
import numpy as np
#Load the BMP file
img = Image.open(r'C:\Users\priper\Desktop\OPW_refac\HSS All As.bmp')
print(img, '\n')
print('bit depth :', img.mode)#this only tells me it is 8 pixels, I don't think it could tell me if it was 4.
#Or as a numpy array
img = np.array(Image.open(r'C:\Users\priper\Desktop\OPW_refac\HSS All As.bmp'))
print(img)
我可以读取 png 的位深度,但不知道哪个库可以如此轻松地从 bmp 中获取类似信息。
使用合适的库可能会更好,例如 wand
或 exiftool
,但如果您想要一些轻量级的东西,这可能就足够了 - 但我无法对其进行测试您尚未分享任何图片:
#!/usr/bin/env python3
import sys
import struct
# Read first 100 bytes
with open('a.bmp','rb') as f:
BMP = f.read(100)
if BMP[0:2] != b'BM':
sys.exit('ERROR: Incorrect BMP signature')
# Get BITMAPINFOHEADER size - https://en.wikipedia.org/wiki/BMP_file_format
BITMAPINFOHEADERSIZE = struct.unpack('<i',BMP[14:18])[0]
okSizes = [40, 52, 56, 108, 124]
if BITMAPINFOHEADERSIZE not in okSizes:
sys.exit(f'ERROR: BITMAPINFOHEADER size was {BITMAPINFOHEADERSIZE}, expected one of {okSizes}')
# Get bits per pixel
bpp = struct.unpack('<H',BMP[28:30])[0]
print(f'bbp: {bpp}')
我用 ImageMagick 创建了一个示例 BMP,如下所示:
magick -size 32x32 xc:red -define bmp:subtype=RGB565 a.bmp
然后我 运行 我的脚本得到 bpp:16
匹配 exiftool
输出:
exiftool a.bmp
ExifTool Version Number : 12.00
File Name : a.bmp
Directory : .
File Size : 2.1 kB
File Modification Date/Time : 2021:02:24 12:01:51+00:00
File Access Date/Time : 2021:02:24 12:01:52+00:00
File Inode Change Date/Time : 2021:02:24 12:01:51+00:00
File Permissions : rw-r--r--
File Type : BMP
File Type Extension : bmp
MIME Type : image/bmp
BMP Version : Windows V5
Image Width : 32
Image Height : 32
Planes : 1
Bit Depth : 16 <--- HERE IT IS
Compression : Bitfields
Image Length : 2048
Pixels Per Meter X : 0
Pixels Per Meter Y : 0
Num Colors : Use BitDepth
Num Important Colors : All
Red Mask : 0x0000f800
Green Mask : 0x000007e0
Blue Mask : 0x0000001f
Alpha Mask : 0x00000000
Color Space : sRGB
Rendering Intent : Picture (LCS_GM_IMAGES)
Image Size : 32x32
Megapixels : 0.001
然后我像这样创建了一个 24 位 BMP:
magick -size 32x32 xc:red a.bmp
我的 Python 和 exiftool
都报告 24 bpp。
关键字:Python。 BMP,图像处理,获取深度,位深度,bpp.