Django ImageKit和PIL

时间:2015-09-17 22:38:49

标签: python django python-imaging-library pillow django-imagekit

我正在使用django图像并创建自定义处理器。我想找出KB(或字节)的大小,但无法这样做。 size属性给出尺寸而不是文件的大小。我是一个新手所以只能找到PIL的attr来获取有关图像的更多信息,但它们实际上都没有给出文件大小的字节数。

我为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']

2 个答案:

答案 0 :(得分:1)

在文件的实际路径上使用os.stat来获取字节大小,然后除以1024得到KB:

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

答案 1 :(得分: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)