I tried to modify the pixel value of the Green band of a Jpeg image by Java. Strangely, after I modified the green band, the values of the red and blue bands also changed. The same code to modify PNG is successfully. Does this have something to do with Jpeg being a lossy compression format? The code:
static void ModifyJPEG()
{
try {
File file=new File("G:\\Data\\Md\\TestJPEG.jpg");
File newfile=new File("G:\\Data\\Md\\TestJPEG2.jpg");
BufferedImage bufferedImage= ImageIO.read(file);
BufferedImage newbufferedImage= new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), BufferedImage.TYPE_3BYTE_BGR);
for (int i = bufferedImage.getMinX(); i < bufferedImage.getWidth(); i++)
{
for (int j = bufferedImage.getMinY(); j < bufferedImage.getHeight(); j++)
{
int rgb = bufferedImage.getRGB(i, j);
Color color=new Color(rgb);
int r=color.getRed();
int g=color.getGreen();
int b=color.getBlue();
int gchange=g/3;
Color newcolor=new Color(r,gchange,b);
newbufferedImage.setRGB(i, j, newcolor.getRGB());
}
}
ImageIO.write(newbufferedImage, "jpg", newfile);
}
catch (Exception e) {
e.printStackTrace();
}
}