抽取jpeg内置的缩略图

来源:互联网 发布:灭佛运动 知乎 编辑:程序博客网 时间:2024/06/07 01:51

jpeg格式一般默认会内置一张缩略图在原图里面。以下是抽取此缩略图的代码:

 import java.io.DataInputStream;
import java.io.*;

public class Thumbnail {
 static byte[] preImg;
 
 
  static byte[] fImg;

  static String[] Fname;
  static int Fcount;
 static byte[] head;
 static byte[] end;
 public Thumbnail() {
  super();
  // TODO Auto-generated constructor stub
 }
 
 public static void readImage(String url) throws IOException{
    try {
    
     DataInputStream dis=new DataInputStream(new FileInputStream(new File(url)));
     int size = dis.available();
     preImg=new byte[size];
     for(int i=0;i<size;i++){
     
     preImg[i]=dis.readByte();
     
     
     }

     dis.close();
    
    } catch (FileNotFoundException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   
   
   
   }
   public static void writeImage(String fileName) throws IOException{
   
    FileOutputStream fos=new FileOutputStream( fileName);
   // System.out.println(f[0]);
    fos.write(fImg);
    fos.close();
   
   
   
   }
   public static void find(String dir)
   {
  
   File parent = new File(dir);
   File child[] = parent.listFiles();
   Fcount=child.length;
   Fname=new String[Fcount];
   for(int i = 0;i<child.length;i++)
   {
   if(child[i].isFile())
   {
    Fname[i]=child[i].toString();
    System.out.println("file"+Fname[i]);
    try {
    Thumbnail.readImage(Fname[i]);
    Thumbnail.moImage();
    Thumbnail.writeImage(Fname[i]);
    
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   
  
   }
   else
   {
  
   //find(child[i].toString());
   }
   }
   }

 private static void moImage() {
   // TODO Auto-generated method stub
  int start=0;
  int endl=0;
  head=new byte[2];
  head[0]=(byte) 0xFF;
  head[1]=(byte) 0xD8;
  end=new byte[2];
  end[0]=(byte) 0xFF;
  end[1]=(byte) 0xD9;
  for(int i=2;i<preImg.length-1;i++){
   if(preImg[i]==head[0]&&preImg[i+1]==head[1]){
    start=i;
    
   }
   if(preImg[i]==end[0]&&preImg[i+1]==end[1]){
    endl=i;
    break;
   }
  }
  if(start!=0){
  fImg=new byte[endl-start];
  System.arraycopy(preImg,start,fImg,0,fImg.length);
  }else{
   System.out.println("没有缩略图");
  }
 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Thumbnail.find("c:/1/");
 
 }

}