0

我几乎完成了创建我的 web 应用程序。后端使用 Django。除其他外,该项目允许用户上传自己的图像并使用 CamanJS 对其进行调整。图像可以有不同的大小(5mp 或更多)和各种颜色。用数字表示,用户可能有大约。他的每个客户有 60 张图像,可能有 1000 个客户。因此,如果我们采用最坏的情况并说每个图像大约 3mb,我们就有

3x60 = 180mb for a client
1000x180 = 180.000mb or 180GB for all clients

知道我的应用程序将在线(可能通过)并且可能有很多用户处理图像大小的最佳方法是什么?如果我只是将 tha dataURL 保存到数据库(base64 格式)会更好。这会减少项目所需的高清空间的大小吗?我必须说重要的是图像不要丢失它们的初始细节。因此,如果要应用压缩,则不需要降低图像的质量。你认为最好的解决方案是什么?

4

2 回答 2

0

保存 Base64 编码的图像将需要大约 33% 的空间——每个 3 个原始字节块在 Base64 编码中表示为 4 个字节。如果您的图像是 JPEG,您不能期望在不影响图像质量的情况下获得任何有意义的额外压缩。

JPEG 图像已被压缩。额外的无损压缩(例如 zip)可能会产生更大的文件,因此您唯一的选择是以较低质量进行有损压缩。另请注意,对 JPEG 图像的任何修改都需要再次对其进行压缩,并且每次重新编码 JPEG 文件时都会损失一些质量。如果您想对图像进行反复调整,最好使用无损压缩格式(例如 PNG),但这样会产生比 JPEG 大得多的文件。

如果您要提供这种规模的图像服务,最好的解决方案是将图像作为常规文件存储在文件系统中,并实际提供这些文件所需的存储容量。将图像存储在数据库中不会给您带来性能优势,并且肯定会比文件系统存储需要更多空间(尽管可能不会太多)。如有必要,如果您使用的是物理基础架构,则可以通过使用固态存储(闪存驱动器)和/或 RAID 阵列来提高性能。使用 SaaS,您对存储没有太多控制权,但您的服务提供商可能已经在采用此类策略。

我没有看到一种简单的方法来降低在 SaaS 服务上为每位用户存储 60000 个 5mpix 图像的成本。投资专用的物理基础设施可能会降低一点成本,但维护自己的硬件也会有成本。您可能需要将存储成本计入您尝试提供的服务的价格中。

于 2014-04-07T07:51:10.157 回答
0

我认为最好的解决方案是在保存图像之前将图像调整为更小。

高清照片可以有非常大的尺寸。甚至比显示器的尺寸还要大。因此,如果您在保存之前将这些图像缩小,您将节省大量空间。

例如,我的计算机上有一张名为forest.jpg的照片,大小为 1.80 MB,尺寸为 3212x2150 像素。我的显示器尺寸为 1366x768 像素。你看,照片的宽度是我显示器宽度的两倍多。

这就是我所做的:

>>> from PIL import Image
>>> photo = "C:/users/weasel/desktop/forest.jpg"
>>> im = Image.open(photo)
>>> size = (1000, 1000)
>>> im.thumbnail(size, Image.ANTIALIAS) # thumbnail will maintain the aspect ratio
>>> out_photo = "C:/users/weasel/desktop/forest_resized.jpg"
>>> im.save(out_photo, 'JPEG', quality=85)

这样创建的新图像的PIL尺寸为 1000x669 像素,大小为 203 KB。我相信,由此发生的质量损失是人眼无法察觉的。

于 2014-04-07T07:58:29.523 回答