2010-12-05 13 views
0

Ich muss viele verschiedene große Tiff-Dateien in Java erstellen, um es als Byte-Array in DataBase zu speichern. Ich konnte nur alte Dateien kopieren, ändern und neue erstellen - aber es dauert zu lange, die Datei zu erstellen (TIFFWriter.createTIFFFromImages). was kann ich tun?Wie erstelle ich eine TIFF-Datei?

public byte[] CreateTiff() throws IOException { 
    try{ 
     File orginialFile = new File("../Dist/dist/attachment/orginialTifFile.TIF"); 
     if(orginialFile!=null){ 
      TIFFReader reader = new TIFFReader(orginialFile); 
      int length = reader.countPages(); 
      BufferedImage[] images = new BufferedImage[length]; 

      for (int i = 0; i < length; i++) { 
       images[i] = (BufferedImage)reader.getPage(i); 
       int rgb = 0x000000; // black 

       Random rand = new Random(); 
       int x= rand.nextInt(images[i].getHeight()/2); 
       int y= rand.nextInt(images[i].getWidth()/2); 

       images[i].setRGB(x, y, rgb); 
      } 

      File newAttachmentFile = new File("../Dist/dist/attachment/tempFile.tif"); 
      TIFFWriter.createTIFFFromImages(images, newAttachmentFile); 
      byte[] b= getBytesFromFile(newAttachmentFile); 
      return b; 
     } 
    }catch(Exception e){ 
     System.out.println("failed to add atachment to request"); 
     e.printStackTrace(); 
     return null; 
    } 
    return null; 
} 

public static byte [] getBytesFromFile (File-Datei) throws IOException { Input ist = new Fileinputstream (file); // Die Größe der Datei ermitteln long length = file.length();

if (length > Integer.MAX_VALUE) { 
     return null; 
    } 

    // Create the byte array to hold the data 
    byte[] bytes = new byte[(int)length]; 

    // Read in the bytes 
    int offset = 0; 
    int numRead = 0; 
    while (offset < bytes.length 
      && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) { 
     offset += numRead; 
    } 

    // Ensure all the bytes have been read in 
    if (offset < bytes.length) { 
     return null; 
    } 

    // Close the input stream and return bytes 
    is.close(); 
    return bytes; 
} 

Dank

+0

siehe tiff hier: http://java.sun.com/products/java-media/jai/iio.html – zengr

+0

Warum fügen Sie zufällige schwarze Punkte ein? – thejh

Antwort

0

Sie Daten in eine Datei zu schreiben und dann von ihm zu lesen, das ist ineffizient. Versuche das zu vermeiden. Wenn Sie der Methode eine Datei geben müssen, erstellen Sie eine falsche Dateiklasse, die eine Pipe, einen ArrayWriter oder etwas ähnliches als outputStream zurückgibt.

+0

Wie erstelle ich eine gefälschte Datei? Arraywriter erhält Pfaddatei. – cls