将图像转换为像素数组,使用像素重新创建图像 - 尺寸减小.为什么?

Bug*_*ggy 7 java image

我将图像转换为像素数组.我将RGB值保存在三个单独的数组中.

然后,我尝试使用相同的值创建图像(无操作).原始图像为205kB,在B&W图像的情况下新图像为121kB,在彩色图像的情况下为215kB至96kB.此外,亮度稍有变化(亮度增加,整体对比度也增加).是什么造成的?

我尝试了有色和黑白图像.结果是一样的.

另外,我在前一个输出图像(96kB)上运行相同的代码,新输出仍然是96kB.

Codes-


1)阅读图像:

int width = img.getWidth(null);
int height = img.getHeight(null);

pixelR = new int[width * height];
pixelG = new int[width * height];
pixelB = new int[width * height];

int index=0;

int r, g, b, gray, rgb;

for(int i=0; i<width; i++) {
  for (int j=0; j<height; j++) {
    rgb = img.getRGB(i, j);

    r = (rgb >> 16) & 0xFF;
    g = (rgb >> 8) & 0xFF;
    b = (rgb & 0xFF);

    pixelR[index]=r;
    pixelG[index]=g;
    pixelB[index]=b;
    index++;
  }
}
Run Code Online (Sandbox Code Playgroud)

2)写图像:

     BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

  int index=0;
  int val;
  int r, g, b;

  for (int i=0; i<width; i++) {
    for (int j=0; j<height; j++) {

      r=pixelR[index];
      g=pixelG[index];
      b=pixelB[index++];

      Color newColor = new Color((int)r, (int)g, (int)b);     
      image.setRGB(i, j, newColor.getRGB());
    }
  }

  File f = null;

  try{
    f = new File("<filepath>.jpg");
      ImageIO.write(image, "jpg", f);
    }catch(IOException e){
      System.out.println("Error: "+e);
    }
  }
Run Code Online (Sandbox Code Playgroud)

seb*_*kur 1

您可以尝试将压缩级别设置为不同的值,并查看文件大小有何不同。有关如何执行此操作,请参阅在 Java 中使用 ImageIO 设置 jpg 压缩级别。

但没有解释亮度和对比度的变化。