java 图片 无损压缩

位置:首页>文章>详情   分类: 教程分享 > Java教程   阅读(1605)   2023-03-28 11:29:14

前言

随着科技进步,大家手机拍的照片也从之前的几百KB变成几MB或者10MB了,有些情况我们需要压缩一下图片节省网络资源。这里将会讲解如何采用Java语音进行图片的无损压缩(有点不明显的)

Java无损压缩图片依赖包

        <!--图片压缩等操作-->
		<dependency>
			<groupId>net.coobird</groupId>
			<artifactId>thumbnailator</artifactId>
			<version>0.4.8</version>
		</dependency>

Java 图片无损压缩工具类代码

$title(ImageCompressUtil.java)
package net.xqlee.project.utils.image;

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;

import javax.imageio.ImageIO;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * 图片压缩工具
 */
public class ImageCompressUtil {
    /**
     * 流方式输入输出图片压缩
     *
     * @param src     文件输入流(单个)
     * @param target  压缩后文件输出流(单个)
     * @param quality 压缩质量
     * @throws IOException
     */
    public static void compress(InputStream src, OutputStream target, float quality) throws IOException {
        Thumbnails.of(src).scale(1)
                .outputQuality(quality).toOutputStream(target);
    }

    /**
     * 流方式输入输出图片压缩
     *
     * @param src     文件输入流(单个)
     * @param target  压缩后文件输出流(单个)
     * @param quality 压缩质量
     * @throws IOException
     */
    public static void compress(InputStream src, OutputStream target, float quality, String format) throws IOException {
        Thumbnails.of(src).scale(1)
                .outputFormat(format)//输出格式
                .outputQuality(quality).toOutputStream(target);
    }

    /**
     * 压缩并重置大小(流式)
     *
     * @param src
     * @param target
     * @param quality
     * @param width
     * @param height
     * @throws IOException
     */
    public static void compressAndsize(InputStream src, OutputStream target, float quality, int width, int height) throws IOException {
        Thumbnails.of(src).size(width, height).keepAspectRatio(false).outputQuality(quality).toOutputStream(target);
    }

    /**
     * @param src
     * @param target
     * @param quality
     * @param width
     * @param height
     * @param format
     * @throws IOException
     */
    public static void compressAndsize(InputStream src, OutputStream target, float quality, int width, int height, String format) throws IOException {
        Thumbnails.of(src).size(width, height).keepAspectRatio(false)
                .outputFormat(format)//输出格式
                .outputQuality(quality).toOutputStream(target);
    }

    /**
     * 根据宽比例压缩(流式)
     *
     * @param src
     * @param target
     * @param quality
     * @param width
     * @throws IOException
     */
    public static void compressAndsizeWidth(InputStream src, OutputStream target, float quality, int width) throws IOException {
        Thumbnails.of(src).width(width).keepAspectRatio(true).outputQuality(quality).toOutputStream(target);
    }

    /**
     * 根据宽比例压缩(流式)
     *
     * @param src
     * @param target
     * @param quality
     * @param width
     * @throws IOException
     */
    public static void compressAndsizeWidth(InputStream src, OutputStream target, float quality, int width, String format) throws IOException {
        Thumbnails.of(src).width(width).keepAspectRatio(true)
                .outputFormat(format)//输出格式
                .outputQuality(quality).toOutputStream(target);
    }


    /**
     * 根据宽比例压缩(流式)
     *
     * @param src
     * @param target
     * @param quality
     * @param height
     * @throws IOException
     */
    public static void compressAndsizeHeight(InputStream src, OutputStream target, float quality, int height) throws IOException {
        Thumbnails.of(src).height(height).keepAspectRatio(true).outputQuality(quality).toOutputStream(target);
    }

    /**
     * 根据宽比例压缩(流式)
     *
     * @param src
     * @param target
     * @param quality
     * @param height
     * @throws IOException
     */
    public static void compressAndsizeHeight(InputStream src, OutputStream target, float quality, int height, String format) throws IOException {
        Thumbnails.of(src).height(height).keepAspectRatio(true)
                .outputFormat(format)//输出格式
                .outputQuality(quality).toOutputStream(target);
    }

