首页 > 编程语言 >直播网站程序源码,Java实现图片压缩

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

时间:2023-08-23 14:23:45浏览次数:50  
标签:Java int 压缩 bytes 直播 new accuracy 源码 图片

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

1、Thumbnailator简介

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

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

 

2、引入依赖

2.1、github地址

 

        https://github.com/coobird/thumbnailator

2.2、maven地址

 

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

 

3、代码

 

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

 

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

 

标签:Java,int,压缩,bytes,直播,new,accuracy,源码,图片
From: https://www.cnblogs.com/yunbaomengnan/p/17651498.html

相关文章

  • 直播网站源码,mysql,mariadb 密码忘记,修改密码
    直播网站源码,mysql,mariadb密码忘记,修改密码两种修改方法: 1、直接在shell命令行使用mysqladm命令修改。 #mysqladmin-uroot-poldpasswordpasswordnewpassword ​这种方法的弊端在于会明文显示密码。2、登陆数据库修改密码。 #mysql-uroot-p  2.1更新......
  • 直播平台软件开发,vue-全局过滤器时间
    直播平台软件开发,vue-全局过滤器时间步骤一:处理数据 exportconstformatYmd=(date)=>{ lettime=newDate(date)  lety=time.getFullYear() letm=time.getMonth()+1 letd=time.getDate()  return[y,m,d].map((v)=>String(v).padStart(2,'0......
  • 配置反编译eclipse直接查看源码
    https://blog.csdn.net/chinaxiaofeng8/article/details/81773729?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-81773729-blog-122870963.235%5Ev38%5Epc_relevant_anti_t3_base&depth_1-utm_source......
  • java多线程使用详解与案例,超详细
    一、创建线程的方式1、继承Thread类让子类继承Thread线程类子类必须重写Thread类的run方法创建一个自己定义的线程对象调用start()方法启动线程//测试类/***1、让子类继承Thread线程类*/publicclassThreadTest1extendsThread{//2、子类必须重写Thread类......
  • TiDB 源码编译之 TiFlash 篇
    作者:ShawnYan导言TiFlash从去年四月一日开源至今已经过去将近一年半,这段时间里TiFlash从v6.0.0-DMR升级到了v7.3.0-DMR,并增加了若干新特性,比如支持MPP实现窗口函数框架,新增支持若干算子和函数下推,支持AWSS3算存分离等。先来回顾一下TiFlash资源精华帖,【重磅消息】......
  • 打造引人注目的直播体验:直播美颜SDK的集成与优化
    随着移动互联网的迅速发展,视频直播已经成为人们交流、娱乐和信息传递的重要方式。在这个多元化的直播市场中,吸引观众的注意力变得尤为重要。其中,美颜技术在增强直播体验方面发挥着关键作用。直播美颜SDK的集成和优化使得主播能够以最佳状态出现在镜头前,同时也为观众提供更加愉悦的......
  • 蛋糕店销售系统的设计与实现-计算机毕业设计源码+LW文档
    摘要随着信息技术的发展,基于web模式的购物系统逐渐普及,网上购物是一种新型的商务模式,其工作流程和经营模式受到了欢迎。电子商务可以适应现代化快节奏的生活方式,满足各类人群足不出户的在线购物,利用商城使得买卖双方完成线上交易,提高了购买效率。因此,开发一个适合商品在线选购的......
  • 课堂管理系统的设计与实现-计算机毕业设计源码+LW文档
    摘要随着互联网技术的推进,我国高等教育逐渐实现信息化。许多精品课堂管理系统的开发建设大大提高了教职工的教学效率,也为培养更多的高素质人才提供了途径。但是课堂管理系统的发展也存在交互性不强、资源更新缓慢、教学形式单一等问题。因此,笔者设想开发一个交互型的课堂管理系统......
  • 郑州商学院校园新闻管理系统的设计与实现计算机毕业设计源码
    摘要在互联网发展迅速的今天,人们已经开始习惯用网络来填充生活中的碎片时间。比如听歌、看视频、看新闻等,遇到自己喜欢的内容时并不一定有时间一次性看完。各种新闻内容存储在不同平台会不方便查找。郑州商学院校园新闻管理系统可以很好的解决这一问题,郑州商学院校园新闻管理系统......
  • 基于ssm的动漫推荐平台系统设计-计算机毕业设计源码+LW文档
    摘要随着信息技术的发展,基于web模式的管理系统逐渐普及,网上查找信息是目前广受欢迎的模式。基于ssm的动漫推荐平台系统可以适应现代化快节奏的生活方式,满足各类人群足不出户的在线查找动漫,利用基于ssm的动漫推荐平台系统可以获取动漫的信息,并可以和其他用户进行交流,提高了动漫的......