为了防止用户流量的丢失,即使在5g 即将来临的情况下,压缩算法依旧是很有必要的,额跑题了,不好意思,今天介绍的不是压缩算法,讲啥呢?主要讲讲如何通过 java 将图片进行压缩,尽可能的控制压缩损比,不仅仅是为了减少存储,其目的是快速呈现给用户,只有良好的体验,才会在当今这个急躁的年代减少流量的损失。
最近因为公司要需要xxx认证上传测试用例功能的具体截图、发现有大小限制、所以就进行了图片压缩,简单记录一下。
main方法测试:
public static void main(string[] args) throws ioexception { string modpath = "c:\\urs\\administrator\\desktop\\鲲鹏认证\\test\\"; getfiles("c:\\urs\\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("#", ""); }el{ 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 { arraylist<string> files = new arraylist<string>(); 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].getabsolut日电epath().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类如何进行压缩图像。不多说直接上代码。
/** * compressimage * * @param imagebyte * image source array * @param ppi * @return */public static byte[] compressimage(byte[] ima脑筋急转弯大全gebyte, 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 distortiondouble scale = 0;scale = math.min((float) ppi / w, (float) ppi / h);width = (int) (w * scale);width -= width % 4;height = (int) (h * scale); if (scale >= (dou签名转换器ble) 1)return imagebyte; bufferedimage buffimg = new bufferedimage(width, h千古名诗eight, 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.tobyt南京的211earray();return smallimage; } catch (ioexception e) {log.error(e.getmessage());throw new rsrverinternalexception("");}}
其实,关键点就两处
bufferedimage buffimg = new bufferedimage(width, height, bufferedimage.type_int_rgb);buffimg.getgraphics().drawimage(image.getscaledinstance(width, height, image.scale_smooth), 0, 0, null);
到此这篇关于java图片批量压缩像素实现的文章就介绍到这了,更多相关java图片批量压缩像素内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 01:54:56,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/f789aa73c07d88851ab0956a7d71b0f2.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Java图片批量压缩像素的实现方法.doc
本文 PDF 下载地址:Java图片批量压缩像素的实现方法.pdf
留言与评论(共有 0 条评论) |