Lors de la collecte d'images sur le Web avec un robot d'exploration, etc., il se peut que vous souhaitiez obtenir uniquement la taille (résolution) de l'image sans télécharger l'intégralité du fichier image. Par conséquent, si vous regardez simplement l'en-tête du fichier, vous pouvez obtenir les informations souhaitées sans tout télécharger.
Voici le code source. J'ai confirmé l'opération avec Python 3.4.2 + OS X 10.10 (Yosemite). Il prend en charge les formats GIF, JPEG et PNG. Il n'y a pas besoin de bibliothèques supplémentaires telles qu'OpenCV.
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
Veuillez compenser la gestion des erreurs le cas échéant.
"Encyclopédie des formats de fichiers" de Dark Communication Group (ISBN4-87310-064-X)
Recommended Posts