Java图片批量压缩像素的实现方法是什么
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,Java图片批量压缩像素的实现方法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。图片压缩大法为了防止用户流量的丢失
千家信息网最后更新 2025年01月18日Java图片批量压缩像素的实现方法是什么
Java图片批量压缩像素的实现方法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
图片压缩大法
为了防止用户流量的丢失,即使在5g 即将来临的情况下,压缩算法依旧是很有必要的,额跑题了,不好意思,今天介绍的不是压缩算法,讲啥呢?主要讲讲如何通过 java 将图片进行压缩,尽可能的控制压缩损比,不仅仅是为了减少存储,其目的是快速呈现给用户,只有良好的体验,才会在当今这个急躁的年代减少流量的损失。
最近因为公司要需要xxx认证上传测试用例功能的具体截图、发现有大小限制、所以就进行了图片压缩,简单记录一下。
压缩前大小:
压缩后大小:
具体代码实现:
main方法测试:
public static void main(String[] args) throws IOException { String modpath = "C:\\Users\\Administrator\\Desktop\\鲲鹏认证\\test\\"; getFiles("C:\\Users\\Administrator\\Desktop\\鲲鹏认证\\测试用例清单", modpath, 160);//将图片压缩至100宽 }
文件大小处理
/** * @param srcPath 原图片路径 * @param desPath 转换大小后图片路径 * @param width 转换后图片宽度 * @param height 转换后图片高度 */ public static void resizeImage(String srcPath, String desPath, int width, int height) throws IOException { File srcFile = new File(srcPath); Image srcImg = ImageIO.read(srcFile); BufferedImage buffImg = null; buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); //使用TYPE_INT_RGB修改的图片会变色 buffImg.getGraphics().drawImage(srcImg.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null); String filePath=""; if (srcFile.getName().contains("#")) { filePath = srcFile.getName().replace("#", ""); }else{ filePath=srcFile.getName(); } ImageIO.write(buffImg, "PNG", new File(desPath + filePath)); }
获取目录文件信息
/** * @param scaleSize 图片的修改比例,目标宽度 */ public static void getFiles(String path, String modPath, int scaleSize) throws IOException { ArrayListfiles = new ArrayList (); File file = new File(path); File[] tempList = file.listFiles(); //循环读取目录下图片 for (int i = 0; i < tempList.length; i++) { String filePath = tempList[i].getName(); if (tempList[i].isFile()) { System.out.println("文件:" + filePath + "-" + tempList[i].getAbsolutePath().replaceAll("\\\\", "/")); String[] imagePath = tempList[i].getAbsolutePath().replaceAll("\\\\", "/").split("/"); String imageNumber = null; FileUtil.resizeImage(tempList[i].getAbsolutePath().replaceAll("\\\\", "/"), modPath, 160, 160); files.add(tempList[i].toString()); } if (tempList[i].isDirectory()) { System.out.println("文件夹:" + tempList[i]); } } System.out.println(path + "下文件数量:" + files.size()); }
控制台目录压缩成功保存到盘符:
附:利用Graphics类如何进行压缩图像
Graphics类提供基本绘图方法,Graphics类提供基本的几何图形绘制方法,主要有:画线段、画矩形、画圆、画带颜色的图形、画椭圆、画圆弧、画多边形、画字符串等。 这里不做一一赘述, 进重点介绍一下,利用Graphics类如何进行压缩图像。不多说直接上代码。
/** * compressImage * * @param imageByte * Image source array * @param ppi * @return */ public static byte[] compressImage(byte[] imageByte, int ppi) { byte[] smallImage = null; int width = 0, height = 0; if (imageByte == null) return null; ByteArrayInputStream byteInput = new ByteArrayInputStream(imageByte); try { Image image = ImageIO.read(byteInput); int w = image.getWidth(null); int h = image.getHeight(null); // adjust weight and height to avoid image distortion double scale = 0; scale = Math.min((float) ppi / w, (float) ppi / h); width = (int) (w * scale); width -= width % 4; height = (int) (h * scale); if (scale >= (double) 1) return imageByte; BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); buffImg.getGraphics().drawImage(image.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null); ByteArrayOutputStream out = new ByteArrayOutputStream(); ImageIO.write(buffImg, "png", out); smallImage = out.toByteArray(); return smallImage; } catch (IOException e) { log.error(e.getMessage()); throw new RSServerInternalException(""); } }
其实,关键点就两处
BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);buffImg.getGraphics().drawImage(image.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
图片
大小
文件
方法
目录
测试
认证
代码
图像
图形
宽度
流量
用户
算法
路径
鲲鹏
帮助
控制
像素
不好意思
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
sas根据字段拆分数据库
数据库设计属于概要设计吗
软件开发专科浙江学校
打开网络安全性
教育系统软件开发商
地税局网络安全责任人书
股票交易系统数据库
贵阳软件开发培训学校
所选数据库没有在数据库引擎中
中小学生家庭安全网络安全
nds 自制服务器
数据库实验二答案
count 去重复数据库
ftp服务器怎么更改目录
eth服务器中转抽水
数据库降低价格语句
北京万康通信网络技术
达梦数据库服务器怎么查访问数
我的世界服务器地狱门怎么造
数据库信息特点
密云区咨询软件开发服务电话
计算机网络技术的专业技能
梦幻西游百花村哪个服务器的
ftp 无法连接服务器
俄罗斯官员谈网络安全
roblox怎么看全部服务器
按键精灵sql数据库插件
dnf服务器有哪几个
用数据库c 做学生成绩系统
软件开发根据需求估算