获取网络的一张图片,但是某种需要,要把获取的这段流输入换为BufferedImage流,有的地方还需要转换为byte[].
获得图片地址,获得了一个图片输入流,例如:
Url img = new URL(url);
InputStream in =
img.openStream();
接着把输入流转为BufferedImage:
JPEGImageDecoder decoderFile =
JPEGCodec.createJPEGDecoder(in);
BufferedImage
image = decoderFile.decodeAsBufferedImage();
或者 BufferedImage bi = ImageIO.read(in);
如果根据这个图片对象,重新draw了一个新的bufferedImage以后,怎么才能获得它的byte数组呢?
通过ImageIO对象进行操作:ImageIO.write(bufferedImage, "jpg", bos);
这样就可以根据bos输出流获得byte数组了,减少了通过File进行一次io操作的必要。
这个也对缓存图片有一定的意义。
【转载地址:】http://happyin1111.blog.163.com/blog/static/164184801201131432038992/
if (null != files && files.length > 0) { for (MultipartFile file : files) { //主图 byte[] byteArray = new byte[0]; byteArray = file.getBytes(); //缩略图 BufferedImage image = Thumbnails.of(file.getInputStream()).size(224, 300).asBufferedImage(); ByteArrayOutputStream os = new ByteArrayOutputStream(); String fileName = file.getOriginalFilename(); String fileType = fileName.substring(fileName.lastIndexOf(".") + 1); ImageIO.write(image, fileType, os); //base String content = Base64Utils.encodeToString(byteArray); String thumbnailContent = Base64Utils.encodeToString(os.toByteArray()); threadPoolTaskExecutor.execute(new Runnable() { @Override public void run() { try { logger.info("执行线程任务开始前" + file.getOriginalFilename()); clientUploadImage(file, content, thumbnailContent, user, batchId, batchNum); } catch (Exception e) { logger.error("图片识别失败", e); } } }); } }