2012-01-19 19 views
6

Mam poniższy fragment kodu do konwersji obrazu na tablicę bajtów.Konwersja obrazów Java na bajty rozmiaru tablicy bajtów

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ImageIO.write(image, "png", baos); 
baos.flush(); 
byte[] imageBytes = baos.toByteArray(); 
baos.close(); 

Emisja że jestem stoi to, że rozmiar obrazu wynosi około 2.65MB. Jednak imageBytes.length daje mi wartość większą niż 5,5 MB. Czy ktoś może mi powiedzieć, gdzie idę źle?

+1

Skąd wiadomo, że rozmiar wynosi około 2,65 MB? Czy możesz otworzyć wynikowe bajty? Czy to wygląda w porządku? – Thilo

+1

Czy jesteś pewien, że obraz wejściowy rzeczywiście jest w formacie PNG? – Perception

+0

@Thilo - Obraz jest przesłanym obrazem z mojego lokalnego komputera. Sprawdziłem plik zarówno na moim lokalnym komputerze, jak i na serwerze. Ma rozmiar 2,65MB. Używam obrazu BufferedImage = ImageIO.read (inputFile); aby utworzyć obiekt obrazu z pliku. Tak, bajt [] zapisany wygląda OK z wyjątkiem rozmiaru. –

Odpowiedz

4

PNG nie zawsze jest wiernym formatem w obie strony. Jego algorytm kompresji może dać różne wyniki.

EDYTOWANIE: To samo dotyczy JPEG.

2

Użyłem poniższego kodu, aby rozwiązać problem.

FileInputStream fis = new FileInputStream(inputFile); 

ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
byte[] buf = new byte[1024]; 
try { 
    for (int readNum; (readNum = fis.read(buf)) != -1;) { 
     bos.write(buf, 0, readNum); 
    } 
} catch (Exception ex) { 

} 
byte[] imageBytes = bos.toByteArray(); 

Dzięki uprzejmości http://www.programcreek.com/downloads/convert-image-to-byte.txt Wydaje się, że działa poprawnie. Daj mi znać, jeśli ktokolwiek z was zauważy jakiekolwiek problemy w tym podejściu.

Powiązane problemy