您將在此示例中學(xué)習(xí)如何找到j(luò)peg圖像的分辨率,而無(wú)需使用外部庫(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圖像文件的分辨率""" # 打開(kāi)圖像,以二進(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] # 接下來(lái)的兩個(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)制模式打開(kāi)了圖像。 非文本文件必須在此模式下打開(kāi)。 圖像的高度在第164位,然后是圖像的寬度。 兩者均為2個(gè)字節(jié)長(zhǎng)。
注意,這只適用于JPEG文件交換格式(JFIF)標(biāo)準(zhǔn)。如果您的映像使用其他標(biāo)準(zhǔn)(如EXIF)進(jìn)行編碼,則代碼將無(wú)法工作。
我們使用按位移位運(yùn)算符<<將2個(gè)字節(jié)轉(zhuǎn)換為數(shù)字。最后,顯示分辨率。