如何使用Java在浏览器上显示图像?

时间:2018-05-31 15:00:11

标签: java html json spring rest

我有一个返回BufferedImage值的网络服务,但我无法在浏览器中显示该图片,因为我知道我已将其从byte[]转换为BufferedImage

我收到的结果如下。

这是我转换byte[]数据的方式(我可以看到byte[]中的数据):

ResponseEntity<byte[]> result =  new RestTemplate(messageConverters).exchange(new URI(url), HttpMethod.GET, httpEntity,  byte[].class );
try {
    BufferedImage img = ImageIO.read(new ByteArrayInputStream(result.getBody()));
    return img;
} catch (IOException e) {
    e.printStackTrace();
}

我得到这样的东西:

{  
   "accelerationPriority":0.5,
   "colorModel":{  
      "transparency":3,
      "numComponents":4,
      "numColorComponents":3,
      "colorSpace":{  
         "type":5,
         "numComponents":3,
         "profile":{  
            "mediaWhitePoint":[  
               0.9504547,
               1.0,
               1.0890503
            ],
            "matrix":[  
               [  
                  0.43606567,
                  0.3851471,
                  0.1430664
               ],
               [  
                  0.2224884,
                  0.71687317,
                  0.06060791
               ],
               [  
                  0.013916016,
                  0.097076416,
                  0.71409607
               ]
            ],
            "data":"AAAMSGxjbXMCEAAAbW50clJHQiBYWVogB84AAgAJAAYAMQAAYWNzcE1TRlQAAAAASUVDIHNSR0IAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1sY21zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARY3BydAAAAVAAAAAzZGVzYwAAAYQAAABsd3RwdAAAAfAAAAAUYmtwdAAAAgQAAAAUclhZWgAAAhgAAAAUZ1hZWgAAAiwAAAAUYlhZWgAAAkAAAAAUZG1uZAAAAlQAAABwZG1kZAAAAsQAAACIdnVlZAAAA0wAAACGdmlldwAAA9Q...

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那么您在其余模板中已经拥有的第一个byte[]是源图像的完整内存表示。如果是这种情况,为什么要涉及BufferedImage?你不能直接从你的控制器返回byte [],并确保在http响应头中设置适当的mime类型。

 @GetMapping("/")
    public ResponseEntity<byte[]> getImage() {
        final ResponseEntity<byte[]> result =  new RestTemplate(messageConverters).exchange(new URI(url), HttpMethod.GET, httpEntity,  byte[].class );
        return ResponseEntity.status(OK)
                .contentType(MediaType.IMAGE_JPEG)
                .body(result.getBody());
    }

另外,如果您只是通过服务将图像代理回客户端,则可能有更好的解决方案 - 例如spring cloud zuul或让客户端直接访问资源。可能有助于根据您的要求了解您所提供的图像。