java 图片 无损压缩

教程分享 > Java教程 > 博文分享 (3503) 2024-04-17 12:33:23

前言

随着科技进步,大家手机拍的照片也从之前的几百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图片压缩大小效果明显一些。
收工
 

相关文章
java 图片 无损压缩。随着科技进步,大家手机拍的照片也从之前的几百KB变成几MB或者10MB了,有些情况我们需要压缩一下图片节省网络资源。这里将会讲解如何采用Java语音进行图片的无损压缩
jpg图片压缩是什么       jpg图片压缩就是让图片体积大小更小或者尺寸和体积都变小
提示:Leftso Image Compression 已更名为 小左图工最新版:Leftso Image Compression 1.4发布啦Leftso Image Compression ...
webp图片格式简介webp是谷歌2010年研发的一个图片格式,是一种同时提供了有损压缩与无损压缩(可逆压缩)的图片文件格式
在这个数字化生活和工作中,PNG格式作为保真度高且支持透明背景的图片格式,备受青睐。然而,原生PNG文件往往体积较大,不仅影响网站加载速度,还会加大移动应用包体容量,甚至占用过多本地存储空间。为...
nginx开启gzip压缩配置配置参考:server{listen443ssl;server_namet.example.com;#charsetkoi8-r;#access_log/var/l...
视频压缩软件名称VidCoder视频压缩工具VidCoder简介 VidCoder是一款适用于Windows的开源DVD /蓝光翻录和视频转码应用程序
最新版 Leftso Image Compression 1.4发布啦-左搜Leftso Image Compression 1.1发布了Leftso Image Compression 是一款...
tomcat6/7/8配置启用gzip压缩页面内容
MySQL5.7.20压缩包安装配置流程
最近在学习JavaFX,发现资料很少,连基本的图片读取都很多错误版本
功能说明:1.指定图片大小缩放图片(reSize);2.指定图片的宽度,高度根据比例缩放(reSizeByWith);3.指定图片的高度,宽度根据比例缩放(reSizeByHeight);4.判...
ICO图片是一种常见的图标文件格式,通常用于Windows操作系统中的应用程序、文件夹、快捷方式等的图标。ICO文件通常包含多个不同尺寸和颜色深度的图标,以便在不同分辨率的屏幕上显示。
当今的数字时代,图片已成为我们生活中不可或缺的一部分。无论是在工作中还是在日常生活中,我们都需要用到图片。但是,不同的应用程序和设备支持的图片格式不同,这就需要我们使用一个图片格式转换工具来解决...
Java编程中处理图片文件与base64串的图片相互转化工具类,方便在编程中处理前端传递过来的base64图片。