tinguo002

 

图片转字符串


事例1:
package com.apexsoft.mobile.utils;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class ImgToString {

    
public static String getImageStr(String imgFile) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
        
// String imgFile = "d:\\111.jpg";// 待处理的图片
        InputStream in = null;
        
byte[] data = null;
        
// 读取图片字节数组
        try {
            in 
= new FileInputStream(imgFile);
            data 
= new byte[in.available()];
            in.read(data);
            in.close();
        }
 catch (IOException e) {
            e.printStackTrace();
        }

        
// 对字节数组Base64编码
        BASE64Encoder encoder = new BASE64Encoder();
        
return encoder.encode(data);// 返回Base64编码过的字节数组字符串
    }


    
/**
     * 将字符串转为图片
     * 
     * 
@param imgStr
     * 
@return
     
*/

    
public static boolean generateImage(String imgStr, String imgFile)
            
throws Exception {// 对字节数组字符串进行Base64解码并生成图片
        if (imgStr == null// 图像数据为空
            return false;
        BASE64Decoder decoder 
= new BASE64Decoder();
        
try {
            
// Base64解码
            byte[] b = decoder.decodeBuffer(imgStr);
            
for (int i = 0; i < b.length; ++i) {
                
if (b[i] < 0{// 调整异常数据
                    b[i] += 256;
                }

            }

            
// 生成jpeg图片
            String imgFilePath = imgFile;// 新生成的图片
            OutputStream out = new FileOutputStream(imgFilePath);
            out.write(b);
            out.flush();
            out.close();
            
return true;
        }
 catch (Exception e) {
            
throw e;
        }

    }


    
public static void main(String[]args){
        String imgStr 
= ImgToString.getImageStr("C:\\Users\\think\\Pictures\\打开Intenet选项1.jpg");
        System.out.println(imgStr);
        
try {
            ImgToString.generateImage(imgStr, 
"D:\\3.jpg");
        }
 catch (Exception e) {
            e.printStackTrace();
        }

    }

    
}








事例2:
package com.apexsoft.mobile.utils;

import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

import javax.imageio.ImageIO;

public class ImgToString2 {

    
/**
     * @Title            getImgeHexString
     * @Description     网络图片转换成二进制字符串
     * 
@param URLName    网络图片地址
     * 
@param type        图片类型
     * 
@return    String    转换结果
     * 
@throws
     
*/

    
/*
    public static String getImgeHexString(String URLName,String type) {
        String res = null;
        try {
            int HttpResult = 0; // 服务器返回的状态
            URL url = new URL(URLName); // 创建URL
            URLConnection urlconn = url.openConnection(); // 试图连接并取得返回状态码
            urlconn.connect();
            HttpURLConnection httpconn = (HttpURLConnection) urlconn;
            HttpResult = httpconn.getResponseCode();
            System.out.println(HttpResult);
            if (HttpResult != HttpURLConnection.HTTP_OK) // 不等于HTTP_OK则连接不成功
                System.out.print("fail");
            else {
                BufferedInputStream bis = new BufferedInputStream(urlconn.getInputStream());

                BufferedImage bm = ImageIO.read(bis);
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                ImageIO.write(bm, type, bos);
                bos.flush();
                byte[] data = bos.toByteArray();

                res = byte2hex(data);
                bos.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }
*/

    
public static void main(String[]args){
        String imgStr 
= ImgToString2.getImgeHexString("C:\\Users\\think\\Pictures\\打开Intenet选项1.jpg");
        System.out.println(imgStr);
        
    }

    
public static String getImgeHexString(String imgFile) {
        String res 
= null;
        
try {
                InputStream in 
= null;
                
byte[] data = null;
                
// 读取图片字节数组
                
                    in 
= new FileInputStream(imgFile);
                    data 
= new byte[in.available()];
                    in.read(data);
                    in.close();
                
                BufferedInputStream bis 
= new BufferedInputStream(in);

                BufferedImage bm 
= ImageIO.read(bis);
                ByteArrayOutputStream bos 
= new ByteArrayOutputStream();
                ImageIO.write(bm, 
"jpg", bos);
                bos.flush();
                data 
= bos.toByteArray();

                res 
= byte2hex(data);
                bos.close();
            
        }
 catch (Exception e) {
            e.printStackTrace();
        }

        
return res;
    }

    
    
/**
     * @title            根据二进制字符串生成图片
     * 
@param data         生成图片的二进制字符串
     * 
@param fileName     图片名称(完整路径)
     * 
@param type        图片类型
     * 
@return
     
*/

    
public static void saveImage(String data, String fileName,String type) {

        BufferedImage image 
= new BufferedImage(300300,BufferedImage.TYPE_BYTE_BINARY);
        ByteArrayOutputStream byteOutputStream 
= new ByteArrayOutputStream();
        
try {
            ImageIO.write(image, type, byteOutputStream);
            
// byte[] date = byteOutputStream.toByteArray();
            byte[] bytes = hex2byte(data);
            System.out.println(
"path:" + fileName);
            RandomAccessFile file 
= new RandomAccessFile(fileName, "rw");
            file.write(bytes);
            file.close();
        }
 catch (IOException e) {
            e.printStackTrace();
        }

    }

    
    
/**
     * 反格式化byte
     * 
     * 
@param s
     * 
@return
     
*/

    
public static byte[] hex2byte(String s) {
        
byte[] src = s.toLowerCase().getBytes();
        
byte[] ret = new byte[src.length / 2];
        
for (int i = 0; i < src.length; i += 2{
            
byte hi = src[i];
            
byte low = src[i + 1];
            hi 
= (byte) ((hi >= 'a' && hi <= 'f'? 0x0a + (hi - 'a')
                    : hi 
- '0');
            low 
= (byte) ((low >= 'a' && low <= 'f'? 0x0a + (low - 'a')
                    : low 
- '0');
            ret[i 
/ 2= (byte) (hi << 4 | low);
        }

        
return ret;
    }


    
/**
     * 格式化byte
     * 
     * 
@param b
     * 
@return
     
*/

    
public static String byte2hex(byte[] b) {
        
char[] Digit = '0''1''2''3''4''5''6''7''8''9''A',
                
'B''C''D''E''F' }
;
        
char[] out = new char[b.length * 2];
        
for (int i = 0; i < b.length; i++{
            
byte c = b[i];
            out[i 
* 2= Digit[(c >>> 4& 0X0F];
            out[i 
* 2 + 1= Digit[c & 0X0F];
        }


        
return new String(out);
    }

    
}



 

欢迎大家访问我的个人网站 萌萌的IT人

posted on 2014-08-05 11:30 一堣而安 阅读(1538) 评论(0)  编辑  收藏 所属分类: java


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

收藏夹

搜索

最新评论

阅读排行榜

评论排行榜