InputString 转换成 BufferedImage 和 byte[]

摘要:
通过ImageIO对象进行操作:ImageIO.write;这样就可以根据bos输出流获得byte数组了,减少了通过File进行一次io操作的必要。这个也对缓存图片有一定的意义。

获取网络的一张图片,但是某种需要,要把获取的这段流输入换为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 = newByteArrayOutputStream();
                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(newRunnable() {
                    @Override
                    public voidrun() {
                        try{
                            logger.info("执行线程任务开始前" +file.getOriginalFilename());
                            clientUploadImage(file, content, thumbnailContent, user, batchId, batchNum);
                        } catch(Exception e) {
                            logger.error("图片识别失败", e);
                        }
                    }
                });
            }
        }

免责声明:文章转载自《InputString 转换成 BufferedImage 和 byte[]》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇sqlserver 多行转一行java web定时任务---quartz下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#读取Excel sheet方法

最近忙着思考项目优化的工作,发现以前 导入excel的时候,再执行“如何获取excel要导入的sheet名称”的时候特别慢,今天在网上找了比较好,并且更方便的方法; 原先导入excel代码如下: private void EcxelToGridView()        {            labelControl1.Text = " ";    ...

基于H5的混合开发介绍(一)WebView

转自: https://www.cnblogs.com/sanchang/p/9261461.html 一 WebView到底是什么      1 WebView是一种控件,它基于webkit引擎,因此具备渲染Web页面的功能。     2 基于Webview的混合开发,就是在 Anddroid os(安卓)/I os(苹果)原生APP里,通过WebVie...

dynamic-insert和dynamic-update属性

dynamic-insert 作用:设置对象中没有值的字段 insert并不会对其进行插入. 实体类映射配置如下 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.o...

分析各种Android设备屏幕分辨率与适配

一. 数据采集    源码GitHub地址 :  -- SSH : git@github.com:han1202012/DisplayTest.git; -- HTTP : https://github.com/han1202012/DisplayTest;   . 使用下面的程序运行在不同设备上 :   package shuliang.han.dis...

公钥与私钥

在对称加密的时代,加密和解密用的是同一个密钥,这个密钥既用于加密,又用于解密。这样做有一个明显的缺点,如果两个人之间传输文件,两个人都要知道密钥,如果是三个人呢,五个人呢?于是就产生了非对称加密,用一个密钥进行加密(公钥),用另一个密钥进行解密(私钥)。 1.公钥私钥原理 张三有两把钥匙,一把是公钥,另一把是私钥。    张三把公钥送给他的朋友们—-李四、...

ActiveMQ入门介绍

 1.JMS简介     JMS的全称是Java Message Service,即Java消息服务。它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息。把它应用到实际的业务需求中可以在特定的时候利用生产者生成消息,并进行发送,对应的消费者在接收到对应的消息后去完成对应的业务逻辑。对于消息的传递有两种类型,一种是点对点的,...