我正在使用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']
答案 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)