Этот вопрос уже имеет ответ здесь:
Я хочу преобразовать изображение в массив байтов и наоборот. Здесь, пользователь введет имя изображения (.jpg
) и программа считает его из файла и преобразует его в массив байтов.
BufferedImage состоит из двух основных классов: Raster & 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, или обработать его так, как вам нужно.
Посмотрите javax.imageio
, особенно ImageReader
и ImageWriter
как абстракцию для чтения и записи файлов изображений.
BufferedImage.getRGB (int x, int y)
, чем позволяет вам получать значения RGB для данного пикселя, которые можно разбить на байты.
Примечание: я думаю, вы не хотите читать необработанные байты, потому что тогда вам придется иметь дело со всем сжатием / распаковкой.
Я думаю, что лучший способ сделать это - сначала прочитать файл в байтовый массив, а затем преобразовать массив в изображение с помощью ImageIO.read ()
Попробуйте этот фрагмент кода
BufferedImage image = ImageIO.read(new File("filename.jpg"));
// Process image
ImageIO.write(image, "jpg", new File("output.jpg"));