java 从Web服务中保存图像而不会丢失质量

gcuhipw9  于 2023-08-01  发布在  Java
关注(0)|答案(1)|浏览(119)

所以,下载方法是:

private void imageDownload(String file_path) throws IOException {
    OkHttpClient okHttpClient = new OkHttpClient();
    Request request = new Request.Builder()
            .url(url)
            .build();
    Call call = okHttpClient.newCall(request);
    Response response = call.execute();
    saveImage(response);
   }

字符串
保存方法为:

public void saveImage(Response response) throws IOException {
        InputStream inputStream = response.body().byteStream();
        BufferedImage image = ImageIO.read(inputStream);
        File outputFile = new File("images/"+ new Date() + ".png");
        ImageOutputStream ios = new FileImageOutputStream(outputFile);
        ImageWriter writer = ImageIO.getImageWritersByFormatName("png").next();
        ImageWriteParam param = writer.getDefaultWriteParam();
        param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
        writer.setOutput(ios);            
        writer.write(image);
    }


结果是:
源图像看起来像source cat image
下载并保存后的图像:


的数据
是的,它是真实的的大小。
图片来源:3872x2592.jpeg  
下载的图像为90x60.png  
我该怎么做才能解决这个问题?我尝试了不同的图像格式,但它没有帮助。

l2osamch

l2osamch1#

我第一次尝试下载图像时,我得到了一个162字节的结果,但第二次它对我来说工作得很好,我得到了正确的分辨率,所以也许可以尝试再次运行您的代码?或者,您也可以在浏览器中打开图像,然后按CTRL(或Mac上的CMD)+ S保存图像。我也不知道为什么你有这么复杂的代码来保存你的图像,因为Files.write(Path.of(file), new URL(url).openStream().readAllBytes());应该做的很好。

相关问题