精华内容
下载资源
问答
  • 数据库(MySql、oracle等)使用Blob数据类型存储图像,java(1.6)现在支持bmp,jpg, wbmp, png, gif格式的图像。1从数据库中Blob转为java程序中的Image类实体:java.sql.Blob blob = rs.getBlob("Logo");InputStream fin...

    数据库(MySql、oracle等)使用Blob数据类型存储图像,java

    (1.6)现在支持bmp,jpg, wbmp, png, gif格式的图像。

    1从数据库中Blob转为java程序中的Image类实体:

    java.sql.Blob blob = rs.getBlob("Logo");

    InputStream fin = blob.getBinaryStream();

    Image im = javax.imageio.ImageIO.read(fin);

    2从数据库中Blob转存为硬盘中的图像文件:

    java.sql.Blob blob = rs.getBlob("Logo");

    InputStream fin = blob.getBinaryStream();

    //用文件模拟输出流File file = new File("d:\\output.gif");

    OutputStream fout = new FileOutputStream(file);

    //将BLOB数据写入文件byte[] b = new byte[1024];

    int len = 0;

    while ((len = fin.read(b)) != -1) {

    fout.write(b, 0, len);

    }

    3将磁盘中图像文件存入数据库的BLOB字段中(使用Bytes):

    FileInputStream fis = new FileInputStream(“D:\\logo.gif”);

    byte[] b = new byte[65000];//限制图像体积小于65KB

    fis.read(b);

    rs.updateBytes("Logo", b);

    将Bytes数组转为Image:

    BufferedImage imag=ImageIO.read(new ByteArrayInputStream(bytearray));

    4将磁盘中文件转为java程序中的Image类实体

    Image image = Toolkit.getDefaultToolkit().getImage("D:\\logo.gif");或Image image = javax.imageio.ImageIO.read(new FileInputStream("D:\\logo.gif"));

    5将java程序中的Image类实体转为磁盘中文件

    Image image;

    .......

    BufferedImage bufferedImage = (BufferedImage) image;

    try {

    ImageIO.write(bufferedImage, "PNG", new File("d:\\yourImageName.PNG"));//输出到png文件ImageIO.write(bufferedImage, "JPEG", new File("d:\\yourImageName.JPG"));//输出到jpg文件ImageIO.write(bufferedImage, "gif", new File("d:\\yourImageName.GIF"));//输出到gif文件ImageIO.write(bufferedImage, "BMP", new File("d:\\yourImageName.BMP"));//输出到bmp文件} catch (IOException e) {

    e.printStackTrace();

    }

    6将java程序中的Image类实体转为Byte数值后,存入数据库Blob字段中:

    首先将Image实体转为BufferedImage,可以参考网上的程序,如

    http://www.a3gs.com/BookViews.asp?InfoID=3111&classID=953&InfoType=0

    Image image;.......

    BufferedImage bi=Converter.toBufferedImage(image);

    ByteArrayOutputStream baos=new ByteArrayOutputStream(1024);

    ImageIO.write(bi, "jpg", baos);

    baos.flush();

    String base64String=Base64.encode(baos.toByteArray());

    baos.close();

    byte[] b = Base64.decode(base64String);

    rs.updateBytes("Logo", b);

    7得到屏幕中的图像:

    robot = new Robot();

    BufferedImage bimage = robot.createScreenCapture(new Rectangle(0, 0, 100, 100));

    Image image=bimage;

    展开全文
  • 最近做一个活动,需要上传logo并压缩图片到适合的尺寸,但是这次由于给予使用率不高,所以想把图片压缩存到数据库里面,然后再前台通过流将图片转换回来 主要使用了java的   <dependency>  &...

    最近做一个活动,需要上传logo并压缩图片到适合的尺寸,但是这次由于给予使用率不高,所以想把图片压缩存到数据库里面,然后再前台通过流将图片转换回来


    主要使用了java的       

               <dependency>
                    <groupId>im4java</groupId>
                    <artifactId>im4java</artifactId>
                    <version>1.1.0</version>
                </dependency>

     

    1、前台从controller过来

     

    @RequestMapping(method = RequestMethod.POST,value="/logo")
        public String uploadCompanyLogo(ModelMap model,@PathVariable Integer companyId,HttpServletRequest request) {
            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
            MultipartFile logo = multipartRequest.getFile("logo");
            MultipartFile portrait = multipartRequest.getFile("portrait");
            this.putCompanyInfo(model,companyId);
            try {
                if(logo!=null && !logo.isEmpty()){
                    byte[] big = imageOperationService.resiizeImage(ImageSizeEnum.LOGOBIGWIDTH.getValue(), ImageSizeEnum.LOGOBIGHEIGHT.getValue(), logo.getInputStream());
                    byte[] small = imageOperationService.resiizeImage(ImageSizeEnum.LOGOSMALLWIDTH.getValue(), ImageSizeEnum.LOGOSMALLHEIGHT.getValue(), logo.getInputStream());               
                    companyService.saveLogo(big, companyId);
                    companyService.saveLogoSmall(small, companyId);               
                }
                if(portrait!=null && !portrait.isEmpty()){
                    byte[] data = imageOperationService.resiizeImage(ImageSizeEnum.PORTRAITHEIGHT.getValue(), ImageSizeEnum.PORTRAITHEIGHT.getValue(), portrait.getInputStream());
                    companyService.updatePortrait(data, companyId);
                }
               
            } catch (IOException e) {
                // FIXME Auto-generated catch block
                e.printStackTrace();
            } catch (InterruptedException e) {
                // FIXME Auto-generated catch block
                e.printStackTrace();
            }
            return "company/manage/logo";
        }

     

     

     

    2,主要是我们service方法的实现了

    @Override
        public byte[] resiizeImage(int height, int width,InputStream Stream) throws IOException, InterruptedException {
            // FIXME Auto-generated method stub
            IMOperation op = new IMOperation();
             op.addImage("-");
             op.resize(height, width);
             op.addImage("-");

                Pipe pipeIn  = new Pipe(Stream,null);
                ByteArrayOutputStream fos = new ByteArrayOutputStream();
                Pipe pipeOut = new Pipe(null,fos);

               
                // set up command
                ConvertCmd convert = new ConvertCmd();
                convert.setInputProvider(pipeIn);
                convert.setOutputConsumer(pipeOut);

                try {
                    convert.run(op);
                } catch (IM4JavaException e) {
                    // FIXME Auto-generated catch block
                    e.printStackTrace();
                }
                Stream.close();       
                return fos.toByteArray();
        }

     

    这样我们就把这个图片的字节流放到了数据库中

     

    3、再来,我们就来显示这张图片

     

    public class ImageShowUtil {
       
        @Value(value = "#{globalProperties['company.business.big']}")
        private String biglogurl;
        @Value(value = "#{globalProperties['company.business.small']}")
        private String smalllogurl;
        @Value(value = "#{globalProperties['company.business.logo']}")
        private String logourl;

        private static final Logger logger = LoggerFactory.getLogger(ImageShowUtil.class);
        /**
         * 显示byte流图片
         * @param data
         * @param res
         * @throws IOException
         */
        @Cacheable(cacheName = "icoCache")
        public void showByteImage(byte data[],HttpServletResponse res,String type) throws IOException {

            try {
                res.setContentType("image/*"); // 设置返回的文件类型
                OutputStream toClient = res.getOutputStream(); // 得到向客户端输出二进制数据的对象
                if(data!=null&&data.length>0){
                 toClient.write(data); // 输出数据
                }else{
                 if("big".equals(type)){
                   URL url = new URL(biglogurl);
                   InputStream bis = new BufferedInputStream(url.openStream());
                   toClient.write(getBytes(bis)); // 输出数据
                   bis.close();
                 }else if("small".equals(type)){
                   URL url = new URL(smalllogurl);
                   InputStream bis = new BufferedInputStream(url.openStream());
                   toClient.write(getBytes(bis)); // 输出数据
                   bis.close();
                 }else{
                    URL url = new URL(logourl);
                    InputStream bis = new BufferedInputStream(url.openStream());
                    toClient.write(getBytes(bis)); // 输出数据
                    bis.close();
                 }
                 toClient.close();
                }
            } catch (IOException e) // 错误处理
            {
                logger.error("---------->error:"+e.getMessage());
    //            PrintWriter toClient = res.getWriter(); // 得到向客户端输出文本的对象
    //            res.setContentType("text/html;charset=UTF-8");
    //            toClient.write("无法打开图片!");
    //            toClient.close();
            }
        }
       
       
         public byte[] getBytes(InputStream is) throws IOException { 
                ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
                byte[] b = new byte[2048]; 
                int len = 0; 
                while ((len = is.read(b, 0, 2048)) != -1) { 
                 baos.write(b, 0, len); 
                } 
                baos.flush(); 
                byte[] bytes = baos.toByteArray();    
                return bytes; 
             }

    }

     

    这样我们页面的图片的src只想这个servlet就行了,图片就显示出来了

    ,这样不好就是,如果图片过多的话,每个图片相当于一个http请求,增加系统的负载

    展开全文
  • private byte[] emfToPng(InputStream is){//InputStream inputStream=null;byte[] by=null;EMFInputStream emf= null;...//创建储存图片二进制流的输出流ByteArrayOutputStream baos = null;//创建Image...

    private byte[] emfToPng(InputStream is){//InputStream inputStream=null;

    byte[] by=null;

    EMFInputStream emf= null;

    EMFRenderer emfRenderer= null;//创建储存图片二进制流的输出流

    ByteArrayOutputStream baos = null;//创建ImageOutputStream流

    ImageOutputStream imageOutputStream = null;try{

    emf= newEMFInputStream(is, EMFInputStream.DEFAULT_VERSION);

    emfRenderer= newEMFRenderer(emf);final int width = (int)emf.readHeader().getBounds().getWidth();final int height = (int)emf.readHeader().getBounds().getHeight();final BufferedImage result = newBufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

    Graphics2D g2=(Graphics2D)result.createGraphics();

    emfRenderer.paint(g2);//创建储存图片二进制流的输出流

    baos = newByteArrayOutputStream();//创建ImageOutputStream流

    imageOutputStream =ImageIO.createImageOutputStream(baos);//将二进制数据写进ByteArrayOutputStream

    ImageIO.write(result, "png", imageOutputStream);//inputStream = new ByteArrayInputStream(baos.toByteArray());

    by=baos.toByteArray();/*JPanel resultPanel = new JPanel() {

    private static final long serialVersionUID = 1L;

    public void paintComponent(Graphics g) {

    super.paintChildren(g);

    Graphics2D g2 = (Graphics2D)g;

    g2.drawImage(result, 0, 0, width, height,null);

    g2.dispose();

    }

    };

    JFrame ui = new JFrame("EMF Reader");

    ui.getContentPane().setLayout(new BorderLayout());

    ui.getContentPane().add(resultPanel, BorderLayout.CENTER);

    ui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    ui.setSize(new Dimension(width, height));

    ui.setVisible(true);*/}catch(FileNotFoundException e) {

    e.printStackTrace();

    }catch(IOException e) {

    e.printStackTrace();

    }finally{try{if(imageOutputStream!=null){

    imageOutputStream.close();

    }if(baos!=null){

    baos.close();

    }if(emfRenderer!=null){

    emfRenderer.closeFigure();

    }if(emf!=null){

    emf.close();

    }

    }catch(IOException e) {//TODO Auto-generated catch block

    e.printStackTrace();

    }

    }returnby;

    }

    展开全文
  • 字节流转图片

    2020-09-16 09:48:59
    ```java try { FileImageOutputStream imageOutput = new FileImageOutputStream(new File("D:\\20-m2\\test.jpg")); imageOutput.write(busiLicensePhoto, 0, busiLicensePhoto.length); imageOutput.close(); ...
    try {
                FileImageOutputStream imageOutput = new FileImageOutputStream(new File("D:\\20-m2\\test.jpg"));
    
                imageOutput.write(busiLicensePhoto, 0, busiLicensePhoto.length);
                imageOutput.close();
                System.out.println("Make Picture success,Please find image in " + "D:\\20-m2\\test.jpg");
    
            } catch (IOException e) {
                e.printStackTrace();
            }
    
    展开全文
  • private byte[] emfToPng(InputStream is){ // InputStream inputStream=null; byte[] by=null; EMFInputStream emf = null; ...//创建储存图片二进制流的输出流 ByteArrayOutputStream ba...
  • 假如需要复制一张图片,一份word,一个rar包。可以以字节流的方式,读取文件,然后输出到目标文件夹。以复制一张4M的图片举例。每次读一个字节:ch = (char)System.in.read(); //读入一个字符,返回读到的字节的int...
  • 系统学习JAVA第十七天 第一阶段在2021.2.1结束了!...应用场景:图片、视频、音频、压缩包,使用字节流的文档英文 InputStream、FileInputStream read方法是读取当前文件,一般是用byte数组存储数据,它有返回值,
  • [图片说明](https://img-ask.csdn.net/upload/201908/26/1566778911_15737.png) 老师说在这个isr.read(buffer,0,buffer,length)里可能会出现两种情况,一种是读到的数据太多buffer数组放不下,第二种是读到的数据...
  • Java文件流转换大全

    千次阅读 2019-03-28 11:30:55
    一、概念 在Java中,文件的输入和输出是通过流(Stream)来实现的。一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是...字节流的处理单位是字节,通常用来处理二进制文件,例如音乐、图片文件等...
  • 问题描述在拿到java des加密的数据和key,如何在Python中使用字节数组解密?问题出现的环境背景及自己尝试过哪些方法进行python自动化测试的时候,需要对数据进行解密对比相关代码// 请把代码文本粘贴到下方(请勿用...
  • SQL编辑器中储存图片的二进制的形式要用“image”的数据类型,而不是字符串(长度最大为8000)的类型,因为可能会存不下(亲身经历的总结)。案例1:在项目根目录新建一个txt文件,提示用户输入内容,知道输入“no”后...
  • 读取本地图片,转成base64编码字节数组字符串,传到前端。 2,这种传输图片的方式可以用于Java后台代码生成条形码二维码,直接转成base64传给前台展示。 @RequestMapping("/login") public String login(Map<...
  • JAVA--字节

    2019-03-17 11:15:23
    文章目录字节流1....二进制文件只能用字节流进行复制,如视频,图片,字符流只能复制字符文件; 字节强制转换为字符,根据码表,进行转换,会发生字节丢失现象复制会出现问题,字符流无法复制二进制文件;...
  • Java只提供了将字节流转为字符流的方法,并没有字符流转为字节流的方法。 因为字节流是一个通用的流,可以传输各种类型的资源,比如:文本、图片、音频等… 而字符流是一个特殊的流,只能传输文本类型的资源,但是它...
  • 本文结构字节流字符流异常的处理File类Properties集合缓冲流转换流对象序列化一点小问题IO 在Java中,I/O流分为字节流和字符流,分类如下: 根据操作对象主要分为: 1. 字节字节流可以传输任意文件数据,在操作流...
  • 初看Tigase的packet内部流转机制。Tigase通过tigase.io包当中的代码读取网络中的字节数组,然后通过tigase.net包当中的类把字节数组转换为字符,最后通过tigase.xml包当中的XML解析器把这些字符转换成XML DOM对象。...
  • java批量读取本地指定文件夹的所有图片批量读取本地图片转化为流批量将获取的文件url写出到本地txt文件字节流转化位bytes的方法 批量读取本地图片转化为流 File file = new File("E://testPics"); File[] files ...
  • java IO

    2015-08-31 17:33:03
    字节流可以处理任何文件,若是音乐文件可以把字节流转换成MP3格式,若是图片可以把字节流转换成图片的响应格式(在Android中通常是Bitmap),若处理的是文本文件通常需要转换成字符流,为了提高效率一般会使用带缓冲的...
  • // 将字节数组输出流转化为字节数组byte[] byte[] imagedata = baos.toByteArray(); String icon = Base64.encodeToString(imagedata, Base64.DEFAULT); return icon; } return null; } /** * ...
  • Java IO

    2012-08-21 17:23:20
    总之, InputStream/OutputStream 是面向字节的,主要用于图片、压缩、二进制数据等;...inputStream --> InputStreamReader 把字节流转化为字符流,并可以设定编码方式; OutputStream-->OutputSteamWriter 把字
  • Java之IO流学习总结

    2014-10-19 11:22:20
    InputStreamReader 是一个连接字节流和字符流的桥梁,它将字节流转变为字符流。FileReader 可以说是一个达到此功能、常用的工具类,在其源代码中明显使用了将FileInputStream 转变为Reader 的方法。我们可以从这个类...
  • 转换流的作用是将字节流转换成字符流。 字节流可以处理一切东西,包括图片、视频、音频、纯文本等,所以很多系统或则框架的底层返回给你的都是字节流。 System.in 和 System.out 都是字节流。 使用的前提是给的...
  • java中,提供字节流和字符流的互相转化,我们先来看看字节流和字符流的不同(找到一张清晰的图片,侵删) 为了便于记住,可以认为以steam结尾的就是字节流,在最前面的标识就可以区分这个流是干什么用的,以...
  • 我们在做一系统操作时会需要使用到数据流,比如接收网络数据,文件数据,图片数据,原始数据大多是以byte数组的形式提供,与其它语言(c#,java)交互时也是如此。 c++中byte数组是不能传递的,byte指针倒是可以传递,...
  • 缓冲、文件、基本类型、序列化、数组、管道、打印,以及字节流/字符流转换。 也不太难记忆-.-【图片来自javaguide】 2. 按照字节流/字符流: 除了Filter开头的,其它为基础字节流或基础字符流;Filter开头的是...
  • 开发中遇到一个问题,就是java返回给我一个16进制...3、将做Base64编码产生的字节流转换成16进制的字符串返回给前端 另外 报文传输的是字符串,不是字节流 我们收到的字符串转换成字节流,就是Base64编码的 然后我们...
  • 最后还是仿照了python直接将字节流转换为图片。 package com.example.xjj import okhttp3.* import java.io.* fun DownloadPicture(){ val client = OkHttpClient() val request = Request.Builder().get() .url...
  • 由于http只支持上传的数据转化为字符串,对于想直接上传图片较不容易,故可以先将其转化为字节流,再将字节流转化为字符串。在此过程中经常出现错误,故可以考虑先将其用base64进行加密编码,在服务器端或客户端在将...
  • 图片使用base64编码

    2021-01-19 17:54:19
    图片进行base64编码时 , 发现将图片流转为String再编码会无法解码 转成byte[] 进行编码可以正常解码 /** * @Description:输入流转换为字节数组 * @Date: 2020/12/16 20:01 * @Param: [inputStream, encode] * ...
  • 查看网络图片

    2015-08-20 17:10:00
    思路:通过httpConnection获取文件流,将文件流转字节数组,将数组装换为位图付给imageView 清单文件中加入<uses-permission android:name="android.permission.INTERNET"/> imageServise.java ...

空空如也

空空如也

1 2
收藏数 39
精华内容 15
关键字:

java字节流转图片

java 订阅