0

我正在使用 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']
4

2 回答 2

1

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

import os
filesize = os.stat('/path/to/somefile.jpg').st_size
print filesize/float(1024)
于 2015-09-17T22:56:40.467 回答
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)
于 2016-01-09T18:25:56.697 回答