您將在此示例中學(xué)習(xí)如何找到j(luò)peg圖像的分辨率,而無需使用外部庫(kù)
要理解此示例,您應(yīng)該了解以下Python編程主題:
JPEG(發(fā)音為“ jay-peg”)表示聯(lián)合圖像專家組。它是用于圖像壓縮的最廣泛使用的壓縮技術(shù)之一。
大多數(shù)文件格式都有標(biāo)頭(頭幾個(gè)字節(jié)),這些標(biāo)頭包含有關(guān)文件的有用信息。
例如,jpeg標(biāo)頭包含高度、寬度、顏色數(shù)量(灰度或RGB)等信息。在這個(gè)程序中,我們找到了讀取這些標(biāo)頭的jpeg圖像的分辨率,而不使用任何外部庫(kù)。
def jpeg_res(filename):
""""此函數(shù)打印傳遞到其中的jpeg圖像文件的分辨率"""
# 打開圖像,以二進(jìn)制模式讀取
with open(filename,'rb') as img_file:
# 圖片高度(以2個(gè)字節(jié)為單位)在第164位
img_file.seek(163)
# 讀取2個(gè)字節(jié)
a = img_file.read(2)
# 計(jì)算高度
height = (a[0] << 8) + a[1]
# 接下來的兩個(gè)字節(jié)是寬度
a = img_file.read(2)
# 計(jì)算寬度
width = (a[0] << 8) + a[1]
print("圖像的分辨率為",width,"x",height)
jpeg_res("img1.jpg")輸出結(jié)果
圖像的分辨率為 280 x 280
在此程序中,我們以二進(jìn)制模式打開了圖像。 非文本文件必須在此模式下打開。 圖像的高度在第164位,然后是圖像的寬度。 兩者均為2個(gè)字節(jié)長(zhǎng)。
注意,這只適用于JPEG文件交換格式(JFIF)標(biāo)準(zhǔn)。如果您的映像使用其他標(biāo)準(zhǔn)(如EXIF)進(jìn)行編碼,則代碼將無法工作。
我們使用按位移位運(yùn)算符<<將2個(gè)字節(jié)轉(zhuǎn)換為數(shù)字。最后,顯示分辨率。