无损压缩http://www.kenyabuzz.com/media/uploads/clients/kenya_buzz_2.jpg http://www.kenyabuzz.com/media/uploads/clients/kenya_buzz_2.jpg可以节省 594.3KiB(减少 92%)。
首先,日志中的信息不是很准确。
仅当原始图像未压缩且颜色数量非常少(理想情况下少于 256 种)时,才可能实现 92% 无损缩减。
无损压缩涉及减少图像的“位深度”,即如果颜色少于 256 种,则将 24 位图像转换为 8 位,这意味着每个像素节省 16 位。但对于您链接的图像来说这似乎不可能,因为它们有超过 256 种颜色。
其次,可以使用有损压缩格式“不失品质”– 差异是如此微妙,人眼甚至无法注意到。
Read 这个答案 https://stackoverflow.com/a/419602/1925257 and 这个答案 https://stackoverflow.com/a/7752936/1925257了解更多信息。真的,请阅读它们,两者都是与此问题相关的出色答案。
因此,我通过以下链接从您正在优化的网站下载了图像:http://www.kenyabuzz.com/media/uploads/clients/kenya_buzz_2.jpg http://www.kenyabuzz.com/media/uploads/clients/kenya_buzz_2.jpg
我打开 Python 控制台并写下了以下内容:
>>> from PIL import Image
>>> # Open the image
>>> im = Image.open("kenya_buzz_2.jpg")
>>> # Now save it
>>> im.save("kenya_buzz_compressed.jpg", format="JPEG", quality=70)
这在我的磁盘上创建了一个新映像。下面是两张图片。
原文 (655.3kB)
压缩(22.4kB ~96% 减少@质量=70)
你可以玩一下quality
选项。比如,价值80
将为您提供质量更好的图像,但尺寸稍大。
在 Django 中压缩图像
由于这是一个非常受欢迎的问题,我决定添加示例代码来在 Django 中压缩图像。
此代码适用于 Django >= 1.7。
from io import BytesIO
from PIL import Image
from django.core.files import File
def compress(image):
im = Image.open(image)
# create a BytesIO object
im_io = BytesIO()
# save image to BytesIO object
im.save(im_io, 'JPEG', quality=70)
# create a django-friendly Files object
new_image = File(im_io, name=image.name)
return new_image
这就是你如何使用上面的compress
在你的 Django 模型(或任何地方)中运行:
# models.py
class MyModel(...):
image = models.ImageField(...)
def save(self, *args, **kwargs):
# call the compress function
new_image = compress(self.image)
# set self.image to new_image
self.image = new_image
# save
super().save(*args, **kwargs)
基本上就是这样。这是相当基本的代码。您可以通过仅在图像更改时而不是每次保存模型时压缩图像来改进代码。