最近,在研究图片转化为字节流以及字节流还原成图片的,java
项目下载地址:http://download.csdn.net/detail/u010627840/9397506数组
代码以下:mybatis
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);