I’m using JMRTD library (https://github.com/E3V3A/JMRTD/tree/master/wsq_imageio) to encode jpg to WSQ. I set Bitmap by manually instead of decode from WSQ file.
BufferedImage bufferedImage = ImageIO.read(fileInput.getInputStream()); WritableRaster raster = bufferedImage.getRaster(); DataBufferByte data = (DataBufferByte) raster.getDataBuffer(); Bitmap bitmap = new Bitmap(data.getData(), width, height, ppi, depth, lossyflag); OutputStream outputStream = new FileOutputStream("c.wsq"); String commentText = ""; WSQEncoder.encode(outputStream, bitmap, bitrate, commentText);
Here is my original picture jpg:
And below is my result WSQ file:
How can I fix it. Many thanks!
Advertisement
Answer
I resolved this problem, here is my code for convert jpg, png to wsq format:
// 1. Read files to BufferedImage for get width, height. Convert Bit depth to 8-gray BufferedImage bufferedImage = ImageIO.read(fileInput.getInputStream()); // 2. Convert Bit depth to 8-gray (This is what i had to do to solve this problem) BufferedImage img = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), BufferedImage.TYPE_BYTE_GRAY); Graphics g = img.getGraphics(); g.drawImage(bufferedImage, 0, 0, null); g.dispose(); // 3. Convert file format to byte[] and convert to type Bitmap WritableRaster raster = img.getRaster(); DataBufferByte data = (DataBufferByte) raster.getDataBuffer(); Bitmap bitmap = new Bitmap(data.getData(), bufferedImage.getWidth(), bufferedImage.getHeight(), 500, 8, 1); // 4. Create file wsq OutputStream outputStream = new FileOutputStream("c.wsq"); double bitrate = 0.75f; String commentText = ""; // 5. Write the input file to the generated wsq file WSQEncoder.encode(outputStream, bitmap, bitrate, commentText); outputStream.close();
Hope help you @ Dan Ortega