为什么使用 Java ImageIO 读取和写入 JPEG 会减小文件大小?

Why does reading and writing a JPEG with Java ImageIO reduce the file size?

我正在使用 Java 的 javax.imageio.ImageIO 从我的 FlashAir 32Gb(第二代)读取内容并将它们写入我的本地硬盘。我可以读取和保存文件,但我注意到硬盘中的文件比 SD 卡中的原始文件小得多。为什么会发生这种情况的任何想法? 这是我使用的代码:

URL imageURL = new URL("http://192.168.0.1/DCIM/100__TSB/IMG_0001.JPG");
File dest = new File("/home/me/Pictures/FlashAir/IMG_0001.JPG");
BufferedImage image = ImageIO.read(imageURL);
ImageIO.write(image, "JPG", dest);

保存到本地硬盘的图片没有问题,但只有原来的1/3左右

该代码不仅仅是复制(读取和保存)文件。它解码图像,然后以默认的 JPEG 压缩率(根据 JPEGImageWriteParam 文档判断为 0.75)对其重新编码。

如果您想更改压缩级别,请查看 this question

如果您要完全复制文件,请完全不要使用 ImageIO