Java 图片转二进制及生成图片

本文介绍如何使用Java实现图片到二进制的转换及从二进制数据生成图片的方法。通过实例展示了直接操作字节流的方式,并推荐了使用commons-codec库简化处理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java 图片转二进制及生成图片

根据上一篇文章而来,算是一个补充吧。

JAR包下载地址:http://download.csdn.net/detail/pplsunny/9635268

    import java.io.File;  
    import java.io.FileInputStream;  
    import java.io.FileNotFoundException;  
    import java.io.FileOutputStream;  
    import java.io.IOException;  
      
    public class Image2Binary  
    {  
        public static void main(String[] args)  
        {  
            String path = "V:/test.bmp";  
            File file = new File(path);  
            FileInputStream fis;  
            try  
            {  
                fis = new FileInputStream(file);  
                byte[] b;  
                b = new byte[fis.available()];  
                StringBuilder str = new StringBuilder();// 不建议用String  
                fis.read(b);  
                for (byte bs : b)  
                {  
                    str.append(Integer.toBinaryString(bs));// 转换为二进制  
                }  
                System.out.println(str);  
                File apple = new File("V:/test2.bmp");// 把字节数组的图片写到另一个地方  
                FileOutputStream fos = new FileOutputStream(apple);  
                fos.write(b);  
                fos.flush();  
                fos.close();  
            }  
            catch (FileNotFoundException e)  
            {  
                e.printStackTrace();  
            }  
            catch (IOException e)  
            {  
                e.printStackTrace();  
            }  
        }  
    }  

替代方案

 

最好的方式就是用其他jar包替换:
比如:commons-codec


maven: poml.xml 添加下面依赖

       <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.7</version>
        </dependency>

用org.apache.commons.codec.binary.Base64类进行编码


package ppl;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;

import org.apache.commons.codec.binary.Base64;

public class ImageTest {

	public static void main(String[] args) {
		//System.out.println(getImageBinary());

		base64StringToImage(getImageBinary());
		
		byte[] bytes1 = Base64.decodeBase64(getImageBinary());
		String savePath="C://templates";
		String saveName="121.jpg";
		int flag=saveToImgByStr(bytes1,savePath,saveName);
		System.out.println(flag);
	}

	static String getImageBinary() {
		//File f = new File("C://templates//ttt.jpg");
		File f = new File("C://templates//1474338877870.jpg");
		
		BufferedImage bi;
		try {
			bi = ImageIO.read(f);
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			ImageIO.write(bi, "jpg", baos);
			byte[] bytes = baos.toByteArray();

			return Base64.encodeBase64String(bytes);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	static void base64StringToImage(String base64String) {
		try {
			byte[] bytes1 = Base64.decodeBase64(base64String);

			ByteArrayInputStream bais = new ByteArrayInputStream(bytes1);
			BufferedImage bi1 = ImageIO.read(bais);
			File w2 = new File("C://templates//QQ.bmp");// 可以是jpg,png,gif格式
			ImageIO.write(bi1, "jpg", w2);// 不管输出什么格式图片,此处不需改动
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
     * 将接收的二进制流转换成图片保存
     * 
     * @param imgByte
     *            二进制流
     * @param imgPath
     *            图片的保存路径
     * @param imgName
     *            图片的名称
     * @return 1:保存正常 0:保存失败
     */
    public static int saveToImgByStr(byte[] imgByte, String imgPath,
            String imgName) {
        int stateInt = 1;
        if (imgByte.length > 0) {
            try {
                File validateCodeFolder = new File(imgPath);
                if (!validateCodeFolder.exists()) {
                    validateCodeFolder.mkdirs();
                }
                // 将字符串转换成二进制,用于显示图片
                // 将上面生成的图片格式字符串 imgStr,还原成图片显示
                InputStream in = new ByteArrayInputStream(imgByte);
                File file = new File(imgPath, imgName);// 可以是任何图片格式.jpg,.png等
                FileOutputStream fos = new FileOutputStream(file);
                byte[] b = new byte[1024];
                int nRead = 0;
                while ((nRead = in.read(b)) != -1) {
                    fos.write(b, 0, nRead);
                }
                fos.flush();
                fos.close();
                in.close();

            } catch (Exception e) {
                stateInt = 0;
                e.printStackTrace();
            } finally {
            }
        }
        return stateInt;
    }

}

Java 图片转二进制及生成图片
    import java.io.File;  
    import java.io.FileInputStream;  
    import java.io.FileNotFoundException;  
    import java.io.FileOutputStream;  
    import java.io.IOException;  
      
    public class Image2Binary  
    {  
        public static void main(String[] args)  
        {  
            String path = "V:/test.bmp";  
            File file = new File(path);  
            FileInputStream fis;  
            try  
            {  
                fis = new FileInputStream(file);  
                byte[] b;  
                b = new byte[fis.available()];  
                StringBuilder str = new StringBuilder();// 不建议用String  
                fis.read(b);  
                for (byte bs : b)  
                {  
                    str.append(Integer.toBinaryString(bs));// 转换为二进制  
                }  
                System.out.println(str);  
                File apple = new File("V:/test2.bmp");// 把字节数组的图片写到另一个地方  
                FileOutputStream fos = new FileOutputStream(apple);  
                fos.write(b);  
                fos.flush();  
                fos.close();  
            }  
            catch (FileNotFoundException e)  
            {  
                e.printStackTrace();  
            }  
            catch (IOException e)  
            {  
                e.printStackTrace();  
            }  
        }  
    } 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值