Image2TiffArrayByte = pusty ArrayByte

Odpowiedz Nowy wątek
2011-03-03 17:57

Rejestracja: 9 lat temu

Ostatnio: 5 lat temu

0

Witam,
Potrzebuje przekonwertować Image do skompresowanego TIFFa, który w tej postaci ma wylądować w tablicy bajtów.

BufferedImage image = ImageIO.read(new File("d:\\plik.jpg"));
TIFFImageWriteParam wp = new TIFFImageWriteParam(Locale.ENGLISH);
wp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
wp.setCompressionType("LZW");
ImageWriter writer = ImageIO.getImageWritersByFormatName("TIF").next();             
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageOutputStream ios;
ios = ImageIO.createImageOutputStream(baos);
//ios = ImageIO.createImageOutputStream(new FileOutputStream("d:\\plik2.tiff"));
writer.setOutput(ios);
writer.write(null, new IIOImage(image, null, null),wp);
byte[] ba;
ba=baos.toByteArray();
System.out.println(ba.length);

Niestety wynik działania powyższego kodu daje zerową długość tablicy bajtów "ba". Jeżeli odkomentuję linię, która zapisuje do pliku to plik się utworzy właściwie.
Ma ktoś pomysł jak to rozwiązać, bez zapisywania w systemie plików? A może coś źle robię z ByteArrayOutputStream?

Pozostało 580 znaków

2011-03-04 11:58

Rejestracja: 9 lat temu

Ostatnio: 5 lat temu

Witam,
rozwiązanie jest następujące:

BufferedImage image = ImageIO.read(new File("d:\\plik.jpg"));
TIFFImageWriteParam wp = new TIFFImageWriteParam(Locale.ENGLISH);
wp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
wp.setCompressionType("LZW");
ImageWriter writer = ImageIO.getImageWritersByFormatName("TIF").next();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
MemoryCacheImageOutputStream mcios = new MemoryCacheImageOutputStream(baos);
writer.setOutput(mcios);
writer.write(null, new IIOImage(image, null, null), wp);
mcios.flush();
byte[] ba;
ba = baos.toByteArray();
System.out.println(ba.length);

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0