压缩就是减肥。
1024kb 减到 100kb
你说,有多难吧
配合去年年初铁路大连车务段的《全力攻关一昼夜,确保运输三十站》一文观看,味道更佳。
给不熟悉的小伙伴概括一下:
1.Flash早已宣布将于2021年1月1号正式停用;
2.大连某车站报告调度系统无法正常访问;
3.大连车务段技术人员如临大敌,开了一次又一次的会。
4.全力攻关一昼夜,最终所有车站的调度系统得以恢复。
5.恢复办法:安装低版本Flash Player。
首先,他们这个报道里面讲的压缩图片,不是指绿码的二维码图片。
根据网友抓包情况来看,二维码还是用的数据接口,然后在前端生成的。
所以他们这个压缩的图片应该是界面的logo图片或者背景图
其次,手机屏幕上展示的图片,只要不去放大看,根本不需要多高的分辨率,因为手机屏幕就这么大。即使是4k屏幕的手机,放个1080的图片你看起来也差不多。
如果是logo或者背景图,那么要求就更低,你在手机屏幕上看起来很正常的logo或者背景图,随随便便不超过100k是正常情况。
所以可以得出结论,这个报道就跟前些时盖章几亿次那个报道一回事。
这句话约等于:“该技术团队用了两天两页的时间对饿了么app的 使用方法 进行技术攻坚,最终成功点了一份羊肉泡馍!”
这个文案保守了,没有技术细节,突出不了难度。看我给编一个:
针对这个技术难题,我们查阅资料,尝试了多种图片压缩技术。
首先,我们选用了当下最主流的即时通讯工具:微信。我们利用该软件自带的截图技术,对图片进行了截取,图片从1M被压缩到了915k。效果并不是太好。经过研究发现,是我们在截图的过程中将图片缩放的比例设置成了200%,影响了压缩效果。因此我们将该参数调整到了75%,图片被压缩到了623kb,且图片重要细节都被保留,达到了令人满意的效果。
经过不断尝试,我们发现将图片的缩放参数设置为56%时,可以将图片压缩到509k,但距离我们的目标,500k,仍然有一些差距。但是当把参数下调时,图片的大小又会降到500k以下,始终达不到我们设定的标准值。我们对此反复调试,终于发现,当把缩放比例设置为49%时,截取出的图片刚好为500k。此时,我们已经持续工作了一天一夜。
但是第二天,任务依然艰巨。我们需要继续将图片进行压缩,达到“百k”级大小。老的方法已经不能用了,我们必须寻求新的突破。因此我们遍寻知网、sciencedirect、IEEE等学术网站,寻找当下最新的图片压缩技术。功夫不负有心人,终于在一篇来自嘉勒顿大学的论文中找到线索,有一款名为 adobe photoshop的小众软件可以实现对图片尺寸的快速调节。我们连夜联系论文的作者,希望能得到该软件的下载地址。但是对方始终没有回应。
“万事还要靠自己!”面对国外的技术封锁,我这样鼓励我们的技术人员。我们排除万难,继续搜索,终于在“百度网盘”中找到了该软件的压缩包。我们用了五个小时的时间对软件进行了解压、安装、破解等一系列装配工作。但是该软件界面是纯英文的,晦涩难懂的菜单栏和工具栏又成了摆在我们面前的一大难题。
“世上无难事,只要肯攀登!”在这一思想的指引下,我们一鼓作气,开始了漫长的翻译之旅。最终,我们的一位有着国内知名修图软件“美图秀秀”使用经验的技术人员发现了尺寸调节功能的打开方式,经过多组数值的尝试,终于将图片精准压缩到了100k。
此时,又一天一夜过去了。
经过此次克难攻坚,我们的技术人员,不但圆满实现了功能,还锻炼了自己搜索查找文献的技能、提高了阅读英文文献的水平、积累了安装并使用国外软件的经验以及开拓了图片处理领域的道路,将我国的图片压缩技术提升到“百k”水平,为我国的软件事业做出了突出贡献。
西安一码通长这样,页面就一个二维码,事实上二维码是一串字符,根本不用传输图片。我们平时扫个二维码就能上网、能支付、能跳转页面这些都是传的一个字符串,这个字符串可能是网址,可能是产品编号,可能是下载链接等。
西安一码通这个就是传输了一串字符然后在手机端生成的二维码,这个根本不用压缩,他这里说压缩到100K,这些二维码字符离1K都差的很远。
需要注意的是这里的二维码是系统返回的信息,系统崩溃应该是访问量过大造成,这个访问量是用户发出的请求信息,这个信息自然也是一个字符串,也不会大。服务器收到用户的请求信息后计算出一个解决,这个结果就是个很简单的运算甚至只是个查询,要求也很低。
那为什么还要宣传图片压缩呢?
原因就是这个入口界面,这里有图,下面还有资讯,图主要是这里的
抓包传输,确实会传一些图片,就是上面的那些图,很难想象最大的是快讯那张图,这么简单都87KB。
但是,这里要说但是了,这个只传输一次,然后就缓存在本地了,以后访问就不传输了直接本地加载,就像下图一样,我想西安市民不可能都是第一次访问吧?清缓存的应该也极少。
所以最大的问题,西安电信一码通的带宽到底是多少,感觉也没上云
我不是搞IT的,所以我看了半天回答,终于搞明白,是某个题头大图片为1M,而不是健康码本身那个二维码。
我想二维码本身的传输应该并不可能挤爆带宽或者服务器,因为二维码与数字是可以互为转换的,传输数字,终端再展现为二维码就可以实现。(这段属于我胡诌,不懂这个)
咱们来说说别的。国家早就下令,一省一码,结束乱象。但通过这次西安出事,才发现西安这个码居然是个城市码。陕西自己还有个省码。
可见这个项目背后得有多大的势力,才能阻碍国家的命令特立独行,保留城市码。
然后就是价格的暴露,最终接单的是27万元。
平时大家层层剥皮,草草对付,赚的盆满钵满。只有碰到疫情、地震、洪水这种老天爷的检查,豆腐渣工程才会暴露出来。27万撑到现在才出事,也算对得起27万了。
我没开发过这么复杂的软件哎,不懂这么高深的技术。
国内尽是这种需求,那招个老头老太太干1天就完了。
为什么还要求35岁以下……
嗯,作为互联网人说几句吧。怎么说呢,大概有这么几个槽点:
1 图像压缩不是什么难的技术
首先我们要确定这个图片是否可以被压缩。如果此处指的是一码通的二维码,那显然可以被压缩(因为二维码的分辨率并不需要很高);如果指的是广告位图片或者logo,都这时候了把这种图片干掉不更好么?
如果你自己打开电脑的画图板,将一张图片分辨率缩小,或者把图片从bmp转换为png jpg,这并不算是很难的事情;并且你会发现,二维码这么大的图片确实应该需要不到50k就可以了。
2 二维码图片应该在客户端生成,服务端应该只需要发送字符串给客户端
这是更加需要吐槽的地方。二维码字符串应该在服务端生成,这样传送给客户端时,实际响应请求大小应该是1k级别的。
客户端生成二维码的库应该是现成的。
所以我有点怀疑,原文里面说的真的是二维码吗?真的像是广告位或者logo图。
3 一码通崩溃的根因?
我们可以这样理解网络请求,一类是占用较大带宽的(例如视频,图片,直播),另一类是占用较大计算资源(例如生成实时的二维码)。
这两类的优化思路完全不同,文中说的针对的是前一类的优化。
我们假设西安1000w人口,有400w人需要在1小时内使用一码通。平均qps是1k,峰值期间假设突发10倍,也就是10k qps;按照文中图片压缩到100k来说,峰值带宽为1G。
怎么说呢,我的感受是10k qps的计算压力更大一些;在图片优化之前,带宽压力是10G,容量较小的机房确实有可能顶不住,但是大机房基本没问题(当然前提是你有足够的分发服务,比如nginx)。
4 缺少性能测试和容量评估
重要的事情说三遍,性能测试!性能测试!性能测试!
不过抛开技术来说,这里更有可能的是一个配合问题。即运营提出了大家集中使用一码通的要求,但这个诉求和风险并没有传递给技术人员,从而没有对此时系统所需的容量进行评估。
换句话来说,可能并不是没做性能测试,而是根本不知道自己要面对的压力是有多大。
当然,以上基本属于我的猜测,实际情况可能并不是这样,估计我们也是无从得知了。
ps:
我也是个西安人,实际上并不是在说老家的坏话,只是想从纯技术的角度说明一下我的理解。
目前这么多人赞我,受宠若惊,谢谢大家。
这个事情,完全不是一些高赞回答说的这个事情。
西安电信好歹也是管着一个市的三大运营商,外包再弱,也弱不到给服务器给手机传一张1M的图片。
而且有人已经抓包验证过了。
一般来说,这种八股文章是办公室秘书写的。
秘书一般来说,不懂技术
但是,写文章还得出彩,一般来说,就会问下面要资料,这个资料最好有数字,显得有东西。
问题是,开发人员不会写文章,你非要,就给你编一个图片压缩,糊弄秘书。
办公室秘书不懂,你怎么给材料,我怎么写,最多文字通顺点。
这种笑话,就写出来了。
审稿的是办公室主任,他也不懂。
终审是领导,领导更不懂,看看文字好像没问题,这个东西就发出来了。
西安一码通崩溃,并不是这个图片的问题,图片在手机里面有,你下载APP的时候已经下载了,不用从服务器端再加载,除非APP自动升级。
西安一码通崩溃,无非数据库和网络的问题。一码通背后是一个数据库的查询比对,并发少,数据量少的时候,不是问题。
大家日常用,虽然1000多万人,但是在一秒钟内亮码做查询动作的时候,可能只有几万人,上下班高峰可能也就是几十万。
数据库里面一个人两次核酸,一共2000万条记录。
以前写的程序,网络的带宽,可能预留到百万并发。数据库优化也针对2000万条记录优化的差不多。能使用。
但是,到了集中亮码,全民多次核酸的时候。一个人10轮核酸,这是1亿条核酸记录,并发远不是几十万。而是几百万。
这个时候就崩了,而且很难短时间解决。
你开发一套新的,来不及。
旧的正在运行,升级了怎么切换?
当初开发这个东西,也是2020年疫情期间,做一个能用的,不一定草台班子,肯定是一个不太成熟的东西,也就是适应当时的情况。
这个东西,恐怕不止西安一码通。各地的都不好说。
1000万级别的大城市,搞多轮核酸,系统架构设计是否顶得住也难说。
这个事情,可以给各地提醒一下,遇到西安这个情况,需要怎么优化数据库,需要多少资源能顶住。
其实,12306能搞定,一码通应该是小问题,就是预留要想充分。
看到文章后比较疑惑两点:
1.为啥一码通这种高并发应用会出现后端传图片的问题?还是1MB的高清图片?
2.到底传了什么重要的图片给前端?
然后就在手机上随便抓了个包——
打开 Stream ,模拟一般用户操作,点击西安一码通,分别点击查看健康码,查看核酸报告,然后查看抓包结果——
只发现了这些包含图片的响应,其中数据量最大的,就是这张图——
疑惑解开了,应该就是为了产品界面美观而从后端传了一些图片进来。
总体来说,这个事儿本身就是个迷惑行为,比如我们江苏的苏康码,打开就是你的健康码,功能单一,交互体验虽然说不上友好但简洁明了。
我在想,做这种超高并发的,应用场景复杂的应用不就应该秉承简洁明了稳定的宗旨吗?你为了界面美观搞了一大堆用不到的东西上去,不是脑子有毛病吗?
从工作经验上来看,这事儿可能就是产品牵头搞出来的,为了美观牺牲性能的典型问题;
再深一层说,可能就是为了满足领导们对界面美观的要求,而不得不牺牲研发诉求的问题。
以上都是我猜的。
总结出来的教训,就是以后但凡涉及到不熟悉不懂的领域,还是去请教懂的人吧·····
以上。
有人抓包看过了,二维码是在客户端生成的。至于那个在服务器端原大小1M最后被压缩到100k传到客户端的图是什么,就不得而知了。
这东西的槽点不在于图片压缩问题。
服务器根据每个人的疫情防控信息生成了健康码,然后被开发人员费劲心思把健康码的图片压缩后传到了客户端;健康码被扫描后,其中包含的信息都在生成的一串字符串中,这个字符串包含了个人疫情防控信息。扫描健康码得到了字符串,即可快速得到个人防控信息。
那,为什么不直接向客户端发送字符串,由前端生成二维码呢?
Logo和卡通图片不用svg,倒是去加班压缩jpg?jpg压缩需要加班?
战术上的勤奋不能掩盖战略上的懒惰,加班的自我感动不能掩盖低下的业务水平。
难度大概是这样的:
image_resize(...);//压缩图像,改变图像尺寸 sleep(100);/*睡眠0.1秒,在第2个版本删除这一句,以提升用户体验*/ sleep(100);/*睡眠0.1秒,在第3个版本删除这一句,以提升用户体验*/ sleep(100);/*睡眠0.1秒,在第4个版本删除这一句,以提升用户体验*/ sleep(100);/*睡眠0.1秒,在第5个版本删除这一句,以提升用户体验*/ sleep(100);/*睡眠0.1秒,在第6个版本删除这一句,以提升用户体验*/ sleep(100);/*睡眠0.1秒,在第7个版本删除这一句,以提升用户体验*/ sleep(100);/*睡眠0.1秒,在第8个版本删除这一句,以提升用户体验*/ sleep(100);/*睡眠0.1秒,在第9个版本删除这一句,以提升用户体验*/ sleep(100);/*睡眠0.1秒,在第10个版本删除这一句,以提升用户体验*/
经过两天两夜后,终于把睡眠函数删掉了一半,系统流畅度极度提升,用户体验也很不错。
另外的一半先留着,以备不时之需,因为不知道什么时候领导又要优化。
2583. 22万元
我不禁好奇了,是什么级别的代码功底,需要用两天两夜?
我现在都还能翻出来我以前写的稀烂的图片压缩代码,也用不了两天两夜啊。。。。
而且手机上的软件,有几个敢在软件内部用1M大小的图片?
这也太吓人了。
感觉这是忽悠不懂行的人的工作总结。
还是说以前一码通完全没有做缓存,也没有做虚拟分发之类的东西,所有通信都是直来直往,突然一下高并发,就给搞崩了。然后不好解释....
做过类似相关的程序。说一下,图片大小与一码通系统崩溃的因果关系。
讲这个之前,请注意两个概念,第一、客户端(手机端);第二、服务端
图片压缩并不是很难的事,不同格式的图片存在着各种压缩的方式。
以jpg格式的图片来说,运用有损压缩的时候,压缩比例大得惊人。这个找个PS,然后选择色盘,把颜色数量调小点。瞬间能看到效果。
因此优化图片并不是重点。
新闻公报中所说的图片大小,不知道指的是哪个图片?
按照通常的理解,图片主要是有两块。
第一、注册时候的身份证识别。
第二、二维码的生成。
如果存在身份证的识别,就需要把身份证图片上传到服务器端,然后在服务器端保存,这个图片大小影响巨大。
二维码的生成,二维码肯定是在服务器端生成的。图片的大小影响巨大。
如果二维码有100多K那完蛋了,太大了,没有必要。
大家随便找一张二维码,中间有logo的那种一般就10K左右的样子。
我以前从事过一个系统部分内容的开发。就是很多幼儿园,进幼儿园报道的时候,抓拍一下儿童的照片,然后把照片发到家长的手机里。
不发图片一点问题都没有,一旦发照片,很难做到及时推送。
因为幼儿园上学跟放学的时间太集中了。当时瞬间的操作,尤其是节假日的前一天。那个峰值非常恐怖。
回到一码通来,其中可能存在的服务端生成图片的部分,就是二维码了。
这种二维码如果是电信自己写的APP,可以在客户端直接生成,传输只需要传输少量的格式信息即可。
如果是微信小程序,那服务端生成的二维码,100K还是大了,还需要缩小。
西安电信的一码通崩溃,我其实挺理解的。这个好比中国最牛的电子商务网站12306一样。
以前春运期间是日常的崩溃。
道理就是有大量的人涌入,服务器处理不过来。
不过值得特意说明的是:一码通项目跟图片压缩的关系不大。
因为当时使用的过程应该是不存在图片的上传。
因此,网络带宽不是主要问题。
主要问题是服务器的处理容量等。没有先做好压力测试。即便做过压力测试,也只能说没有达到现实的这种场景。
这种项目明显是外行领导内行,据说整个一码通的项目是30万块钱。
从程序架构来看,问题不大,从抓包的结果来看。
所谓1M的图片只是开头的一个静态的图片。
就是上面这张。
然后随便找了一台服务器应付了事。
平常每秒用到二维码的人不多,所以没事。
现在西安一下子用的人多,那套肯定应付不了。
其实,只要整一下CDN,这个问题瞬间解决。
对于搞技术的而言基本、大概、理论上可以说是没难度,不过很显然这篇报道里写的并不是给普通人看的,给完全不懂技术的外行领导内行的领导看足够糊弄了。
大是大非面前的科技创新!赢了✌️(呕了
我想尝试下用最快的速度压缩下图片,从1M压缩到100K要多久,不知道需不需要2天两夜。
我不知道他们底层存储用的哪家的oss,我用阿里云做一个测试吧。
注意:图像高级压缩功能目前只支持在华北3(张家口)和华东2(上海)地域通过工单申请试用。
敖丙现在教你3句话将1M图片压缩至100K一下:
开通完毕就可以使用了,无需使用一行代码,只需要在原来的URL上加上?x-oss-process=image/format,heic
或者``?x-oss-process=image/format,webp`即可。
heic
和webp
只是两种图片格式。
HEIF(High Efficiency Image Format)是Moving Picture Experts Group于2015年制定的存储图片和图片序列的格式,具有以下特点:
Webp 是一种同时提供了有损压缩与无损压缩(可逆压缩)的图片文件格式,派生自影像编码格式VP8,被认为是WebM多媒体格式的姊妹项目,是由Google在购买[On2 Technologies](https://baike.baidu.com/item/On2 Technologies)后发展出来,以BSD授权条款发布。这个格式大家应该经常见到。
大家针对这两种格式一定要判断项目中能否兼容哦!我曾经做过一个小程序发现无法使用,白高兴了一场
如下图为原图,800Kb:
分别使用heic
和webp
两种格式进行压缩:
heic格式:
webp格式:
较真的朋友就要说了:这不是157k还没到100k以下嘛?傻瓜,还可以改变图片尺寸嘛。
在刚刚的URL上继续追加/resize,l_900,h_600
即设置宽为900,高为600。再试试~
查看图像质量,杠杠滴~
如果是西安一码通扫码这图像质量完全没毛病,二维码分辨率不需要很高。
ps:下次有这种需要可以找我,我嗷嗷快
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有