我可以将 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 存储桶中。
关于我们的实施,我有以下几个问题:
- 将所有图像存储在 AWS S3 存储桶中是一个好的解决方案吗?
- 我可以直接从 AWS S3 存储桶中获取所有图像文件的缩略图吗?如果是,我如何获取该缩略图?
- 我可以在每次上传图像时创建一个缩略图(大小约为 1KB)并将字节数组存储在 RDBMS 中吗? (这只是为了避免从 S3 存储桶中获取图像内容,因为这些缩略图仅用于预览目的)
- 我可以压缩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);
}
上面的代码对我的需求有点帮助
根据我们的项目要求,我们需要保存大小从 1KB 到 1MB 不等的艺术作品(JPG、PNG、TIFF 等图像格式的图像)。我们现在将它们存储在 AWS S3 存储桶中。
关于我们的实施,我有以下几个问题:
- 将所有图像存储在 AWS S3 存储桶中是一个好的解决方案吗?
- 我可以直接从 AWS S3 存储桶中获取所有图像文件的缩略图吗?如果是,我如何获取该缩略图?
- 我可以在每次上传图像时创建一个缩略图(大小约为 1KB)并将字节数组存储在 RDBMS 中吗? (这只是为了避免从 S3 存储桶中获取图像内容,因为这些缩略图仅用于预览目的)
- 我可以压缩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);
}
上面的代码对我的需求有点帮助