Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对于压缩图像的请求,是否更关心请求的速度或压缩图像的大小?_Java_Spring Boot_Request_Compression_Storage - Fatal编程技术网

Java 对于压缩图像的请求,是否更关心请求的速度或压缩图像的大小?

Java 对于压缩图像的请求,是否更关心请求的速度或压缩图像的大小?,java,spring-boot,request,compression,storage,Java,Spring Boot,Request,Compression,Storage,我正在制作一个API,用户可以上传个人资料图片。它仍处于开始阶段,但我想知道它的扩展方面。 我使用SpringBoot实现这个功能,它有两个库,我不确定该选择哪个库 鳞片 第一次测试:原始图片大小:17MB。压缩后:300kb,质量正常。请求速度:350毫秒 第二次测试:原尺寸2MB。压缩后:200kb,质量正常。请求速度:300毫秒 指钉器 第一次测试:原始图片大小:17MB。压缩后:140kb,质量好。请求速度:1.4秒 第二次测试:原尺寸2MB。压缩后:99kb,质量好。请求速度:

我正在制作一个API,用户可以上传个人资料图片。它仍处于开始阶段,但我想知道它的扩展方面。 我使用SpringBoot实现这个功能,它有两个库,我不确定该选择哪个库

  • 鳞片
第一次测试:原始图片大小:17MB。压缩后:300kb,质量正常。请求速度:350毫秒

第二次测试:原尺寸2MB。压缩后:200kb,质量正常。请求速度:300毫秒

  • 指钉器
第一次测试:原始图片大小:17MB。压缩后:140kb,质量好。请求速度:1.4秒

第二次测试:原尺寸2MB。压缩后:99kb,质量好。请求速度:830ms

(所有测试均使用相同的2张图片)

如您所见,Scalr速度更快,但会创建更糟糕的图片和更大的文件大小。拇指钉器正好相反

我很可能会将这些图像保存到S3或Google存储中,目前还不确定

因此,我的问题是,是否最好使用更小的文件,这样可以降低存储成本(Thumbnailator),但请求时间更长,从而更快地使用功能更强大的服务器、负载平衡器等,这意味着一切都更昂贵

请求速度越快,文件越大越好,这意味着存储成本越高/图像下载速度越慢(Scalr)

我对缩放API不是很有经验,但300ms vs 800和350ms vs 1400 ms是一笔巨大的交易,对吗?事实上,我知道服务器比存储要贵得多,但我不确定在最坏的情况下1.4秒是不是很糟糕。。。如果有更大的图像,时间可能更长

如果有人知道更好的压缩库,甚至知道如何手动操作,我愿意接受建议

Scalr代码:

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