У меня есть код Java на стороне сервера, который получает массив байтов от клиента. Чтобы сделать некоторую обработку изображения, мне нужно преобразовать массив байтов в BufferedImage
. У меня есть код, который должен сделать это здесь:Как преобразовать массив байтов в буферное изображение
public void processImage(byte[] data) {
ByteArrayInputStream stream = new ByteArrayInputStream(data);
BufferedImage bufferedImage;
bufferedImage = ImageIO.read(stream);
// bufferedImage is null
//...
}
Но это не работает; bufferedImage - null. не Согласно документации ImageIO:
Если не зарегистрировано
ImageReader
требования, чтобы иметь возможность читать результирующий поток,null
возвращается.
Как сообщить ImageReader
, какой тип изображения он есть. Например, если я знаю, что изображение будет JPEG (что это, в моем случае), что я должен делать?
EDIT: Благодарим за предположение, что файл, скорее всего, не находится в формате JPEG. Это код на стороне клиента я, который отправляет данные в виде строки на сервер:
import org.json.JSONObject;
// Client-side code that sends image to server as String
public void sendImage() {
FileInputStream inputStream = new FileInputStream(new File("myImage.jpg"));
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
byte[] b = new byte[1024];
while ((bytesRead = inputStream.read(b)) != -1) {
byteStream.write(b,0,bytesRead);
}
byte[] byteArray = byteStream.toByteArray();
JSONObject jsonObject = new JSONObject();
jsonObject.put("data",new String(byteArray));
// ... more code here that sends jsonObject in HTTP post body
}
И это код на стороне сервера, который вызывает функцию processImage():
// Server-side code that calls processImage() function
public void handleRequest(String jsonData) {
JSONObject jsonObject = new JSONObject(jsonData);
processImage(jsonObject.getString("data").getBytes());
}
Для более эффективной помощи, отправьте сообщение [SSCCE] (http://sscce.org/). –
Вы уверены, что массив байтов имеет хорошие данные? Пробовали ли вы простой тест с программой, которая читает изображение, преобразует его в массив байтов и затем преобразует этот массив байтов в изображение. – NormR
ImageIO распознает правильный JPEG, используя код, который вы опубликовали. Таким образом, скорее всего, изображение не в формате JPEG. Легкий способ тестирования - выгрузить массив данных на диск и посмотреть, как он выглядит. Попробуйте открыть его в другом программном обеспечении или посмотрите на него в шестнадцатеричном редакторе. Возможно, массив данных содержит декодированные пиксели из файла JPEG? – haraldK