直播网站程序源码,Java实现图片压缩

直播网站程序源码,Java实现图片压缩

1、Thumbnailator简介

        对于图片处理,JDK中也提供了对应的工具类,不过处理起来会很麻烦,而Thumbnailator是一个Google开源的优秀图片处理的第三方Java类库,处理效果远比Java API的好。

        Thumbnailator可以使用很少的代码实现图片的压缩功能,当然了,Thumbnailator也提供给图片缩放、旋转与加水印等功能。

 

2、引入依赖

2.1、github地址

 

1
        https://github.com/coobird/thumbnailator

2.2、maven地址

 

1
        <dependency><br>            <groupId>net.coobird</groupId><br>            <artifactId>thumbnailator</artifactId><br>            <version>0.4.17</version><br>        </dependency>

 

3、代码

 

1
import net.coobird.thumbnailator.Thumbnails;<br> <br>import javax.imageio.ImageIO;<br>import java.awt.image.BufferedImage;<br>import java.io.*;<br>import java.math.BigDecimal;<br> <br>/**<br> * 图片处理工具类.<br> *<br> * @author admin<br> * @date 2022-09-23 17:10<br> */<br>public class PicUtils {<br> <br>    public static void main(String[] args) {<br> <br>        PicUtils.compressPicForScale("C:\\Users\\Li\\Downloads\\test.jpeg", "C:\\Users\\Li\\Downloads\\test1.jpeg",<br>                100, 0.8, 2560, 1440); // 图片小于1000kb<br> <br>    }<br> <br>    /**<br>     * 根据指定大小和指定精度压缩图片<br>     *<br>     * @param srcPath      源图片地址<br>     * @param desPath      目标图片地址<br>     * @param desFileSize  指定图片大小,单位kb(压缩到多大以内)<br>     * @param accuracy     精度,递归压缩的比率,建议小于0.9<br>     * @param desMaxWidth  目标最大宽度<br>     * @param desMaxHeight 目标最大高度<br>     * @return 目标文件路径<br>     */<br>    public static String compressPicForScale(String srcPath, String desPath, long desFileSize, double accuracy, int desMaxWidth, int desMaxHeight) {<br>        if (!new File(srcPath).exists()) {<br>            return null;<br>        }<br>        try {<br>            File srcFile = new File(srcPath);<br>            long srcFileSize = srcFile.length();<br>            System.out.println("源图片:" + srcPath + ",大小:" + srcFileSize / 1024 + "kb");<br>            //获取图片信息<br>            BufferedImage bim = ImageIO.read(srcFile);<br>            int srcWidth = bim.getWidth();<br>            int srcHeight = bim.getHeight();<br> <br>            //先转换成jpg<br>            Thumbnails.Builder<File> builder = Thumbnails.of(srcFile).outputFormat("jpg");<br> <br>            // 指定大小(宽或高超出会才会被缩放)<br>            if (srcWidth > desMaxWidth || srcHeight > desMaxHeight) {<br>                builder.size(desMaxWidth, desMaxHeight);<br>            } else {<br>                //宽高均小,指定原大小<br>                builder.size(srcWidth, srcHeight);<br>            }<br> <br>            // 写入到内存<br>            ByteArrayOutputStream bos = new ByteArrayOutputStream(); //字节输出流(写入到内存)<br>            builder.toOutputStream(bos);<br> <br>            // 递归压缩,直到目标文件大小小于desFileSize<br>            byte[] bytes = compressPicCycle(bos.toByteArray(), desFileSize, accuracy);<br> <br>            // 输出到文件<br>            File desFile = new File(desPath);<br>            FileOutputStream fos = new FileOutputStream(desFile);<br>            fos.write(bytes);<br>            fos.close();<br> <br>            System.out.println("目标图片:" + desPath + ",大小" + desFile.length() / 1024 + "kb");<br>            System.out.println("图片压缩完成!");<br>        } catch (Exception e) {<br>            e.printStackTrace();<br>            return null;<br>        }<br>        return desPath;<br>    }<br> <br>    private static byte[] compressPicCycle(byte[] bytes, long desFileSize, double accuracy) throws IOException {<br>        // File srcFileJPG = new File(desPath);<br>        long srcFileSizeJPG = bytes.length;<br>        // 2、判断大小,如果小于500kb,不压缩;如果大于等于500kb,压缩<br>        if (srcFileSizeJPG <= desFileSize * 1024) {<br>            return bytes;<br>        }<br>        // 计算宽高<br>        BufferedImage bim = ImageIO.read(new ByteArrayInputStream(bytes));<br>        int srcWidth = bim.getWidth();<br>        int srcHeight = bim.getHeight();<br>        int desWidth = new BigDecimal(srcWidth).multiply(new BigDecimal(accuracy)).intValue();<br>        int desHeight = new BigDecimal(srcHeight).multiply(new BigDecimal(accuracy)).intValue();<br> <br>        ByteArrayOutputStream bos = new ByteArrayOutputStream(); //字节输出流(写入到内存)<br>        Thumbnails.of(new ByteArrayInputStream(bytes)).size(desWidth, desHeight).outputQuality(accuracy).toOutputStream(bos);<br>        return compressPicCycle(bos.toByteArray(), desFileSize, accuracy);<br>    }<br> <br>}

 

 以上就是直播网站程序源码,Java实现图片压缩, 更多内容欢迎关注之后的文章

 

posted @   云豹科技-苏凌霄  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2022-08-23 直播源码开发,uni-app点击实现页面跳转
2022-08-23 搭建直播平台,uniapp开发动态更换状态栏颜色
2022-08-23 直播电商平台开发,uni-app实现卡片切换效果
2021-08-23 ElevatedButton小视频app源码设置背景与字体颜色
2021-08-23 直播系统源码去掉导航栏分割线 和 设置导航栏的背景颜色
2021-08-23 直播视频网站源码实现鼠标移动淡入淡出Canvas小球效果
点击右上角即可分享
微信分享提示