Исходный код django.core.files.images

"" " 
Служебные функции для работы с изображениями.

Как вы понимаете, требуется подушка. 
"" " 
import  struct 
import  zlib

из  django.core.files  импорта  файла


[docs] class ImageFile ( File ): "" " Миксин для использования вместе с django.core.files.base.File, который предоставляет дополнительные возможности для работы с изображениями. " "" @property def width ( self ): return self . _get_image_dimensions () [ 0 ] @property def height ( self ): вернуть себя . _get_image_dimensions () [ 1 ] def _get_image_dimensions ( self ): если не hasattr ( self , '_dimensions_cache' ): close = self . закрытое я . open () self . _dimensions_cache = get_image_dimensions ( self , close = close ) вернуть себя . _dimensions_cache
def get_image_dimensions ( file_or_path , close = False ): "" " Возвращает (ширину, высоту) изображения, учитывая открытый файл или путь. Установите 'close' в True, чтобы закрыть файл в конце, если он изначально находится в открытое состояние. "" " из PIL импортировать ImageFile как PillowImageFile p = PillowImageFile . Parser (), если hasattr ( file_or_path , 'read' ): file = file_or_path file_pos = file . tell () файл . seek ( 0 ) else : file = open ( file_or_path , 'rb' ) close = True try : # В большинстве случаев Pillow требуется только небольшой кусок для анализа изображения # и получить размеры, но с некоторыми файлами TIFF Pillow необходимо # проанализировать весь файл. chunk_size = 1024, а 1 : данные = файл . прочтите ( размер_груза ), если не данные : прервать попытку : стр . feed ( данные ) кроме zlib . ошибка как e : # игнорируйте zlib, жалующийся на усеченный поток, просто подайте # больше данных в синтаксический анализатор (билет # 19457). если е . args [0 ] . startwith ( "Ошибка -5" ): передать else : поднять за исключением структуры . error : # Игнорировать сбой PIL для слишком короткого буфера, когда чтение возвращает # меньше байтов, чем ожидалось. Пропустите и загрузите больше данных в парсер # (билет № 24544). передать, кроме RuntimeError : # например, "RuntimeError: не удалось создать объект декодера" для # файлов WebP. Другой chunk_size может работать. пройти, если п . изображение : return p . изображение . размер chunk_size * = 2 return ( None , None ) наконец : если закрыть : файл . close () else : файл . искать ( file_pos )

Copyright ©2020 All rights reserved