как преобразовать изображение в массив байтов в java? [дубликат]
этот вопрос уже есть ответ здесь:
Файл в байт[] в Java
21 ответов
Я хочу преобразовать изображение в массив байтов и наоборот. Здесь пользователь вводит имя изображения (.jpg) и программа читать его из файла и преобразовать его в массив байтов.
9 ответов:
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, например, или обрабатывать его так, как вы хотите.
Если вы используете JDK 7, Вы можете использовать следующий код..
import java.nio.file.Files; import java.io.File; File fi = new File("myfile.jpg"); byte[] fileContent = Files.readAllBytes(fi.toPath())
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();
попробуйте этот фрагмент кода
BufferedImage image = ImageIO.read(new File("filename.jpg")); // Process image ImageIO.write(image, "jpg", new File("output.jpg"));
вот полная версия кода для этого. Я проверил это. Элемент
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")); } }
проверить
javax.imageio, особенноImageReaderиImageWriterкак абстракция для чтения и записи файлов изображений.
BufferedImage.getRGB(int x, int y)чем позволяет получить значения RGB на данном пикселе, который может быть разделен на байты.примечание: Я думаю, что вы не хотите читать необработанные байты, потому что тогда вам придется иметь дело со всеми компрессии/декомпрессии.
Я думаю, что лучший способ сделать это-прочитать файл в массив байтов, а затем преобразовать массив к изображению с ImageIO.читать ()
используя
RandomAccessFileбыло бы просто и удобно.RandomAccessFile f = new RandomAccessFile(filepath, "r"); byte[] bytes = new byte[(int) f.length()]; f.read(bytes); f.close();
Comments