我正在使用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']发布于 2015-09-18 06:56:40
在文件的实际路径上使用os.stat,以字节为单位获取大小,然后除以1024,得到KB:
import os
filesize = os.stat('/path/to/somefile.jpg').st_size
print filesize/float(1024)发布于 2016-01-10 02:25:57
以字节为单位的大小因保存图像的格式而异。例如,如果使用高度压缩的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)https://stackoverflow.com/questions/32641051
复制相似问题