我正在制作一个隐藏JPEG图像LSB数据的应用程序。知道JPEG是有损压缩并且默认压缩率为70%,我将它的参数更改为100%,因此假设它不会破坏图像中的任何数据。这是代码。
File output = new File(gui.getOutput()+".jpg");
ImageWriter jpgWriter = ImageIO.getImageWritersByFormatName("jpg").next();
ImageWriteParam jpgWriteParam = jpgWriter.getDefaultWriteParam();
jpgWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
jpgWriteParam.setCompressionQuality(1f);
FileImageOutputStream outputStream = new FileImageOutputStream(output);
jpgWriter.setOutput(outputStream);
IIOImage outputImage = new IIOImage(image, null, null);
jpgWriter.write(null, outputImage, jpgWriteParam);
jpgWriter.dispose();
创建的图像确实损失较少,但我存储在像素中的数据被破坏了。 (我通过读取LSB中插入的数据来检查它,并且它不是我存储在图像中的数据)。
我该怎么做才能避免数据被破坏?