zoukankan      html  css  js  c++  java
  • InputString 转换成 BufferedImage 和 byte[]

    获取网络的一张图片,但是某种需要,要把获取的这段流输入换为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);
                            }
                        }
                    });
                }
            }
  • 相关阅读:
    Hibernate关系映射(一) 基于外键的单向一对一
    Hibernate开发环境搭建
    Java创建和读取Json
    Json 简易教程
    jQuery Validate验证框架详解
    asp.net Core 3.1配置log4net
    HTTP 错误 500.21
    SQL中数据库 无法访问,并且数据库的属性中 使用人数、大小、可用空间全是不可用
    What is a CGFloat?
    Swift中的CGPoint ,CGSize 、CGRect、CGFloat
  • 原文地址:https://www.cnblogs.com/dand/p/10614513.html
Copyright © 2011-2022 走看看