Wenn Sie Bilder mit einem Crawler usw. im Web sammeln, kann es vorkommen, dass Sie nur die Größe (Auflösung) des Bildes erhalten möchten, ohne die gesamte Bilddatei herunterzuladen. Wenn Sie sich also nur den Header der Datei ansehen, können Sie die gewünschten Informationen abrufen, ohne alles herunterladen zu müssen.
Unten ist der Quellcode. Ich habe den Vorgang mit Python 3.4.2 + OS X 10.10 (Yosemite) bestätigt. Es unterstützt die Formate GIF, JPEG und PNG. Zusätzliche Bibliotheken wie OpenCV sind nicht erforderlich.
import sys
import struct
import urllib.request
def parse_jpeg(res):
while not res.closed:
(marker, size) = struct.unpack('>2sH', res.read(4))
if marker == b'\xff\xc0':
(_,height,width,_) = struct.unpack('>chh10s', res.read(size-2))
return (width,height)
else:
res.read(size-2)
def parse_png(res):
(_,width,height) = struct.unpack(">14sII", res.read(22))
return (width, height)
def parse_gif(res):
(_,width,height) = struct.unpack("<4sHH", res.read(8))
return (width, height)
def get_image_size(url):
res = urllib.request.urlopen(url)
size = (-1,-1)
if res.status == 200:
signature = res.read(2)
if signature == b'\xff\xd8': #jpg
size = parse_jpeg(res)
elif signature == b'\x89\x50': #png
size = parse_png(res)
elif signature == b'\x47\x49': #gif
size = parse_gif(res)
res.close()
return size
Bitte machen Sie die Fehlerbehandlung nach.
Dark Communication Group "Dateiformat-Enzyklopädie" (ISBN4-87310-064-X)