Java 图片 二进制转换

 1 import java.awt.image.BufferedImage;
 2 import java.io.ByteArrayInputStream;
 3 import java.io.ByteArrayOutputStream;
 4 import java.io.File;
 5 import java.io.IOException;
 6
 7 import javax.imageio.ImageIO;
 8
 9 import sun.misc.BASE64Decoder;
10 import sun.misc.BASE64Encoder;
11
12 public class TestImageBinary {
13     static BASE64Encoder encoder = new sun.misc.BASE64Encoder();
14     static BASE64Decoder decoder = new sun.misc.BASE64Decoder();
15
16     public static void main(String[] args) {
17         System.out.println(getImageBinary());
18
19         base64StringToImage(getImageBinary());
20     }
21
22     static String getImageBinary(){
23         File f = new File("c://20090709442.jpg");
24         BufferedImage bi;
25         try {
26             bi = ImageIO.read(f);
27             ByteArrayOutputStream baos = new ByteArrayOutputStream();
28             ImageIO.write(bi, "jpg", baos);
29             byte[] bytes = baos.toByteArray();
30
31             return encoder.encodeBuffer(bytes).trim();
32         } catch (IOException e) {
33             e.printStackTrace();
34         }
35         return null;
36     }
37
38     static void base64StringToImage(String base64String){
39         try {
40             byte[] bytes1 = decoder.decodeBuffer(base64String);
41
42             ByteArrayInputStream bais = new ByteArrayInputStream(bytes1);
43             BufferedImage bi1 =ImageIO.read(bais);
44             File w2 = new File("c://QQ.bmp");//可以是jpg,png,gif格式
45             ImageIO.write(bi1, "jpg", w2);//不管输出什么格式图片,此处不需改动
46         } catch (IOException e) {
47             e.printStackTrace();
48         }
49     }
50
51 }

问题是:转换后的图片颜色不对

其他人代码:

 1 package cn.com;
 2
 3 import java.io.FileInputStream;
 4 import java.io.FileOutputStream;
 5 import java.io.IOException;
 6 import java.io.InputStream;
 7 import java.io.OutputStream;
 8
 9 import sun.misc.BASE64Decoder;
10 import sun.misc.BASE64Encoder;
11
12 public class Base64Test
13 {
14     public static void main(String[] args)
15     {
16         String strImg = GetImageStr();
17         System.out.println(strImg);
18         GenerateImage(strImg);
19     }
20     //图片转化成base64字符串
21     public static String GetImageStr()
22     {//将图片文件转化为字节数组字符串,并对其进行Base64编码处理
23         String imgFile = "d://test.jpg";//待处理的图片
24         InputStream in = null;
25         byte[] data = null;
26         //读取图片字节数组
27         try
28         {
29             in = new FileInputStream(imgFile);
30             data = new byte[in.available()];
31             in.read(data);
32             in.close();
33         }
34         catch (IOException e)
35         {
36             e.printStackTrace();
37         }
38         //对字节数组Base64编码
39         BASE64Encoder encoder = new BASE64Encoder();
40         return encoder.encode(data);//返回Base64编码过的字节数组字符串
41     }
42
43     //base64字符串转化成图片
44     public static boolean GenerateImage(String imgStr)
45     {   //对字节数组字符串进行Base64解码并生成图片
46         if (imgStr == null) //图像数据为空
47             return false;
48         BASE64Decoder decoder = new BASE64Decoder();
49         try
50         {
51             //Base64解码
52             byte[] b = decoder.decodeBuffer(imgStr);
53             for(int i=0;i<b.length;++i)
54             {
55                 if(b[i]<0)
56                 {//调整异常数据
57                     b[i]+=256;
58                 }
59             }
60             //生成jpeg图片
61             String imgFilePath = "d://222.jpg";//新生成的图片
62             OutputStream out = new FileOutputStream(imgFilePath);
63             out.write(b);
64             out.flush();
65             out.close();
66             return true;
67         }
68         catch (Exception e)
69         {
70             return false;
71         }
72     }
73 }
时间: 2024-10-24 15:17:48

Java 图片 二进制转换的相关文章

java图片二进制相互转换

import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encode

图片-二进制之间的转换

一.图片转换二进制 public byte[] GetPictureData() { string path = System.AppDomain.CurrentDomain.BaseDirectory; //获取程序的基目录 path += "\\PrintImage\\test001.png"; // 需要转换为二进制的图片地址 FileStream Fs = new FileStream(path, FileMode.Open); // 使用文件流打开,并保存为byte[] by

Java基础数据类型二进制转换

前言: 本文主要介绍java基础类型的二进制转换和二进制的基本概念. 二进制: 1,二进制是以0和1为码,逢2进1,比如3=11=1*2+1. 2,在计算机当中其它进制的算法基本基于2进制,因为计算机只认识0和1,比如16进制数则意味着一位16进制码由4位2进制码数表示. 3,在Java语言中byte代表最小计量单位,byte由8位2进制数组成. Java基本数据类型与表示范围(boolean忽略) 1,byte(整型):8位,short(整型):16位,char(字符型):16位,int(整型

把图片转换成二进制--把二进制转换成图片

把图片转换成二进制--把二进制转换成图片 private void button1_Click(object sender, EventArgs e) { string path = this.textBox1.Text; byte[] imgBytesIn = SaveImage(path); ShowImgByByte(imgBytesIn); //Parameters.Add("@Photo", SqlDbType.Binary).Value = imgBytesIn; } //

java 图片转换工具

package com.sicdt.sicsign.web.utils; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import javax.i

基于Java图片数据库Neo4j 3.0.0发布 全新的内部架构

基于Java图片数据库Neo4j 3.0.0发布 全新的内部架构 Neo4j 3.0.0 正式发布,这是 Neo4j 3.0 系列的第一个版本.此版本对内部架构进行了全新的设计;提供给开发者更强大的生产力;提供更广阔的部署选择.Neo4j 3.0 被认为是世界上最具伸缩性的基于Java的图片数据库. Neo4j 3.0.0 主要的新特性: Neo4j 3.0 新特性架构图 全新设计了内部架构移除了所有节点数量限制,数据库关系和属性都可以被存储和索引提供官方支持语言驱动器 (Java.JavaSc

java中byte转换int时为何与0xff进行与运算

在剖析该问题前请看如下代码 public static String bytes2HexString(byte[] b) {  String ret = "";  for (int i = 0; i < b.length; i++) {   String hex = Integer.toHexString(b[i] & 0xFF);   if (hex.length() == 1) {    hex = ''0'' + hex;   }   ret += hex.toUp

Java进制转换

java进制转换java中进行二进制,八进制,十六进制,十进制间进行相互转换 十进制转成十六进制:Integer.toHexString(int i) 十进制转成八进制Integer.toOctalString(int i) 十进制转成二进制Integer.toBinaryString(int i) 十六进制转成十进制Integer.valueOf("FFFF",16).toString() 八进制转成十进制Integer.valueOf("876",8).toSt

Java数据类型的转换

Java数据类型的转换,基本类型的相互转换 1如何将字串 String 转换成整数 int? A. 有2个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([String],[int radix]); 2). int i = Integer.valueOf(my_str).intValue(); 注: 字串转成 Double, Float, Long 的方法大同小异. 2 如何将整数 int 转换成字串 Stri