Фактическое изображение
Сгенерированное изображение
У меня есть несколько графиков (скажем, не более 14), которые генерируются с использованием Javascript (SAP / Open-UI-5) на стороне клиента. Я преобразовал эти графики в массив байтов, ниже приведен код для того же
код JavaScript
var arrCanvas = document.getElementsByTagName("canvas");
var arrImageByte = [];
for(var i=0; i<arrCanvas.length; i++){
var canvas = arrCanvas[i];
if(canvas.width!=0 && (typeof imageNames[i] != 'undefined')){
var imageDetail = {};
var uint8Array = canvas.getContext("2d").getImageData(0,0,canvas.width,canvas.height).data;
imageDetail.byteData = [].slice.call(uint8Array);
imageDetail.name = imageNames[i];
imageDetail.height = canvas.height;
imageDetail.width = canvas.width;
arrImageByte.push(imageDetail);
}
}
Теперь я отправляю эти байты на сервер, используя REST API и вызов AJAX.
и создание изображений на стороне сервера ниже - это код, где я воссоздаю изображения
Java-код
int width = imageDetail.getWidth();
int height = imageDetail.getHeight();
byte[] data = imageDetail.getByteData();
String name = imageDetail.getName();
BufferedImage bufferedImage =new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
// calculate array offset
final int o = (x * 3) + (y * width * 3);
// set the pixel color here we will need to convert the byte
// data to an unsigned
// value using &0xFF before passing it to the Color
// constructor
bufferedImage.setRGB(x, y, new Color(data[o + 1] & 0xFF, data[o + 2] & 0xFF, data[o + 3] & 0xFF).getRGB());
}
}
boolean result = ImageIO.write(bufferedImage, "jpg", new File(baseReportFolderLocation+name+".jpg"));
logger.info("Name "+name+" status :: "+result);
Но цвет моего изображения не такой, как ожидалось. Как я могу воссоздать изображение точно такого же цвета, каким оно было при создании на стороне клиента?
Я также попробовал приведенный ниже код
byte[] data = imageDetail.getByteData();
String name = imageDetail.getName();
BufferedImage bImageFromConvert = ImageIO.read(new ByteArrayInputStream(data));
ImageIO.write(bImageFromConvert, "jpg", new File(baseReportFolderLocation+"New_"+name+".jpg"));
последняя строка выдает исключение
java.lang.IllegalArgumentException: image == null!
at javax.imageio.ImageTypeSpecifier.createFromRenderedImage(ImageTypeSpecifier.java:925)
at javax.imageio.ImageIO.getWriter(ImageIO.java:1592)