Подтвердить что ты не робот

Как преобразовать изображение в массив байтов в java?

Я хочу преобразовать изображение в массив байтов и наоборот. Здесь пользователь вводит имя изображения (.jpg), а программа будет читать его из файла и преобразует его в массив байтов.

4b9b3361

Ответ 1

BufferedImage состоит из двух основных классов: Растр и ColorModel. Сам растровый объект состоит из двух классов: DataBufferByte для содержимого изображения, а другой для цвета пикселей.

если вам нужны данные из DataBufferByte, используйте:

public byte[] extractBytes (String ImageName) throws IOException {
 // open image
 File imgPath = new File(ImageName);
 BufferedImage bufferedImage = ImageIO.read(imgPath);

 // get DataBufferBytes from Raster
 WritableRaster raster = bufferedImage .getRaster();
 DataBufferByte data   = (DataBufferByte) raster.getDataBuffer();

 return ( data.getData() );
}

теперь вы можете обрабатывать эти байты, скрывая текст в lsb, например, или обрабатывая его так, как вы хотите.

Ответ 2

Если вы используете JDK 7, вы можете использовать следующий код.

import java.nio.file.Files;
import java.io.File;

File fi = new File("myfile.jpg");
byte[] fileContent = Files.readAllBytes(fi.toPath())

Ответ 3

File fnew=new File("/tmp/rose.jpg");
BufferedImage originalImage=ImageIO.read(fnew);
ByteArrayOutputStream baos=new ByteArrayOutputStream();
ImageIO.write(originalImage, "jpg", baos );
byte[] imageInByte=baos.toByteArray();

Ответ 4

Попробуйте этот фрагмент кода

BufferedImage image = ImageIO.read(new File("filename.jpg"));

// Process image

ImageIO.write(image, "jpg", new File("output.jpg"));

Ответ 5

Отметьте javax.imageio, особенно ImageReader и ImageWriter как абстракцию для чтения и записи файлов изображений.

BufferedImage.getRGB(int x, int y), чем позволяет получать значения RGB на заданном пикселе, которые могут быть помещены в байты.

Примечание. Я думаю, что вы не хотите читать необработанные байты, потому что тогда вам нужно иметь дело со всеми сжатиями/декомпрессиями.

Ответ 6

Вот полная версия кода для этого. Я протестировал его. Класс BufferedImage и Base64 делает трюк в основном. Также необходимо установить правильный параметр.

public class SimpleConvertImage {
    public static void main(String[] args) throws IOException{
        String dirName="C:\\";
        ByteArrayOutputStream baos=new ByteArrayOutputStream(1000);
        BufferedImage img=ImageIO.read(new File(dirName,"rose.jpg"));
        ImageIO.write(img, "jpg", baos);
        baos.flush();

        String base64String=Base64.encode(baos.toByteArray());
        baos.close();

        byte[] bytearray = Base64.decode(base64String);

        BufferedImage imag=ImageIO.read(new ByteArrayInputStream(bytearray));
        ImageIO.write(imag, "jpg", new File(dirName,"snap.jpg"));
    }
}

Ссылка ссылки

Ответ 7

Попробуйте этот код:

public class ImageTest {

public static void main(String[] args) {

    try {

        byte[] imageInByte;
        BufferedImage originalImage = ImageIO.read(new File(
                "c:/darksouls.jpg"));

        // convert BufferedImage to byte array
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(originalImage, "jpg", baos);
        baos.flush();
        imageInByte = baos.toByteArray();
        baos.close();

        // convert byte array back to BufferedImage
        InputStream in = new ByteArrayInputStream(imageInByte);
        BufferedImage bImageFromConvert = ImageIO.read(in);

        ImageIO.write(bImageFromConvert, "jpg", new File(
                "c:/new-darksouls.jpg"));

    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
}
}

Ответ 8

java.io.FileInputStream - это то, что вы ищете: -)

Ответ 9

Я думаю, что лучший способ сделать это - сначала прочитать файл в байтовый массив, а затем преобразовать массив в образ с ImageIO.read()

Ответ 10

Использование RandomAccessFile было бы простым и удобным.

RandomAccessFile f = new RandomAccessFile(filepath, "r");
byte[] bytes = new byte[(int) f.length()];
f.read(bytes);
f.close();