最近,在研究图片转化为字节流以及字节流还原成图片的,
项目下载地址:http://download.csdn.net/detail/u010627840/9397506
代码如下:
package com.mybatis.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class TestImage {
public static void main(String[] args) throws Exception
{
//先模拟一个图形byte[]
byte[] b1 =image2Bytes("d:\\1.jpg");
//存为文件
buff2Image(b1,"d:\\test.jpg");
System.out.println("Hello World!");
}
static void buff2Image(byte[] b,String tagSrc) throws Exception
{
FileOutputStream fout = new FileOutputStream(tagSrc);
//将字节写入文件
fout.write(b);
fout.close();
}
static byte[] image2Bytes(String imgSrc) throws Exception
{
FileInputStream fin = new FileInputStream(new File(imgSrc));
//可能溢出,简单起见就不考虑太多,如果太大就要另外想办法,比如一次传入固定长度byte[]
byte[] bytes = new byte[fin.available()];
//将文件内容写入字节数组,提供测试的case
fin.read(bytes);
fin.close();
return bytes;
}
}
如何判断图片类型
import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.MemoryCacheImageInputStream; import javax.swing.*; import java.awt.image.BufferedImage; import java.io.*; import java.util.Iterator;
/** * 根据字节流获取图片类型 * */ public static String getImageType(byte[] imageBytes) { try { MemoryCacheImageInputStream memoryCacheImageInputStream = new MemoryCacheImageInputStream(new ByteArrayInputStream(imageBytes)); Iterator<ImageReader> itr = ImageIO.getImageReaders(memoryCacheImageInputStream); while (itr.hasNext()) { ImageReader reader = itr.next(); String imageName = reader.getClass().getSimpleName(); if (imageName != null) { if ("JPEGImageReader".equalsIgnoreCase(imageName)){ return "jpeg"; } if ("JPGImageReader".equalsIgnoreCase(imageName)) { return "jpg"; } if ("pngImageReader".equalsIgnoreCase(imageName)) { return "png"; } } } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } return null; }
如何改变图片格式
//把这个jpg图像写到这个流中去,这里可以转变图片的编码格式 boolean resultWrite = ImageIO.write(bu, "jpg", imageStream);