java 等比例 改变图片的质量(等大小压缩图片)

 /**
     * @param originalFile  原文件
     * @param resizedFile  压缩目标文件
     * @param quality  压缩质量(越高质量越好)
     * @param scale  缩放比例;  1等大.
     * @throws IOException
     */
    public static void resize(File originalFile, File resizedFile,double scale, float quality) throws IOException {  
        ImageIcon ii = new ImageIcon(originalFile.getCanonicalPath());  
        Image i = ii.getImage();  
        int iWidth = (int) (i.getWidth(null)*scale);  
        int iHeight = (int) (i.getHeight(null)*scale); 
        //在这你可以自定义 返回图片的大小 iWidth iHeight
        Image resizedImage = i.getScaledInstance(iWidth,iHeight, Image.SCALE_SMOOTH);  
        // 获取图片中的所有像素
        Image temp = new ImageIcon(resizedImage).getImage();  
        // 创建缓冲
        BufferedImage bufferedImage = new BufferedImage(temp.getWidth(null),  
                temp.getHeight(null), BufferedImage.TYPE_INT_RGB);  
        // 复制图片到缓冲流中
        Graphics g = bufferedImage.createGraphics();  
        // 清除背景并开始画图
        g.setColor(Color.white);  
        g.fillRect(0, 0, temp.getWidth(null), temp.getHeight(null));  
        g.drawImage(temp, 0, 0, null);  
        g.dispose();
        // 柔和图片.  
        float softenFactor =0.05f;  
        float[] softenArray = { 0, softenFactor, 0, softenFactor,  
                1 - (softenFactor * 4), softenFactor, 0, softenFactor, 0 };  
        Kernel kernel = new Kernel(3, 3, softenArray);  
        ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);  
        bufferedImage = cOp.filter(bufferedImage, null);  
        FileOutputStream out = new FileOutputStream(resizedFile);  
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
        JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bufferedImage);  
        param.setQuality(quality, true);  
        encoder.setJPEGEncodeParam(param);  
        encoder.encode(bufferedImage);
        bufferedImage.flush();
        out.close();
    } 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Java 中的 ImageIO 和 BufferedImage 类来实现按宽度等比例压缩图片的功能。具体实现步骤如下: 1. 使用 ImageIO 类的 read 方法读取原始图片文件,并将其保存为 BufferedImage 对象。 2. 获取原始图片的宽度和高度。 3. 计算等比例缩小后的宽度和高度,其中宽度为指定的压缩宽度,高度按比例计算。 4. 创建一个新的 BufferedImage 对象,设置其宽度和高度为计算出来的缩小后的宽度和高度。 5. 使用 Graphics2D 类的 drawImage 方法将原始图片绘制到新的 BufferedImage 对象上,并按比例缩小。 6. 使用 ImageIO 类的 write 方法将新的 BufferedImage 对象保存为压缩后的图片文件。 下面是一个简单的 Java 代码示例: ```java import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; public class ImageCompressor { public static void compressImage(String srcFilePath, String destFilePath, int width) throws Exception { // 读取原始图片文件 BufferedImage srcImage = ImageIO.read(new File(srcFilePath)); // 获取原始图片的宽度和高度 int srcWidth = srcImage.getWidth(); int srcHeight = srcImage.getHeight(); // 计算等比例缩小后的宽度和高度 int destWidth = width; int destHeight = (int) (srcHeight * ((double) destWidth / srcWidth)); // 创建一个新的 BufferedImage 对象 BufferedImage destImage = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB); // 绘制原始图片到新的 BufferedImage 对象上,并按比例缩小 Graphics2D g = destImage.createGraphics(); g.drawImage(srcImage, 0, 0, destWidth, destHeight, null); g.dispose(); // 保存压缩后的图片文件 ImageIO.write(destImage, "jpg", new File(destFilePath)); } public static void main(String[] args) throws Exception { compressImage("original.jpg", "compressed.jpg", 800); } } ``` 上面的代码将原始图片文件 "original.jpg" 压缩成宽度为 800 像素的图片,并保存为 "compressed.jpg" 文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值