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

时间:2018-06-26 07:12:32

标签: java amazon-web-services amazon-s3 thumbnails image-compression

根据我们的项目要求,我们需要保存艺术品(JPG,PNG,TIFF等图像格式的图像),其大小可以在1KB至1MB之间。现在,我们将它们存储在AWS S3存储桶中。

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

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

2 个答案:

答案 0 :(得分:0)

Amazon S3是存储图像的好服务,因为存储量没有无限制,并且文件可以在互联网上访问(而不是拥有通过您的应用为他们提供服务。

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

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

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

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

答案 1 :(得分:0)

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);
    }

上面的代码并不能满足我的需求