Я хочу преобразовать изображение в массив байтов и наоборот. Здесь пользователь вводит имя изображения (.jpg
), а программа будет прочитает его из файла и преобразует его в массив байтов.Как преобразовать изображение в массив байтов в java?
ответ
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, например, или процесс его так, как вы хотите.
java.io.FileInputStream является то, что вы ищете :-)
Заканчивать 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"));
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();
Если вы используете JDK 7 вы можете использовать следующий код ..
import java.nio.file.Files;
import java.io.File;
File fi = new File("myfile.jpg");
byte[] fileContent = Files.readAllBytes(fi.toPath())
Вот полная версия кода для этого. Я протестировал его. В основном есть класс 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"));
}
}
Попробуйте этот код:
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());
}
}
}
Использование RandomAccessFile
будет простым и удобным.
RandomAccessFile f = new RandomAccessFile(filepath, "r");
byte[] bytes = new byte[(int) f.length()];
f.read(bytes);
f.close();
- 1. Как преобразовать массив байтов в буферное изображение
- 2. Как преобразовать массив байтов в изображение в java?
- 3. Как преобразовать массив байтов в изображение в Java SE
- 4. как преобразовать массив байтов BGR в изображение
- 5. Как преобразовать изображение в массив байтов
- 6. Как преобразовать массив байтов в растровое изображение?
- 7. Как преобразовать массив байтов в изображение?
- 8. Как преобразовать изображение GrayScale в массив байтов?
- 9. Как преобразовать изображение Java в JPEG массив байтов?
- 10. Невозможно преобразовать массив байтов в буферное изображение
- 11. Преобразовать массив байтов в изображение в МОФ
- 12. Как преобразовать строку Java в массив байтов?
- 13. C# преобразовать изображение в массив байтов
- 14. Как преобразовать изображение в массив байтов и преобразовать массив байтов в образы
- 15. преобразовать массив байтов в строку в java
- 16. Преобразовать массив байтов в PAnsiChar
- 17. Как преобразовать массив байтов в формате String в массив байтов?
- 18. Как преобразовать массив байтов в изображение в javascript
- 19. Как преобразовать массив байтов, содержащийся в объекте, в фактическое изображение?
- 20. Как преобразовать изображение в массив байтов в jsp/javascript
- 21. Как преобразовать изображение в массив байтов в платформе uwp
- 22. как преобразовать изображение в массив байтов в android
- 23. Как преобразовать растровое изображение в массив байтов в wp7?
- 24. Как преобразовать массив байтов в изображение в javascript
- 25. Как преобразовать изображение в массив байтов в J2ME?
- 26. Как преобразовать массив байтов в изображение в php?
- 27. Как преобразовать изображение в массив байтов и массив байтов в base64 Строка в android?
- 28. как преобразовать короткий массив в массив байтов
- 29. Как преобразовать массив байтов в двойной массив?
- 30. Как преобразовать массив байтов в массив int?
Скорее всего, не дубликат: вопросник означает сжатый файл изображения на растровый, а не как читать сжатые байты. –
Согласитесь, это * не * дубликат отмеченного вопроса (по крайней мере, не со ссылкой на принятый ответ). Голосование для повторного открытия. – haraldK
Это не дубликат, так как 'Файл' сильно отличается от' Image'. –