Obtenez la taille d'un fichier image sur le Web (Python3, aucune bibliothèque supplémentaire requise)

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.

Matériel de référence

"Encyclopédie des formats de fichiers" de Dark Communication Group (ISBN4-87310-064-X)

Recommended Posts

Obtenez la taille d'un fichier image sur le Web (Python3, aucune bibliothèque supplémentaire requise)
[Python] Récupère le code de caractère du fichier
Obtenez la date de mise à jour du fichier de mémorandum Python.
Obtenir la taille (nombre d'éléments) de Union Find en Python
[Python] Obtenir la liste des noms ExifTags de la bibliothèque Pillow
Obtenez le nombre de lecteurs d'articles sur Mendeley en Python
Obtenez la largeur du div côté serveur avec Selenium + PhantomJS + Python
Python VBA pour obtenir une capture de la page WEB entière avec Selenium
Vérifier l'existence du fichier avec python
Télécharger des fichiers sur le Web avec Python
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
[Python3] Comprendre les bases des opérations sur les fichiers
Récupérer le contenu de git diff depuis python
[Python] Obtenir / modifier l'étiquette d'échelle de la figure
[Python] Obtenez les principaux sujets de Yahoo News
Récupérer l'appelant d'une fonction en Python
Traitement d'image? L'histoire du démarrage de Python pour
[Python] Obtenez la dernière date de mise à jour du site Web
Demandez aux pandas de lire le fichier zip sur le Web
Au moment de la mise à jour de python avec ubuntu
Convertir le code de caractère du fichier avec Python3
[Python] Get the day (anglais et japonais)
[Python + OpenCV] Peignez la partie transparente de l'image en blanc
Obtenez les résultats de la recherche de balises de la vidéo Nico Nico au format XML. (Aucune connexion requise)
[Python3] Prenez une capture d'écran d'une page Web sur le serveur et recadrez-la davantage
Récapitulatif des versions de la bibliothèque Python standard qui sont désormais validées par le serveur sur https
Extraire le tableau des fichiers image avec OneDrive et Python
Modèle de script python pour lire le contenu du fichier
Comment obtenir le nombre de chiffres en Python
[Python] Récupérez le texte de la loi à partir de l'API e-GOV law
[Python] Obtenez les nombres dans l'image graphique avec OCR
Obtenez l'image de "Suzu Hirose" par recherche d'images Google.
Créez un fichier image à l'aide de PIL (Python Imaging Library).
[python] Récupère la liste des classes définies dans le module
Installez la bibliothèque python tierce sur Cinema4D
Récupérer le code retour d'un script Python depuis bat
[Python] Enregistrez le résultat du scraping Web de la page produit Mercari sur Google Colab dans une feuille de calcul Google et affichez également l'image du produit.
Obtenez l'état de fonctionnement de JR West avec Python
[Python] Obtenez le nombre de vues de tous les articles publiés
Obtenez l'URL de la destination de la redirection HTTP en Python
[Introduction à Python] Utilisation basique de la bibliothèque matplotlib
Python> bibliothèque> os> os.walk ()> Obtenir la structure du répertoire / l'implémentation pour obtenir chaque chemin de fichier dans le répertoire spécifié
Un programme qui redimensionne automatiquement la taille d'image requise pour les icônes d'application iOS en Python
le zen de Python
J'ai essayé de trouver l'entropie de l'image avec python
Mettez la dernière version de Python dans Linux (Debian) du Chromebook
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
Essayez d'obtenir la liste des fonctions du paquet Python> os
Test.py n'est pas reflété sur le serveur Web dans Python3.
Sakura L'histoire du fonctionnement de la bouteille Python sur Internet
Obtenez uniquement la version Python (telle que 2.7.5) sur le shell CentOS 7
Exécutez l'intelligence de votre propre bibliothèque python avec VScode.
Obtenez le type MIME en Python et déterminez le format de fichier
Obtenez le nombre d'éléments spécifiques dans la liste python
[Note] Importation de fichiers dans le répertoire parent en Python
Traitement linguistique 100 knocks-29: Obtenez l'URL de l'image du drapeau
(Python3) Non oO (Utilisez-vous la bibliothèque standard?): 5 shaders