java 读取图片格式 大小_如何保存jpeg读取后的图像文件大小 - Java中的旋转写入操作?...

本文档探讨了使用Java处理JPEG图像时遇到的问题,即在读取、旋转并重新保存图片后,文件大小发生变化。通过示例代码展示了如何使用Graphics2D进行旋转操作,并使用ImageIO和ImageWriteParam尝试设置压缩质量来控制输出文件的大小。作者询问如何在保持图像质量的同时,避免文件大小增加。
摘要由CSDN通过智能技术生成

我试图读取一个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或更少的图像变得更小的尺寸。如何在这些操作之后继续处理图像大小?

谢谢,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.ylw.p2p.common.utils; import java.awt.image.BufferedImage; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class FileUtils { public final static Map IMG_FILE_TYPE_MAP = new HashMap(); /** * @Description: 图片文件上传 * @author Xiao.Sky * @creaetime 2015年4月17日下午5:20:27 * @param request * @param response * @param photo * @param strtmp * 文件名称 xxx.jpg * @param path * 文件路径 * @param num * @return */ public static boolean updatePhoto(HttpServletRequest request,HttpServletResponse response, File photo, String strtmp,String path, long num) { File dir = new File(path); // 如果不存在就创建次文件夹 if (!dir.exists()) { dir.mkdirs(); } File newFile = new File(dir, strtmp); // 如果存在此文件就删除此文件 if (newFile.exists()) newFile.delete(); BufferedInputStream bis = null; FileInputStream fis = null; try { fis = new FileInputStream(photo); FileOutputStream fos = new FileOutputStream(newFile); BufferedImage src = ImageIO.read(fis); ImageIO.write(src, "png", fos); } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != bis) { bis.close(); } if (null != fis) { fis.close(); } } catch (IOException e) { e.printStackTrace(); } } return true; } /** * * @Description: 普通文件上传 * @author Xiao.Sky * @creaetime 2015年4月23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值