java - 对于压缩图像的请求,是关心请求的速度还是压缩图像的大小更好?
问题描述
我正在制作一个 API,用户可以在其中上传个人资料图片。它仍处于起步阶段,但我想知道这方面的扩展性。我为此使用 Spring boot,它归结为 2 个库,我不确定该选择哪个。
- 标尺
第一次测试:原始图片大小:17MB。压缩后:300kb,质量还行。请求速度:350ms
第二次测试:原始大小2MB。压缩后:200kb,质量还行。请求速度:300ms
- 缩略图器
第一次测试:原始图片大小:17MB。压缩后:140kb,质量不错。请求速度:1.4秒
第二次测试:原始大小2MB。压缩后:99kb,质量不错。请求速度:830ms
(所有测试使用相同的 2 张图片)
如您所见,Scalr 速度更快,但会创建更差的图片和更大的文件大小。Thumbnailator 正好相反。
我很可能会将这些图像保存到 S3 或 Google 存储中,目前还不确定。
所以我的问题是,拥有更小的文件是否更好,这会降低存储成本(Thumbnailator),但请求时间更长,导致更快地使用更强大的服务器、负载平衡器等,这意味着一切都更昂贵。
或者
最好有更快的请求速度,但更大的文件,这意味着更多的存储成本/更慢的图像下载(Scalr)。
我对扩展 API 没有太多经验,但是 300 毫秒 vs 800 和 350 毫秒 vs 1400 毫秒是一笔巨大的交易,对吧?事实上,我知道服务器比存储贵得多,但我不确定在最坏的情况下 1.4 秒是否很糟糕......而且如果图像更大,它可能会更长。
如果有人知道更好的压缩库,甚至知道如何手动完成,我愿意接受建议。
标尺码:
private MultipartFile compress(MultipartFile file) {
BufferedImage img = ImageIO.read(file.getInputStream());
BufferedImage thumbnail = resize(img,
Scalr.Method.BALANCED,
Scalr.Mode.AUTOMATIC,
1024,
768);
File outputfile = new File("C:some\\path\\compressed.jpg");
ImageIO.write(thumbnail, fileFormat, outputfile);
thumbnail.flush();
}
缩略图代码:
private MultipartFile compress(MultipartFile file) {
Thumbnails.of(file.getInputStream())
.size(1024, 768)
.outputQuality(0.4)
.toFile(new File(("C:some\\path\\compressed.jpg"));
}
我真的不需要在本地保存文件,我还没有弄清楚如何将压缩文件发送回函数调用者,以便我可以上传到 S3。
解决方案
推荐阅读
- python - 带有 conda 的 PyCharm 中的“ImportError:DLL 加载失败”:如何自动导入 conda 的 PATH?
- php - 遇到错误,无法加载请求的语言文件:language/english/sms_lang.php
- adfs - 设置本地环境以在 ADFS 登录时测试样式
- c# - Json.NET 中每个树节点序列化前后的自定义代码
- javascript - 'a' HTML 标签在幕后调用 window.location.assign?
- ms-access - 根据查询结果发送通知邮件
- multithreading - 在python中记录多线程死锁
- java - 如何使用 Java 在 HTML 中查找特定单词?
- c - 在 C 中管理内存,二维浮点数组
- sql - Oracle:如何限制“select .. for update skip locked”中的行数