java - 如何在Java中读取-旋转-写入操作后保存jpeg图像文件大小?

标签 java size bufferedimage

我正在尝试将 JPEG 图像读取为 BufferedImage,旋转并将其保存为文件系统中的另一个 jpeg 图像。但有一个问题:在这些操作之后我无法继续处理相同的文件大小。

这里是代码

//read Image
BufferedImage img = ImageIO.read(new File(path));
//rotate Image
BufferedImage rotatedImage = new BufferedImage(image.getHeight(),
            image.getWidth(), BufferedImage.TYPE_3BYTE_BGR);
    Graphics2D g2d = (Graphics2D) rotatedImage.getGraphics();
    g2d.rotate(Math.toRadians(PhotoConstants.ROTATE_LEFT));

    int height=-rotatedImage.getHeight(null);
    g2d.drawImage(image, height, 0, null);
    g2d.dispose();

//Write Image
    Iterator iter = ImageIO.getImageWritersByFormatName("jpeg");
    ImageWriter writer = (ImageWriter)iter.next();
    // instantiate an ImageWriteParam object with default compression options
    ImageWriteParam iwp = writer.getDefaultWriteParam();
    try {
        FileImageOutputStream output = null;
        iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
        iwp.setCompressionQuality(0.98f);   // an integer between 0 and 1
        // 1 specifies minimum compression and maximum quality

        File file = new File(path);
        output = new FileImageOutputStream(file);
        writer.setOutput(output);
        IIOImage iioImage = new IIOImage(image, null, null);
        writer.write(null, iioImage, iwp);
        output.flush();
        output.close();
        writer.dispose();

是否可以在开始时访问原始jpeg图像的compressionQuality参数。当我将压缩质量设置为 1 时,图像尺寸会变大。否则我设置 0.9 或更低,图像尺寸会变小。这些操作后如何处理图像大小?

谢谢,

最佳答案

你的意思是——你想读取原始文件的压缩率吗?

请注意,即使使用相同的压缩设置,由于 JPEG 压缩算法的原因,文件大小也可能会有所不同。因此,即使所有选项(如压缩率、质量设置等)都相同,旋转后的图像并不总是与未旋转/原始版本具有完全相同的尺寸。

关于java - 如何在Java中读取-旋转-写入操作后保存jpeg图像文件大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5360911/

相关文章:

java - 如何使用 Query、QueryBuilder 和 Test 类摆脱在 java 项目输出中打印对象内存位置?

java - 几个 java 'activation' 库定义了重叠的类。使用哪一种?

java - Twitter4J 上最多 20 个好友信息

java - 如何将 BufferedImage 转换为 int[]?

java - 将 Swing 屏幕传递给另一个 Java 应用程序。最小化时 Swing 会更新屏幕吗?

java - 如何将 BufferedImage 转换为黑白图像?

java - Propagation.REQUIRES_NEW 不会在 Spring 中使用 JPA 创建新事务

java - 无限期停止线程的有效方法是什么?

html - 下拉菜单框大小不一样

二叉搜索树上的 JavaScript 大小