    /**
     * 压缩并添加图片水印(流式)
     *
     * @param src      原图
     * @param target   输出图
     * @param mark     水印图片
     * @param position 水印位置
     * @param opacity  水印透明度 0.0f-1.0f
     * @param quality  图片质量 0-1
     * @throws IOException
     */
    public static void compressAndWatermark(InputStream src, OutputStream target, InputStream mark, Positions position, float opacity, float quality) throws IOException {
        Thumbnails.of(src)
                .scale(1)
                .watermark(position, ImageIO.read(mark), opacity)
                .outputQuality(quality)
                .toOutputStream(target);
    }

    /**
     * 压缩并添加图片水印(流式)
     *
     * @param src      原图
     * @param target   输出图
     * @param mark     水印图片
     * @param position 水印位置
     * @param opacity  水印透明度 0.0f-1.0f
     * @param quality  图片质量 0-1
     * @throws IOException
     */
    public static void compressAndWatermark(InputStream src, OutputStream target, InputStream mark, Positions position, float opacity, float quality, String format) throws IOException {
        Thumbnails.of(src).scale(1)
                .watermark(position, ImageIO.read(mark), opacity)
                .outputFormat(format)//输出格式
                .outputQuality(quality).toOutputStream(target);
    }

    public static void main(String[] args) {
        try {
//                compress("D:\\workplace\\IMG_20181024_105224.jpg","D:\\workplace\\IMG_20181024_105224-zp.jpg",0.8f);
//             compressAndFormat("D:\\workplace\\IMG_20181024_105224.jpg","D:\\workplace\\IMG_20181024_105224-zp.png","png",0.8f);
//            compressAndsize("D:\\workplace\\IMG_20181024_105224.jpg", "D:\\workplace\\IMG_20181024_105224-zp-size.jpg", 0.8f, 1200, 400);
//            FileInputStream src=new FileInputStream(new File("D:\\test.jpg"));

//            InputStream icon=new FileInputStream(new File("d:\\icon.png"));

//            OutputStream target=new FileOutputStream(new File("D:\\test-size.jpg"));

//            compressAndsize(src, target, 0.9f, 484, 300,"jpg");

//            compressAndWatermark(src,target,icon,Positions.BOTTOM_RIGHT,1,0.8f);
//            src.close();
//            icon.close();
//            target.close();


        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

以上代码就是采用Google的一个工具进行图片的压缩,效果还是非常不错的。注意png压缩不明显,jpg图片压缩大小效果明显一些。
收工
 
地址:https://www.leftso.com/article/537.html

相关阅读

java 图片 无损压缩。随着科技进步,大家手机拍的照片也从之前的几百KB变成几MB或者10MB了,有些情况我们需要压缩一下图片节省网络资源。这里将会讲解如何采用Java语音进行图片的无损压缩
tomcat6/7/8配置启用gzip压缩页面内容
功能说明:1.指定图片大小缩放图片(reSize);2.指定图片的宽度,高度根据比例缩放(reSizeByWith);3.指定图片的高度,宽度根据比例缩放(reSizeByHeight);4.判...
MySQL5.7.20压缩包安装配置流程
Java编程中处理图片文件与base64串的图片相互转化工具类,方便在编程中处理前端传递过来的base64图片。
这里主要讲解在Java编程中如何使用zip算法来打包文件、文件集合和解压一个zip包的工具类。该工具类主要通过Apache的compress项目中衍生出来的。
Java编程中,很多报表系统需要导出Excel文件,并且某些时候需要导出一定的图形统计,其实就是将图片放在Excel中,下面讲解Java如何实现Excel图片编辑插入
java实现生成彩色背景图片验证码,在登陆和注册可以使用,工具类将图片的IO流通过response输出到浏览器,在浏览器中可以使用 img标签的src属性路径写上该工具类的访问路径即可。
css设置背景图片不随浏览器滚动条滚动,即固定背景图片
spring boot 图片上传后在线预览实现,某些情况下我们上传的图片需要在线预览而不是下载,这个时候就需要注意下面的两个配置了response.setHeader("Content-Type...