I'm trying to embed a message inside an image which are provided individually in a jsp page and are sent as a multipart/form-data. It was successfully performed, got the image with data embedded in it and sent back to the jsp page but, when I use ImageIO.write() method, the size of an image increases to almost double or greater.
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletOutputStream sos = response.getOutputStream();
Part filePart = request.getPart("img");
try {
BufferedImage image = embed(request.getParameter("msg"), filePart, request.getParameter("key"));
ImageIO.write(image, "png", sos);
} catch (NoSuchAlgorithmException | IOException e) {
e.printStackTrace();
} finally {
sos.close();
}
}
If I try to use ImageWriter to compress, I will not be able to extract data from that.
ImageWriter jpgWriter = ImageIO.getImageWritersByFormatName("png").next();
ImageWriteParam jpgWriteParam = jpgWriter.getDefaultWriteParam();
jpgWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
jpgWriteParam.setCompressionQuality(0.1f);
ImageOutputStream outputStream = ImageIO.createImageOutputStream(sos);
jpgWriter.setOutput(outputStream);
IIOImage outputImage = new IIOImage(image, null, null);
jpgWriter.write(null, outputImage, jpgWriteParam);
jpgWriter.dispose();
Is there any way to get that buffered image by converting to other object and send to the jsp page so that ImageIO class will not be used. (Note: server sent image is collected using javascript).
The max size should only be (size of the image + size of embedded message).
But using ImageIO class, the size increases. Is there any way to send the file without any change in its size?