Python 带有 Django .thumbnail() 的枕头不符合我声明的尺寸
Python Pillow with Django .thumbnail() not respecting the sizes I declare
我正在尝试使用 Pillow 调整图像大小,但它无法正常工作,我总是得到一个非常小的图像。我需要三种不同的尺寸,这就是我这样做的原因:
# Save Base64 Images
cover = Image.open(StringIO.StringIO((base64.b64decode(cover_image_64))))
cover_original = cover
cover_small = cover
cover_medium = cover
small_size = ProductCover.IMAGE_SIZES["small"]
medium_size = ProductCover.IMAGE_SIZES["medium"]
print(small_size)
print(medium_size)
# HERE->
cover_small.thumbnail(small_size, Image.ANTIALIAS)
cover_medium.thumbnail(medium_size, Image.ANTIALIAS)
original_image_file = StringIO.StringIO()
small_image_file = StringIO.StringIO()
medium_image_file = StringIO.StringIO()
cover_small.save(small_image_file, format="JPEG")
cover_medium.save(medium_image_file, format="JPEG")
cover_original.save(original_image_file, format="JPEG")
ProductCover.objects.create(product=product,
original=InMemoryUploadedFile(original_image_file, None, "cover_original.jpg",
"image/jpeg", original_image_file.len, None),
medium=InMemoryUploadedFile(medium_image_file, None, "cover_medium.jpg",
"image/jpeg", medium_image_file.len, None),
small=InMemoryUploadedFile(small_image_file, None, "small_small.jpg",
"image/jpeg", small_image_file.len, None))
打印语句将此打印到控制台:
(60, 60)
(512, 512)
为什么我得到三张60*60的图片?
代码看起来如此直接和简单,以至于我完全迷失了。也许是 Django。我不知道。
您在此处将同一个对象引用分配给三个变量名称:
cover_original = cover
cover_small = cover
cover_medium = cover
因为所有三个都指向同一个对象,所以对其中任何一个调用 .thumbnail()
都会修改其他对象。尝试使用 Image.copy()
克隆图像:
cover_original = cover.copy()
cover_small = cover.copy()
cover_medium = cover.copy()
我正在尝试使用 Pillow 调整图像大小,但它无法正常工作,我总是得到一个非常小的图像。我需要三种不同的尺寸,这就是我这样做的原因:
# Save Base64 Images
cover = Image.open(StringIO.StringIO((base64.b64decode(cover_image_64))))
cover_original = cover
cover_small = cover
cover_medium = cover
small_size = ProductCover.IMAGE_SIZES["small"]
medium_size = ProductCover.IMAGE_SIZES["medium"]
print(small_size)
print(medium_size)
# HERE->
cover_small.thumbnail(small_size, Image.ANTIALIAS)
cover_medium.thumbnail(medium_size, Image.ANTIALIAS)
original_image_file = StringIO.StringIO()
small_image_file = StringIO.StringIO()
medium_image_file = StringIO.StringIO()
cover_small.save(small_image_file, format="JPEG")
cover_medium.save(medium_image_file, format="JPEG")
cover_original.save(original_image_file, format="JPEG")
ProductCover.objects.create(product=product,
original=InMemoryUploadedFile(original_image_file, None, "cover_original.jpg",
"image/jpeg", original_image_file.len, None),
medium=InMemoryUploadedFile(medium_image_file, None, "cover_medium.jpg",
"image/jpeg", medium_image_file.len, None),
small=InMemoryUploadedFile(small_image_file, None, "small_small.jpg",
"image/jpeg", small_image_file.len, None))
打印语句将此打印到控制台:
(60, 60)
(512, 512)
为什么我得到三张60*60的图片?
代码看起来如此直接和简单,以至于我完全迷失了。也许是 Django。我不知道。
您在此处将同一个对象引用分配给三个变量名称:
cover_original = cover
cover_small = cover
cover_medium = cover
因为所有三个都指向同一个对象,所以对其中任何一个调用 .thumbnail()
都会修改其他对象。尝试使用 Image.copy()
克隆图像:
cover_original = cover.copy()
cover_small = cover.copy()
cover_medium = cover.copy()