我可以将 1MB 的图像文件(PNG、JPG、TIFF 等)压缩成 ~1KB 的缩略图吗?

Can I compress a 1MB image file (PNG, JPG, TIFF, etc) into a ~1KB thumbnail?

根据我们的项目要求,我们需要保存大小从 1KB 到 1MB 不等的艺术作品(JPG、PNG、TIFF 等图像格式的图像)。我们现在将它们存储在 AWS S3 存储桶中。

关于我们的实施,我有以下几个问题:

  1. 将所有图像存储在 AWS S3 存储桶中是一个好的解决方案吗?
  2. 我可以直接从 AWS S3 存储桶中获取所有图像文件的缩略图吗?如果是,我如何获取该缩略图?
  3. 我可以在每次上传图像时创建一个缩略图(大小约为 1KB)并将字节数组存储在 RDBMS 中吗? (这只是为了避免从 S3 存储桶中获取图像内容,因为这些缩略图仅用于预览目的)
  4. 我可以压缩java中的图片吗?如何做到这一点才能获得最少的最小字节大小?

Amazon S3 是一种很好的图像存储服务,因为存储量没有限制,并且文件可以在 Internet 上访问(而不是必须通过您的应用程序为他们提供服务)。

Amazon S3 没有创建缩略图的内置功能。当新图像存储在 S3 存储桶中时,您可能会考虑触发 AWS Lambda 函数。参见:Tutorial: Using AWS Lambda with Amazon S3

将缩略图存储在 Amazon S3 而不是数据库中会更有效。使用预览图标创建 HTML 页面时,只需指向 Amazon S3 中的图标图像即可。然后,用户的浏览器将直接从 S3 获取它,而不是您的应用程序必须检索和提供图像。

如果您希望控制对图像和缩略图的访问,请使用 Amazon S3 pre-signed URLs 授予 对私有对象的限时访问权限

创建自己的缩略图的另一种方法是使用缩略图即服务产品之一,例如:

import java.awt.*;
import javax.imageio.*;
import org.imgscalr.Scalr;

void createThumbnailUsingScalr(File sourceImage) throws Exception {
        File destImage =
                new File("/Path/For/Destination/Thubnail.png");
            BufferedImage img = ImageIO.read(sourceImage);
            BufferedImage thumbImg = Scalr.resize(img, Scalr.Method.QUALITY, Scalr.Mode.AUTOMATIC, 200, 200, Scalr.OP_ANTIALIAS);
            ImageIO.write(thumbImg, "PNG", destImage);
    }

上面的代码对我的需求有点帮助