直播系统搭建,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实现图片压缩,更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2022-07-11 短视频直播源码,DialogFragment全屏且半透明
2022-07-11 直播平台搭建,计时和倒计时功能的分别实现
2022-07-11 直播平台源代码,JavaScript 的四种调试输出方式