Преобразование изображения в шестнадцатеричный массив байтов JavaJAVA

Программисты JAVA общаются здесь
Anonymous
Преобразование изображения в шестнадцатеричный массив байтов Java

Сообщение Anonymous »

Я хочу преобразовать файл изображения с альбомной ориентацией в шестнадцатеричный массив байтов с альбомным разрешением 800x480 (ШxВ) в Java.
@PostMapping("/toByteArray")
public ResponseEntity imageToByteArrayConverter(MultipartFile file,@RequestParam String width,String height,String orientation){
Map responseMap=new LinkedHashMap();
try {

BufferedImage originalImage=ImageIO.read(file.getInputStream());

int requestedWidth = Integer.parseInt(width);
int requestedHeight = Integer.parseInt(height);

int newWidth;
int newHeight;

if (orientation.equals("landscape")) {
if (originalImage.getWidth() > originalImage.getHeight()) {
newWidth = requestedWidth;
newHeight = (int) ((double) originalImage.getHeight() / originalImage.getWidth() * requestedWidth);
} else {
newWidth = requestedWidth;
newHeight = (int) ((double) originalImage.getHeight() / originalImage.getWidth() * requestedWidth);
}
} else { // Assume portrait if orientation is not specified or not recognized
if (originalImage.getHeight() > originalImage.getWidth()) {
newWidth = requestedHeight;
newHeight = (int) ((double) originalImage.getWidth() / originalImage.getHeight() * requestedHeight);
} else {
newWidth = requestedHeight;
newHeight = (int) ((double) originalImage.getWidth() / originalImage.getHeight() * requestedHeight);
}
}

BufferedImage resizedImage=new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_BYTE_BINARY);

Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, newWidth, newHeight, null);
g.dispose();

ByteArrayOutputStream baos = new ByteArrayOutputStream();
int quality = 80; // Adjust quality as needed
do {
baos.reset(); // Reset the output stream
ImageIO.write(resizedImage, "jpg", baos);
quality -= 5; // Reduce quality
ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next();
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(quality / 100.0f); // Set compression quality
writer.setOutput(new MemoryCacheImageOutputStream(baos));
writer.write(null, new IIOImage(resizedImage, null, null), param);
writer.dispose();
} while (baos.size() > 48000 && quality > 0);

byte[] byteArray = baos.toByteArray();

System.out.println("Byte Array : "+byteArray.length);

WritableRaster raster = originalImage .getRaster();
DataBufferByte data = (DataBufferByte) raster.getDataBuffer();

byte[] abcd=data.getData();

System.out.println("ABCD : "+abcd.length);

StringBuilder hexString = new StringBuilder();
for (byte b : byteArray) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) {
hexString.append("0x0").append(hex).append(", ");
} else {
hexString.append("0x").append(hex).append(", ");
}
}
String hexByteArray = hexString.toString();

responseMap.put("Message", "Image coverted successfully to the Byte Array");
responseMap.put("HTTP Status", HttpStatus.OK);
responseMap.put("Status", true);
responseMap.put("Data", hexByteArray);

return new ResponseEntity(responseMap, HttpStatus.OK);

} catch (Exception e) {
responseMap.put("Message", "Something went wrong");
responseMap.put("HTTP Status", HttpStatus.INTERNAL_SERVER_ERROR);
responseMap.put("Status", false);
return new ResponseEntity(responseMap, HttpStatus.INTERNAL_SERVER_ERROR);
}

}

Я использую приведенный выше код для сжатия изображения, а также перестраиваю изображение с разрешением 800x480, а затем конвертирую его байтовый массив в шестнадцатеричный формат... мы передаем этот шестнадцатеричный массив байтов в устройство, использующее Bluetooth... также я хочу, чтобы изображение было в формате BW или BWR... (черный, белый) или (черный, белый, красный)
Также я хочу, чтобы вывод был в формате ниже с ограничением только в 48000 байт...
0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xff, 0xdb, 0x00, 0x43, 0x00, 0x08, 0x06


Подробнее здесь: https://stackoverflow.com/questions/784 ... rsion-java

Вернуться в «JAVA»