0

Я использую изображение django и создаю пользовательский процессор. Я хочу узнать размер в KB (или байтах), но не могу этого сделать. Атрибут size определяет размеры, а не размер файла. Я новичок, так что мне удалось найти attr из PIL, чтобы получить больше информации об изображении, но ни один из них фактически не дает размер файла в байтах.Django ImageKit и PIL

У меня есть этот процессор для ModelForm.

Помогите с этим?

Я добавляю код, написанный до сих пор. Это скорее тестовый код;

import urllib 
import os 

class CustomCompress(object): 
    def process(self, image): 
     print 'image.width',image.width 
     print 'image.height',image.height 
     print 'image.size', image.size 
     print 'image.info', image.info 
     print 'image.tobytes', image.tobytes 
     print 'image.category', image.category 
     print 'image.readonly', image.readonly 
     print 'image.getpalette', image.getpalette 
     st = os.stat(image).st_size 
     print 'get_size ', st  

     return image 

Здесь представлен forms.py

class PhotoForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(PhotoForm, self).__init__(*args, **kwargs) 
     self.fields['old_image'] = ProcessedImageField(spec_id='myapp:test_app:old_image', 
              processors=[CustomCompress()], 
              format='JPEG', 

              # options={'quality': 60} 
              ) 

    class Meta: 
     model = Photo 
     fields = ['old_image'] 

ответ

1

использовать os.stat на фактический путь к файлу, чтобы получить размер в байтах, а затем разделить на 1024, чтобы получить KB:

import os 
filesize = os.stat('/path/to/somefile.jpg').st_size 
print filesize/float(1024) 
+0

Я получаю сообщение об ошибке: принуждать к Unicode: нужна строке или буфер, JpegImageFile нашел – Uma

+0

я обновил свой код, указанный выше в этом вопросе. – Uma

0

Размер в байтах будет зависеть от формата, в котором будет сохранено изображение. Например, если вы используете сжатый JPEG (низкое качество), изображение будет меньше PNG.

Если вы хотите увидеть размер, прежде чем сохранять его в файл, вы можете сохранить его в файле памяти, а затем получить размер.

from io import BytesIO 

class CustomCompress(object): 
    def process(self, image): 
     jpeg_file = BytesIO() 
     png_file = BytesIO() 

     image.save(jpeg_file, format='JPEG') 
     image.save(jpeg_file, format='PNG') 

     jpeg_size = len(jpeg_file.getvalue()) 
     png_size = len(png_file.getvalue()) 

     print('JPEG size: ', jpeg_size) 
     print('PNG size: ', png_size) 
Смежные вопросы