Convert InputStream zur Datei

Habe ich einen REST-webservice gebaut mit Jersey das bedeutet OCR (Optical Character Recognition) verwenden von Tesseract über die Tess4J Java-Bindung. Jetzt die Tess4J Bibliothek erwartet, dass Sie senden Sie ein Bild-Datei (png, jpg, tif u.a.), aber mit Jersey-Verarbeitung bekomme ich einen InputStream, dass enthält das Bild.

Wie konvertiere ich diese InputStream auf eine Datei-Typ, der Tesseract erkennen wäre? Ich habe versucht, die folgenden:

import org.apache.commons.io.IOUtils;

.....

private static File stream2file (InputStream in) throws IOException {            

    final File tempFile = File.createTempFile("stream2file", ".tmp");
    tempFile.deleteOnExit();

    try (FileOutputStream out = new FileOutputStream(tempFile)) {
        IOUtils.copy(in, out);
    }

    return tempFile;            
}

Aber dann Tesseract-Bibliothek eine Ausnahme wirft, sagen, dass es nicht die Datei annehmen Art ich werde senden (Was jetzt in diesem Fall ist 'tmp'). Ich habe versucht, die änderung, die wenig 'tmp' in 'tif' und anderen unterstützten Dateitypen aber, dass nur ergab die gleichen Ergebnisse, also bin ich offensichtlich hier etwas fehlt.

So, wie kann ich einen InputStream, konvertieren Sie es, und schicken es zu Tesseract als einer der unterstützten Datei-Typen, die er erwartet?

  • Wie bekommt man den InputStream von der WebService-Aufruf? Haben Sie schon einmal versucht, öffnen Sie den temp-Datei mit einem anderen Bildbearbeitungsprogramm wie Image Magick? Hat Ihr Bild-Datei (tmp-Datei) haben die erwartete Größe? ... btw. Java 7 java.nio.file.Files unterstützt das kopieren InputStreams Pfade.
  • Ich bekomme das Bild über ein Formular ('multipart/form-data') mit der POST. Nichts falsch mit dem Bild, obwohl, arbeitet perfekt in meiner console app, die verwendet Tess4J. Ich habe nicht versucht, Image Magick Nein, ich nur könnte.
  • Und die Temp-Datei hat die gleiche Größe und Inhalt wie die ursprüngliche Datei? Tut tesseract aufgerufen, die von der Eingabeaufforderung akzeptieren Sie die temp-Datei
  • Übrigens .deleteOnExit(); nicht tatsächlich löschen Sie die temp-Datei an, bis die JVM heruntergefahren erfolgreich (und nur, wenn Sie heruntergefahren erfolgreich). Sie sollten erwägen, ein etwas wie try { ... } finally { tempFile.delete(); }. Lesen Sie mehr von Oracle auf deleteOnExit hier.
InformationsquelleAutor | 2014-03-28
Schreibe einen Kommentar