问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

两天两夜,1M图片优化到100kb!

提问网友 发布时间:2025-03-12 08:08
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
1个回答
热心网友 回答时间:2025-04-24 21:10
点击蓝色“程序员黄小斜”关注我哟

大家好,我是 黄小斜。这篇文章分享一下图片压缩方面的技术。坦白从宽吧,我就是那个花了两天两夜把 1M 图片优化到 100kb 的家伙!网络上曝光的那些关于一码通的消息,有真有假,我这里就不再澄清了。就说说我是怎么把图片从 1M 优化到 100kb 的故事吧。是的,由于系统群体规模和访问规模的特殊性,每一行代码、每一张图片、每一个技术文档都反复核准,优化再优化,精益求精。为确保系统运行得更高效,我们将一张图片从1MB压缩到500KB,再从500KB优化到100KB。

这样的工作在外人看起来,简单到就好像悄悄给学妹塞一张情书就能让她做我女朋友一样简单。但殊不知,这其中蕴含着极高的技术含量!不信,我给你们普及下。

一、图像压缩是数据压缩技术在数字图像上的应用,目的是减少图像数据中的冗余信息,从而用更加高效的格式存储和传输数据。图像压缩可以是有损数据压缩,也可以是无损数据压缩。

二、Java数字图像处理技术是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。输入的是图像信号,然后经过 DIP 进行有效的算法处理后,输出为数字信号。为了压缩图像,我们需要读取图像并将其转换成 BufferedImage 对象,BufferedImage 是 Image 类的一个子类,描述了一个具有可访问的图像数据缓冲区,由 ColorModel 和 Raster 的图像数据组成。我用 ImageIO 类来读取图像并将其转换成 BufferedImage 对象。

三、我用 ImageIO 类进行图像压缩。通过ImageIO.read() 可以将图像读取到 BufferedImage 对象,通过ImageIO.getImageWritersByFormatName() 可以返回一个Iterator,其中包含了通过命名格式对图像进行编码的 ImageWriter,通过ImageIO.createImageOutputStream() 可以创建一个图像的输出流对象,有了该对象后就可以通过 ImageWriter.setOutput() 将其设置为输出流。紧接着,对 ImageWriter 进行一些参数配置,比如说压缩模式,压缩质量等等。压缩模式一共有四种,MODE_EXPLICIT 是其中一种,表示 ImageWriter 可以根据后续的 set 的附加信息进行平铺和压缩。setCompressionQuality() 方法的参数是一个 0-1 之间的数,0.0 表示尽最大程度压缩,1.0 表示保证图像质量很重要。对于有损压缩方案,压缩质量应该控制文件大小和图像质量之间的权衡(例如,通过在写入 JPEG 图像时选择量化表)。对于无损方案,压缩质量可用于控制文件大小和执行压缩所需的时间之间的权衡(例如,通过优化行过滤器并在写入 PNG 图像时设置 ZLIB 压缩级别)。整体代码如下所示,执行压缩后,可以看到图片的大小压缩到了 19 KB。

四、接下来,推荐一些可以轻松集成到项目中的图像处理库,它们全都是免费的。1)ImageJ,用 Java 编写的,可以编辑、分析、处理、保存和打印图像。2)Apache Commons Imaging,一个读取和写入各种图像格式的库,包括快速解析图像信息(如大小,颜色,空间,ICC配置文件等)和元数据。3)ImageMagick,可以读取和写入超过100种格式的图像,包括DPX、EXR、GIF、JPEG、JPEG-2000、PDF、PNG、Postscript、SVG和TIFF。还可以调整大小、翻转、镜像、旋转、扭曲、剪切和变换图像,调整图像颜色,应用各种特殊效果,包括绘制文本、线条、多边形、椭圆和贝塞尔曲线。4)OpenCV,由 BSD 许可证发布,可以免费学习和商业使用,提供了包括 C/C++、Python 和 Java 等主流编程语言在内的接口。OpenCV 专为计算效率而设计,强调实时应用,可以充分发挥多核处理器的优势。我以 OpenCV 为例,来演示一下图像压缩。OpenCV 用来压缩图像属于典型的大材小用。第一步,添加 OpenCV 依赖到我们的项目当中,以 Maven 为例。第二步,要想使用 OpenCV,需要先初始化。第三步,使用 OpenCV 读取图片。第四步,使用 OpenCV 压缩图片。MatOfInt 的构造参数是一个可变参数,第一个参数 IMWRITE_JPEG_QUALITY 表示对图片的质量进行改变,第二个是质量因子,1-100,值越大表示质量越高。执行代码后得到的图片如下所示,这是我本机的配置情况,早年买的顶配 iMac,也是我的主力机。一开始只有 16 G 内存,后来加了一个 16 G 内存条,不过最近半年电脑突然死机重启的频率明显提高了,不知道是不是 Big Sur 这个操作系统的问题还是电脑硬件老了。结果如下所示,压缩后的图片大小差不多,都是 19 KB,并且质量因子都是最低值。

经过上面的技术分析后,相信你们都明白了,把1M图片优化到100kb实在是一件“不太容易”的事情。100KB 很小了吧?只有原来的 1/10。要知道,我可是连续加班了两天两夜,不眠不休。累到最后,我趴在电脑上都睡着了。没想到哈喇子直接给电脑整短路了,我这才算是从梦里面吓醒来了!

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

ImageJ实用教程——网页版ImageJ 小米13ultra和苹果14promax哪个好值得入手 参数区别对比 小米13Ultra建议入手吗 小米13Ultra优缺点全方面对比分析 小米13ultra和小米15选哪个 做临期食品怎么样 支付宝可以帮朋友实名认证吗? 迅雷如何实现批量下载? 迅雷批量下载网页中的pdf文件 上网必备技能,网页图片和视频下载方法和工具汇总,另附chrome插件扩展程 ... 交通事故后,车被扣了,处理完后,营业车辆虽是否可以要求赔偿 批量下载工具有哪些? 在这个网站什么用迅雷批量下载 如何让从网页批量下载图片 如何批量下载某一网页/网站所有链接里包含的文档?所以请推 花瓶底足有黑渣又像墨迹一样足怎样造成的? 好服务能赚大钱:海底捞教你如何赚大钱目录 保鲜袋和保鲜膜有什么区别 保鲜袋可以重复使用吗 腊肉放冰箱用保鲜膜还是用保鲜袋好腊肉放冰箱可以用塑料袋吗 保鲜膜和保鲜袋哪个好 微信小程序登录方法之授权登陆及获取微信用户手机号 使用Cellpose和ImageJ分析多标细胞荧光强度 怎样才能把360的360bdoctor关了? 物理学中如何正确使用估读? 高中物理什么时候要估读,估读的原则是什么? 河南新乡哪里有卖花的地方 下单小程序制作 生姜水洗头发多久见效 姜片洗头能起什么作用 360奇酷手机怎么去广告360奇酷手机怎么去广告弹窗 如何把群名片分享给朋友 淘宝的周交易从星期几开始算的??,一周交易量超了有什么后果???_百度... 淘宝中的上周成交数值怎么查询? 360日历精选怎么关闭360日历精选彻底关闭方法 360日历怎么彻底删除360日历功能彻底卸载方法 360日历精选怎么关闭 日历精选关闭的方法有哪些 八字里有三个土缺水如何改善,名字李佳欣, 神仙手绘头像图片大全(神仙手绘壁纸高清) PDF匿名版是什么意思-PDF匿名版介绍 pdf被设置权限了怎么解除 免费解除PDF密码的方法简便有效的PDF密码破解技巧
Top