使用Pillow调整ImageField

时间:2018-02-19 15:37:49

标签: python django pillow imagefield

我是python的新手并试图在我的模型中使用ImageField。我有一些与我想要上传的Django项目分开的文件中的图像。

所以我有一个Django模型

class Product(models.Model):
    img_thumbnail = models.ImageField(upload_to='products_images',
                                      blank=True, null=True)

在我上传图片的转换代码中,我想生成特定高度的缩略图,因此我无法使用:

img = Image.open(file_path)
img.thumbnail()

相反,我计算了必要的宽度并使用Pillow调整它的大小。

img = Image.open(file_path)
h_percent = (75/ float(img.size[1]))
if h_percent < 1:
    width = int((float(img.size[0]) * float(h_percent)))
    img = img.resize((width, base_height), Image.ANTIALIAS)
filename = os.path.basename(file_path)

工作正常但当我尝试将其保存到ImageField时,我收到一个错误:AttributeError:'JpegImageFile'对象没有属性'content'

product.img_thumbnail.save(filename, img, True)

在网上搜索时,我发现了对SimpleUploadedFile的引用。因此,请使用后缀编写已调整大小的图像。我收到了另一个错误; :'charmap'编解码器无法解码251位的字节0x81:字符映射到

file_root, file_ext = os.path.splitext(file_path)
new_file_name = file_root + '_thumbnail' + file_ext
img.save(new_file_name)
filename = os.path.basename(file_path)
with open(new_file_name) as infile:
    _file = SimpleUploadedFile(filename, infile.read())

那我该怎么办?我正在使用Python 3.6和Django 2.0 谢谢你的帮助

0 个答案:

没有答案