直播系统搭建,Java实现图片压缩

直播系统搭建,Java实现图片压缩

1、maven地址

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

​2、代码

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>    } 

以上就是 直播系统搭建,Java实现图片压缩,更多内容欢迎关注之后的文章

 

posted @   云豹科技-苏凌霄  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2022-07-11 短视频直播源码,DialogFragment全屏且半透明
2022-07-11 直播平台搭建,计时和倒计时功能的分别实现
2022-07-11 直播平台源代码,JavaScript 的四种调试输出方式
点击右上角即可分享
微信分享提示