美文网首页
java实现图片压缩

java实现图片压缩

作者: redpeanuts | 来源:发表于2019-03-04 19:46 被阅读0次

采用ImageIO实现图片的裁剪与压缩,分为裁剪与压缩两个模块,先裁剪再压缩

效果还不错,11M左右的图片能够在2s完成,压缩率90%(测试在95%-98%之间)以上,同时可以自己设置图片输出质量

import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Iterator;

public class CompressImg {

    public static void compress(BufferedImage image, String dest) throws IOException {

        File compressedImageFile = new File(dest);
        OutputStream os = new FileOutputStream(compressedImageFile);
        Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg");

        ImageWriter writer = writers.next();
        ImageOutputStream ios = ImageIO.createImageOutputStream(os);
        writer.setOutput(ios);
        ImageWriteParam param = writer.getDefaultWriteParam();
        param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
        //压缩图片的质量,数值越小压缩率越高,图片质量越低
        param.setCompressionQuality(0.8f);
        writer.write(null, new IIOImage(image, null, null), param);

        os.close();
        ios.close();
        writer.dispose();
    }

    public static void resize(String src, String dest) throws IOException {
        
        Image img = null;
        BufferedImage tempPNG = null;

        img = ImageIO.read(new File(src));
        tempPNG = resizeImage(img, ((BufferedImage) img).getWidth() / 2, ((BufferedImage) img).getHeight() / 2);

        //裁剪不压缩,存储
        // ImageIO.write(tempPNG, "png", new File(dest));
        //压缩后输出
        compress(tempPNG, dest);

        System.out.println("DONE");
    }

    public static BufferedImage resizeImage(final Image image, int width, int height) {

        final BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        //创建graph2D,用来将image写入bufferedImage
        final Graphics2D graphics2D = bufferedImage.createGraphics();
        graphics2D.setComposite(AlphaComposite.Src);
        //below three lines are for RenderingHints for better image quality at cost of higher processing time
        graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        graphics2D.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        graphics2D.drawImage(image, 0, 0, width, height, null);
        graphics2D.dispose();
        return bufferedImage;
    }
}

相关文章

  • java实现图片压缩

    采用ImageIO实现图片的裁剪与压缩,分为裁剪与压缩两个模块,先裁剪再压缩 效果还不错,11M左右的图片能够在2...

  • java实现图片转ascii字符画

    示例图: 建议:图片压缩一下。 代码: java实现图片转ascii字符画 参考 :https://blog.cs...

  • 前端实现图片裁剪和压缩

    前端实现图片的裁剪和压缩1、压缩图片drawImage,压缩图片长宽或者质量参数来实现压缩 2、图片base64转...

  • 图片懒加载之高斯模糊

    压缩原始图片 将原始图片压缩至1~2kb甚至更小的图片nature.jpg 压缩 java 图片压缩natur...

  • android实现图片压缩

    android在开发时常用到的图片的压缩后在操作,实现类BitmapUtils.java

  • 2.Java 图片质量压缩与图片缩放

    Java 图片压缩:像素质量压缩 、图片长宽缩放。常用方式:一种为Java有BufferedImage来处理;另一...

  • Java后端实现图片压缩技术

    今天来说说图片压缩技术,为什么要使用图片压缩,图片上传不就完事了吗?对的,这在几年前可以这么说,因为几年前还没有现...

  • java实现图片压缩功能

    最近的业务里有一个场景:需要通过接口传递图片的base64字符串实现图片的上传功能,但众所周知,即使是post请求...

  • iOS 图片压缩方法

    图片压缩可以通过两种方式实现,压缩图片质量和压缩图片尺寸。如果对图片清晰度有要求的,可以先压缩图片质量,在压缩图片...

  • GraphicsMagick图片压缩工具类

    Tip:据说淘宝使用此软件进行图片压缩 前提条件 下载GraphicsMagick 添加Im4Java依赖 实现 ...

网友评论

      本文标题:java实现图片压缩

      本文链接:https://www.haomeiwen.com/subject/fnqwuqtx.html