小名开开

在春天的光影里喘息

开宗明义:

一、死亡对你也许是一种震慑,但对别人不一定是。

二、贩卖人口在目前的量刑下已是重罪。

三、法律适罪量刑,并不是保护罪犯,而是在保护受害者不遭受更严重的伤害。

四,贩卖儿童的特殊之处,在于『孩子还活着』这点上,人贩和儿童父母的利益一致。这很别扭,但正是最能承载『找回孩子』这一希望的。如果一律死刑,那么孩子几乎是不可能找回了。


突然之间被鼓吹『拐卖儿童一律死刑』的给刷屏了。

在我的朋友圈里,要求拐卖儿童一律死刑的,一半是有孩子的,另一半是没孩子的。怎么说呢,有孩子的,多少可以理解爱子之情。没孩子还这样的,呵呵。善良得久了,脑子里只剩水和面了。

『今亡亦死,举大义亦死,等死,死国可乎?』

『民不畏死,奈何以死惧之?』

归根结底,在于你们安生日子过久了,就以为死刑是种多么大的震慑,但事实上未必。死对你也许是一种震慑,但未必对所有人都是。为什么叫『亡命之徒』,正是因为那些人并不把死亡当成是件无限巨大的震慑,而只不过是利益天平上可以衡量的一种损失而已。而法律,也并不像你想像的那样,是人人遵守违者天罚的无上神圣规则。其实在我看来,法律恰恰是与这些突破底限的罪犯之间的讨价还价而已。

『如果你做出怎样的行为,就可能会面对怎样的惩罚,』,这是法律的前半句,而更关键的是后关句,『如果你不做出怎样的行为,就不会有怎样的惩罚。

这才是法律的制定和执行中,更为根本和重要的一环,如果说前半句是在震慑犯罪者,那么后半句则是在拯救受害者。

如果抢劫就是死刑,那么确实不会再有单纯的抢劫了,只是必然会有大量的受害人死亡。因为受害人活着,只会对抢劫犯不利。如果强奸一律判处死刑了,那么所有的强奸都会变成奸杀。如果贪污受贿一律死刑,那么所有的官吏一但开口,就会迅速巨贪并转移财产。如果驾车撞人一律死刑,那么一定会造成大量的撞人拖曳血肉模糊。如果盗版一律死刑,……哦,这时大概又会是同一帮人跳出来说,凭啥死刑。

适罪量刑,是为了让罪犯每施加更多的伤害,就需要承担更重的刑罚,这样,当罪犯无论达到或者不达到目的时,都会出于利益考虑,不向受害者施加更重的伤害。

且问,如果你的孩子正在人贩手上,警察正在追捕,并且很有希望抓住了。你是希望犯人逃跑无望束手就擒呢,还是挺而走险杀了孩子自己再轻身跑路呢?正常来说,你都希望无论犯人怎样都行,自己的孩子能平安归来吧。然而你支持的却是『一律死刑』,你觉得犯人会乖乖交人?还是会友善地扔下孩子自己跑路?

你未免太过自以为是了吧。

再说一遍,适度量刑,是在保护受害者不遭受更严重的伤害。

再说两遍,适度量刑,是在保护受害者不遭受更严重的伤害。

再说三遍,适度量刑,是在保护受害者不遭受更严重的伤害。

那么,你为什么在拐卖,甚至是购买儿童上,就支持『一律死刑』了呢?除了伪善和杀人欲,我没看见别的。

我真心觉得,之前无论转发多么脑残的东西,雾霾也好,炸鸡也罢,顶多是为那些认真工作的人平添一些麻烦,或者伤害一下他们的感情,虽然难受,但不至于伤筋动骨。

但这次,你们这帮脑残,真的是想杀人啊。

一,在转发这个观点时,你是否查阅过现行法律体系下的量刑尺度?是否已经存在死刑的可能性。事实上据我所知,拐卖妇女儿童情节严重的是确实可以处以死刑的。注意,是情节严重。

二,你鼓吹过一律死刑,是否考虑过可能会造成的其它后果,比如犯人为了逃避罪责,直接把小孩弄死再逃跑的情况?

三,你如何确定以死刑震慑,就会让拐卖的犯罪率下降。如何确保不因为刑罚上升,导致贩卖小孩的价格升高,有更多的人挺而走险?同时因为一律死刑的存在,而造成受害人更严重的伤害。

这些事情,无法预测,也没法实验。

从更广阔的情况来看,『一律死刑』是有类似的现实映证的。在我国,运输、贩卖海洛因等强成瘾性毒品,超过 50 克,一律死刑。然后,你再自己去查查辑毒人员为此付出的巨大代价,他们的家人为此付出的代价。但区别在于,毒品的受害人是间接受害人,并不在犯罪过程中出现,不会有毒贩『残忍杀害抛弃自己手上的毒品』,无论打击贩毒多严重,都不会造成毒品受害者更大的伤害。但贩卖儿童却真的可能存在更严重的恶行,因为儿童是在人贩手中的。

事实上贩卖儿童最特殊的恰恰是,孩子活着才有利润,死了就什么都没了。在『孩子活着』这点上,人贩和孩子父母是利益一致的。这很别扭,但恰恰是这点,是最大的希望,也是我最反感『一律死刑』并叱之如此的原因。死刑只会割断最后的希望,把孩子的性命完全吊在人贩本已无几的同情心上,并让遇拐父母位陷于万劫不复之地。

我们应该做的,是改善儿童找回的渠道,建立更好的防拐防丢体系,改进儿童领养的现状,甚至邪恶地说,还可以『创造供给』,从那些虐待亲生子女的父母身边剥夺他们的抚养权,然后交给那些想抚养孩子的父母。

这才是正道。

而当法律失去了『更重的犯罪,会有更严重的惩罚』的惩罚能力,如何阻止犯罪者的罪行升级?指望死刑解决一切问题么?指望死刑阻止犯罪么?横竖是死,发什么善心?

死刑只会让人贩开出更高的价格,只会引来更多的亡命之徒拐带儿童,只会造成被拐卖的儿童非卖即死的惨况。

还是那句话,本来他们就是把自己的性命当作成本,价格更高只能让他们更疯狂。


观点:

一,只有死刑才能遏制贩卖儿童。

这条不解释了,社会运行自有规律,每个人都会选择最自己最有利的办法,键盘侠们也是,吹牛显正义,道德占高地,也不过是对自己的形象最有利罢了,哪管他人死活。

第二,你不是被贩卖儿童的家长,根本无法体会那种痛苦。

请问转发者们,你们是贩卖儿童的家长吗?我不想在这点上讨论。更可怕的是,还有真的孩子父亲评论说,『因为我不知道我孩子是生是死,如果被拐,相比于我无尽的搜索与痛苦,我宁可他死了』。

第三,失去孩子对家长来说比杀了他们还痛苦,所以一定要判死刑。

我不想在痛苦的程度上作辩解,这并无意义。

重点在于,以这种理由判断贩卖者应该施加何种刑法无疑是将孩子当作父母的一种私人财产,这种私人财产的剥夺对父母产生的伤害程度的大小决定了刑法的轻重。

这是荒诞的逻辑,因为父母对孩子是有监护权,但不是谁完全属于谁、谁是谁的私人财产的关系。人贩贩卖孩子,应以对孩子造成的伤害为主要量刑依据,这是我的看法。不然,孩子父母的痛苦,无疑也会造成父母的亲朋的痛苦,那么这份痛苦也要向罪犯赎回吗?

如果讨论的是精神伤害的罪名,通常也只关注直接伤害的那部分,而『通过对亲密关系或者试图建立的亲密关系进行打击从而伤害到某一方的感情』这种情况是难以处理的,孩子青春期跟父母闹别扭,是不是也让父母心如刀割,是不是也应该把孩子抓起来毙了?追求女神,女神爱理不理,是不是也应该把女神抓起来毙了。我明天就去找二马,他们不理我就让国家把他们毙了。

当然这是一个过于敏感话题,从政治正确性上说,如果父母不在这件事情上『比死还痛苦』的话,就不足以说明他们对于孩子的爱。然而就我个人看来,这种爱与仇恨无异了。这种态度甚至反映出某种现状,太将情感和希望寄托在孩子身上了,这种爱并不包含无私、尊重和理解,往往只是一种对家庭中所有人的负担。

最后,还是祝愿天下太平,祝愿务实理性的人,做事能不受傻逼的干扰,祝愿自以为好心,实际办坏事的人,始终办不成事,即使这恐怕很难。

前文: <很是喜欢这个微信表情包:小哥斯拉么>

么么出了第二个表情包,另外在 2015 贺年表情中也露了一次脸。现在她有了陪伴,体形也越发可爱,大概这是一个美好的结局吧。依然,我还是找不到作者,不知道哪里有卖衍生品。

么么 2:monmon2

肉肉哒 陪着你 抱抱 不理你
肉肉哒 陪着你 抱抱 不理你
不要啦 新年快乐 我要减肥 都怪你
不要啦 新年快乐 我要减肥 都怪你
好无聊 摸摸头 我错了
好无聊 摸摸头 嗨 我错了
亲亲 点赞 圣诞快乐 没问题
亲亲 点赞 圣诞快乐 没问题

然后是新年萌物表情包,只有一部分是么么:5f656f4dacb0cee887adc091619380c8

恭喜发财 身体健康 福到 发发发 万事兴
恭喜发财 身体健康 福到 发发发 万事兴
羊年大吉 暖洋洋 新春快乐 元宵快乐
羊年大吉 暖洋洋 新春快乐 元宵快乐

剩下是同一表情包里无么么的表情:

吃吃吃 心想事成 年年有余 红红火火 过年啦
吃吃吃 心想事成 年年有余 红红火火 过年啦
喜气洋洋 十全十美 发红包 吉星高照 恭贺新禧
喜气洋洋 十全十美 发红包 吉星高照 恭贺新禧
同乐 万事如意 抢红包 财源滚滚 一帆风顺
同乐 万事如意 抢红包 财源滚滚 一帆风顺

年前发过一个微信状态:

事实上,用户要求,有时并不是用户需求。随口一提不费钱,或者别有意图不能直说。说没某功能就不买的,有了也不会买。说买去是干嘛的,改进了有时也起反作用。这很容易理解,如果你是学校对面小旅馆老板,因为每天少男少女们来开房『找个安静地方学习』夜夜爆满,会把旅馆改造成自习室?
__tdrd.org_att.php_s.51.42974.596.jpg_唱得好....

这是例行搞笑的。但用户需求却确实是件需要仔细琢磨的一件事情。他们说出口的,常是谎言。

一,不好意思说真实原因的。

这个是最常见的。上面的笑话是一例,生活中还有更多例子,大家可以自行琢磨一下。我这里先举个不那么常规的。

日本动漫里的热门人物角色往往也会被制造成各种小人玩偶,做工相当精细,称之为『手办』。有些更会备有大量同比例可更换的衣服。手办通常都是价格不菲的,一个 30cm 高的手办有时就价值 RMB 数千甚至数万元,所以这一开始就是很小众的东西,也只在少数日本动漫专营店放着,作为店长的个人收藏品,兼『镇店之宝』。

这些玩具店是要做生意的,而大部分生意都是几十块钱一件的大路货,卖得最好的通常也是卡片纸、印刷品之类。

于是总有妈妈带着小孩来店里逛的,于是总有小孩眼尖发现了这个镇店之宝的,于是总有缠着妈妈要的,然后就有如下的对话了。

『这个多少钱啊?』

『抱歉,这个不卖的。』

『不卖?』

『嗯,不卖的,放着看的。』

『你家的东西放店里还有不卖的啊,孩子要你就卖他呗。』

『这位妈妈这个真的不卖的。』

『奇了怪了,咋了怕我买不起啊。』

『真不是这意思,这位妈妈,这是花了大价钱专门弄回来的限量版,就是吸引人气用的,真不卖。(真就是这个意思,太贵了你买不起)』

『你不就说贵么,多少钱。你再进一个不就行了,三百顶多了吧。四百?五百?你说你这人摇什么头啊你倒是说清楚啊当我傻逼是不是?』

『阿姨,这东西光每星期保养费就不止四百。我弄来就花了一万多。』

『……』

『…………』

『………………』

『你坑傻子啊,就这东西一万多?就这做工……(发现做工确实挺好)……手脚根本就不能动!哟!这姿势那么撩骚,这是要当鸡的样子啊。你开个玩具店放这么淫秽的东西还放小孩子进来?我要去举报你,趁早倒闭吧你个黑店!』

or

『你这东西还要每星期保养啊?哦哦,钱不是问题,但我家孩子玩劲大爱拆东西,玩两天就要买新的了,算了吧。看你也不是正经做生意的,以后不来了这种黑店。』

你看,很常见吧,买不起时,就找一大堆理由,证明某样东西不值这个价,并试图向围观群众说明,她不是买不起,只是这个东西不符合她的需求,尽管可能旁边连个人都没有。她只是要找个理由说服自己,甚至要依靠打倒对方的人格、名誉,来证明自己『不选择』的正确性。

在这过程中提出来的所有需求,都不是真正的需求。

二,为了获得愉悦感。

常见的无非是讨价还价的各种奇葩理由。

我小时候,经常看大人们默契地合演一出戏。这边问多少钱,那边说多少钱,这边说好贵这么小,那边说这可新鲜了,这边说旁边那家店一样的才卖多少,那边说我这足斤足两,这边说多少钱,那边说真卖不了,这边转头走,那边喊回来回来,这边喜滋滋掏钱算着省了多少钱,那边装苦脸心里暗爽多赚了多少钱。

完美配合演绎鸡同鸭讲+欲擒故纵+双簧。演出费两人各……两毛。

虽然钱不多,但是开心呀。

所以那一串理由都不是理由。买东西当然是需求,但讨价还价背后却不止于东西本身了。客户需要的还包括近身白刃搏杀后胜利的愉悦感。

码农们有时就理解不了商务那边的兜兜转转。他们总觉得报个一口价就完了,为什么要扯那么半天皮呢。但在砍价这事上,固然有节约成本的因素,但也有砍杀以后的愉悦。如果你直接一步让到位,不但自己吃亏了,客户那边也没有享受到愉悦。他势必会继续往下砍,直到获得足够的愉悦感为止。

扯会皮,满足了客户,自己也能多赚点,为什么不呢?

三、他需要感觉到你的努力。

这是比较隐形的需求了。

首先,客户需要某种特性,是真需。比如需要产品能防水,那是真要。他需要在狂风骤雨的户外使用。因此防水是必须的。

但仅仅有防水,很多时候还是不够。原因在于人的感知与认同。事实上,利用现在的纳米拒水材料,完全可以做出带很多细微网眼的防水材料,足以让产品放入水下依然能见到盒子内部漂亮而脆弱的电路,却如出水芙蓉,滴水不沾。

透光不透水,见干不见湿,要逼格有逼格,要高端有高端。

但是在防水设计上,未来很长一段时间都不可能用这种方案。原因就在于,你的客户并不这么想,而你却没有机会向他演示以改变他的观念。即使演示了,也会被认为是障眼法。或者用一个完全无法反驳的理由回绝:『现在不出问题,怎么保证以后不出问题。』

正常来说,用一个带严实的橡胶密封圈的盒子,用卡扣紧紧卡上,发出的『啪』的一声,才能为客户带来足够的安全感。这比任何高科技都有效。如果说防水的成本有 5 块钱,大约有 3-4 块钱都是花费在让用户感觉上的。

四、他需要感觉到自己的妥协,但希望选妥协尽可能小的。

没有成本的东西不足以让人认真对待。别提互联网免费策略,这里的成本可不一定指钱。

我们有两款产品,A 款非常美观,但缺乏某个特性。B 款拥有这个特性,价格还便宜将近一半,但美观性稍差一点。事实上 B 款的出现,也是因为所有的客户几乎都在抱怨 A 款缺乏的那个特性。但结果是,自从有了 B 款以后,A 款的销量反而更好了。

如果你不理解,我再举一个《经济学人》杂志的例子。

《经济学人》有三种定价,电子版 59 美元,印刷版 125 美元,电子版 + 印刷版 125 美元。印刷版的定价让人感到莫名其妙。便宜一点有 59 美元的电子版,付出同样代价又可以同时拥有电子版 + 印刷版,125 美元光购买印刷版,又是何必呢?

看上去《经济学人》提供了一个无意义的产品和定价。但印刷版的定价起到了诱导消费者心理和行为的作用。丹·艾瑞里当时为了验证《经济学人》定价的作用,把学生分为两组人,进行对比测试。结果发现,如果没有 125 美元只购买印刷版的选项,84% 的人会选择购买 59 美元的电子版,只有 16% 的人购买 125 美元的电子版 + 印刷版。而如果价格表里,出现了 125 美元印刷版的选项,消费者的购买行为就发生了有趣的变化,只有 32% 的人选择购买电子版,而足足有 68% 的人购买了电子版 + 印刷版。

当进行消费的时候,除非是这个领域的专业人士,否则一个东西应该值多少钱,其实我们不是很清楚的。这时候我们判断的依据就是做一个笼统的测试,粗陋的横向比较,根据结果来决定自己应该买哪个。第二个方案放在这里,它的用途是让第三个方案感觉超值。

虽然产品设计可能和最后定价略有区别,但本质上,定价也是产品的一部分。

五、他需要克服自己对你的不信任感,需要安全感。

其实在商务中有很有意思的一点:一个客户对你的质问越多,往往就越愿意选择你的产品。

原因其实也很简单,他作为一个非专业人者,如何去判断产品本身的价值?如何去判断产品是否有看不出来的偷工减料?他是没办法判断的。那么他就会转而通过其它外部信息作出判断,例如品牌、广告、其它人的使用评价等。

很多东西都会指向企业的实力,而实力一定程度上代表着品质。在央视砸了几亿做广告,结果做出来的产品很烂,没人买,这损失可就大了。而街边小摊,顶多城管查抄了,也损失不到哪里去。这就是选择建立信任感的某种方式。

而用户很多让码农觉得麻烦的行为,也正是因为建立双方信任感的需求。其中之一,就是将销售问到无言以对,或者问到自己问不出来。这时,他并不是追求愉悦感,而是追求安全感。他面对的销售有多深的知识积累,就意味着这个产品有多专业,从而产生多大的信任感。买过汽车的同学们可能感受会深一点,卖过汽车的大概已经在微笑了。

而更日常化的最终用户的产品,信任感由更多地来自于品牌宣传、口碑、负面新闻等。因此除了对品控的高要求以外,大型品牌也都愿意每年花费巨资去经营、监测、预警网络上关于品牌的各种消息。舆情监测行业也早已是个水深如谷的行业了。

六、人们需要的不是趁手工具,而是被赞美。

少数 Geek 向的玩具,粗糙的质感与不完善的结构,反而可能引发那一小部分人的好奇心。但大多数产品,对大多数人而言,都不过是获得赞美的工具。所以人们才会用各种顶级品牌去标榜自己的品味,用各种先进工具去装饰自己的能力,用各种奇趣玩艺证明自己的知趣广博,用 PHP 去写世界上最好的程序。所以产品设计,要不能为人博得赞美,要不能为人带来赞美。前者靠的是优秀的做工、设计,后者靠的是巨大的人气与流量,比如社交软件。

企业客户在这点上其实也没什么区别。企业客户,往细了分无非也就是建议者、决策者、执行者一系列角色。无论是哪一类,都希望自己做的事情是正确的,能获得上级的肯定,平辈的艳羡,下级的赞美的。这些,则是由内在的可靠性、优雅的外观、良好的服务、精心设计的流程和用户的充分参与,来一步一步完成的。

七、用户不懒,只是缺乏动机。

有些产品经理说的用户很懒,其实是不对的。你根本想不到很多人会为了装一个逼能做出多么匪夷所思的行为,根本不理解很多人会为了朋友圈向领导暗示勤奋有多么的勾心斗角,根本不懂得人们心底的欲望可以驱动他们去做多么奇葩的事情。

啊,或许你能理解。

以前我觉得学上网实在是太难了,但后来我发现网上可以下载免费 A 片,瞬间我就学会了。

为了获得赞美,人们无所不用其极。苹果的 Keynote 用的是 『影院效果,彻底迷倒观众』。相比之下,微软用的『做出非凡演示,节约时间,随处访问』就差上一截了。

我真的不在乎节约时间,更讨厌随处都得做 PPT,你再好用有毛用,我在家就想休息不想再碰什么 PPT 了。但如果观众们能惊叹,我能装个逼,那再难用的软件我倒也认了。

————开开心声。

我不认为微软的文案是傻逼,大企业内部的人际历练,对人心的洞察一点不少。但也是同样的原因,让他们在做文案的时候,选择的是讨好公司自己的文化,而不是讨好用户。

用户不懒,只是缺乏动机。

结束

用户需求不是『我认为』如何的。每个人处于不同的环境,基于不同的利益,都有不同的诉求。生活中的,工作中的,个人的,家庭的,集体的。同一个人都会有诸多变化。

甚至也不是数据分析能得出来结果的,诚然,数据分析有助于你发现问题,但揣摩背后的意思,还是需要有一颗又能正经又能变态的心。

我品过甜美,也咽过苦涩,但依然觉得那些随口说出的谎言,包括自己的谎言,是世界上最美丽的声音之一。

我总是觉得,『好奇』是搜索来的蛋糕教程,你愿意去花时间寻找免费信息,仔细阅读,去了解它的真实内容;『兴趣』是西式糕点培训班。你愿意支付可以承担的费用,获得免费信息无法给予的进一步提升;『爱好』是一夜无眠后泛着倦意淡淡的笑容。你愿意牺牲生活中的其它东西,但仍乐在其中。

你想知道美味的饭菜是怎么做的,你会挑选自己喜欢的若干个菜,去网上搜索免费食谱。你会拿纸笔把菜谱整理成购物清单,并找邻居老太太打听农贸市场的位置,去市场精挑细选,但忘了讨价还价被坑了一大波。然后你回来又去超市买了锅碗瓢盆油盐酱醋,回家看着一堆材料兴致勃勃照着菜谱做到了最后。

可能焦了,可能没熟,可能你最后还是点了外卖,或者是忍着说服自己『这也挺好吃的』强咽下去。你可能更有兴致迫不及想明天再做一遍,或者意味索然从此打算仰仗外卖终身。

但你最初的从未尝试,到最后完成了整个过程。你至少了解了真相,自己体会了过程和结果。

这是好奇。

你听过几次免费的钢琴课,看过免费的视频教程,你知道四分音节,你刚学了五线谱。尽管不熟练,但至少能在 88 键上找到那个音符的位置。你找了很多材料读,也有不少迷惑得不到解答,于是你愿意去参加一个培训班,你需要找老师解答一些疑惑,你需要专业的人帮你听听,确认你的水平,告诉你下一步的学习方向。

你可能能进一步提升,也有可能仍然迷茫。但是至少你知道真相,知道横亘在面前的困难,但仍然,或者抱着随缘的心态去学习提升,或者跃跃欲试想更升一步。

你愿意接受重复练习享受水平的提升,你愿意为此花费时间与金钱。

这是兴趣。

你喜欢轮滑,无论是短途、长程、花式、极限,你都愿意试一试。你越过了最初的好奇与兴趣的阶段,你已投入了很多,把水平提升到了一个身边人群中很高的层次。你必须参加专门的爱好者组织,才能找到与你水平相当的人。你越过了迷茫期,找到了学习与提升的路径。这路无限地长,但你知道是正确的路,只取决于你能走多久。

或者幸运地在学业中找到方向,或者是从好奇中发掘出宝藏,总之你找到了一样你觉得值得投入,甚至可以不计回报地投入的事物。你愿意牺牲生活中的其它东西,不止是金钱与时间,仅仅是为了保证你在这样事物上能有令自己满意的投入。能让你享受的是练习与提高的过程,而能让你兴奋不已的是你有创造的能力。

唯一能限制你继续提升的,也许真的只有天赋的上限。即使如此,你也并不视之为不幸,而是当作努力的目标。

这是爱好。

所以在我看来,很多人的生活中,其实连好奇都没有,更别提兴趣与爱好。

来源于一个钓鱼笑话:

有一次,爱迪生把一个铯块交给来自中国的助手,请他算一算铯块的体积,助手拿直尺量了 又量,列出了一排排的算式,还是没有最终计算出铯块的体积。爱迪生等得不耐烦了,拿过 铯块,浸在水中,将溢出的水倒在了量杯里量出体积,就知道了铯块的体积。僵化的体制, 落后的思维,永远也培养不出伟大的科学家!

笑话钓鱼钓得厉害。

铯是钾系元素,最外层单电子,化学性质极为活泼。遇水则剧烈反应,生成氢气和氢氧化铯……这话很熟悉吧,高中做钠与水的实验就做过。

铯的反应强度更大,实际上就是爆炸了。优酷搜了一下还真有视频:

不过百科时有一条好奇的是,铯是金黄色金属,为什么其英文名 Caesium 或者 Cesium 却是来自于拉丁文 coesius,意为『天蓝色』呢?

好奇查了一下,原来是因为铯极度活泼,人们是从光谱表上第一次发现铯这种元素的。而光谱是这样的:

Cesium spectrum吸收光谱和发射光谱

所以『天蓝色』的来源实际上是科学家的一个小浪漫,铯的光谱蓝色确实非常漂亮。

换了工作,搬了家。

开始带小团队,产品经理入室。

开始做一个动漫周边的业余项目,找小伙伴,找支持,用业余时间做点运营。也有了一些小小的成果。最初夸下的『两年内转行做动漫』,说不定真有实现的可能。

学了 HTML CSS,在 JS 上遇到了一些小挫折。

匆匆又是一年。

目录性质的软件推荐目录。网站目标是:“一个门类,只推一个软件,不给你选择”。

纯手工编辑,美工弄好看一点,弄个邮箱然后装高冷只收不回。如果数量多了,数据库还是得要一份的。

怎么推荐呢?

当你需要一个软件实现某个功能时,我只推荐一项。

比如 OCR 识别,就选 ABBYY 了,不需要考虑其它的;

图像处理,就选 Photoshop 了,我不管你是怎么弄到 Photoshop,反正我就推荐它了。大而全,功能都能实现,其它都是小意思;

自拍就美图秀秀了;

邮件,嘛,Outlook 和 Foxmail 都挺好的,但如果只推荐一项,我就推荐 Foxmail 了;

家谱软件,我看的最好的就是 Mac 下的 FamilyTree,再找找 Windows 下有什么好软件;

架博客,就用 WordPress 吧,功能较全,架设方便,甚至也有 VPS+Wordpress+域名 的打包解决方案。什么 Ghost、PivotX、Jekyll 都让 Geek 们自己折腾去;

等等。

可以理解作软件推荐版的好 123。

选择原则大概就是功能较全,或者效果最好。以不选择为前提,给出的就更倾向于较多功能的东西。效果好,指核心功能简单易用,上手顺利。

原因有二:

一、作为一个强迫症患者,我在需要软件解决一个问题时,往往会搜索该需求下的所有软件全部都试一遍,然后挑出我认为最舒适的一个软件,并为自己精妙的选择骄傲不已。后来发现,为了体验每一个软件,消耗掉的时间往往比实际使用软件能节约下来的时间更多。

比如我尝试过至少十来款记账软件,或者是主打简洁,或者是主打同步,但用来用去实足半年,真正的记帐这事却每次换 app 都重来一遍。最后买了个随手记,就不再去关心别的软件了,管它有多少功能,反正我就按天记个帐就行。

作为一个产品经理,去尝试很多软件,可以说是职业素养的一部分。但作为一个普通人,生活还是应当节省时间去做爱做的事情的。

二、实际工作中经常扮演救火兵的角色,有时也需要去解决并不擅长的问题,使用甚至没有听说过的软件的。这种时候有一个合适的推荐就很重要了。

所以这是一个“推己及人”的个人项目,虽然我一直说产品经理不是正常人,产品经理的自身需要往往不是正常需求。但在这个项目上,还是可以尝试一下普通人的角度看待问题的。

所以你看,再怎么着,这也是一份主观的选单,反映的倒不一定是我的个人口味,而更像是通过一份软件的表单,反过来表达我在产品经理这个身份上的选择直觉。

先记一笔,寒假大概就有时间去设计了。

Hi, 我又来发文耽误大家阅读时间了。C 酱小组最近又有了很多进展,只是暂时还没有在界面上体现出来。正因为如此,更要好好地讲讲。

运营数据

国庆七天长假是秋天以下的又一波 cosplay 大高峰。C 酱作为 cosplay 的二手交易搜索站,也很直接地体会到了 coser 们『展前急求购,展后苦出售』的种种悲剧,对此 C 酱只能说……吃不上饭的都是真爱 (≖ ‿ ≖)✧

言归正传。

目前 http://cosjiaoyi.com/ 过去 30 天数据依然保持大约 5500 PV,UV 略有下降,900 多不到 1K。但回头客(回访率)有所上升,到了 31%。

大致的结论是,我们『真正的』用户数依然在稳定增长。我一直在做一些简单的运营,也偶尔与用户有私下的交流,对网站的『有用』有比数据更直观的感受。这些大多来自于用户的直接反馈,有赞美,也有抱怨。每次我都很开心,那并不是罗列数据所能展现的,但却是更本质的东西……因为用户八成都是萌妹子……≖‿≖✧

言归正传。

因为 cosplay 本身的周期因素——也就是天气冷了、要考试了、漫展少了等因素,总访问量受到一些影响,没有如预期一样继续稳步增长。另一个因素是,用来做微博转发推广的帐号遭遇了一些小困难,导致大约半个月时间微博无法如以往一样进行常规推广,也损失了一些访问数。

单从数据上讲,微博粉丝日平均增长量和日 PV 数较为相关。在微博帐号异常的那几天,粉丝数量停滞不前,日 PV 数也日渐下降,当重新开始转发后,PV 数也回升到正常情况。更详细的分析没有什么意义,毕竟一天一两百的 PV,随机波动影响较大,难说跟国庆后退潮期有什么关系。

常规的每天半到一小时的微博转发,大致能带来的流量基本稳定。如果没有活动和奖励刺激,会保持一个稳定缓慢增加的状态。我一开始就有计划做一些活动,但目前网站已经上线的部分仍显单薄,强行推活动当然也会带来增长,只是未必能稳定留存用户,我们还是先来谈谈别的。

社团人员

从发过招募后,我又各处去拉了壮丁。现在算上神隐的已有九人,可以骄傲地称之为小团队了。如招募时所说,因为是业余社团性质,有团员暂时处于离线状态,主程战力三人,运营一人,外加酱油三人。当然,都是周末贡献一天时间。如前所言,每周预期四小时,最多八小时,如果忙,请先忙。

凑几个人,做一点事情。我没有宏大理想和甚高逼格,只要能做好一个小站,让它可以自己循环养活自己,就够了。我觉得这是我的优点。有无穷多的资源,可以做无限大的事情,如果没有,我们也能做点东西出来。

我们现在依然缺设计和前端,很遗憾地,虽然我鼓动过两三位,但也许是不得法吧,最后还是没了回应。所以设计还是我自己在做,(`・ω・´),前端小团队配合着做。摆在列表上的工作有:新版界面、网站 Logo、三大功能界面、手机版界面、网站吉祥物等等,顺序分先后,嗯。

我在鼓动萌妹子、设计师、萌妹子+设计师方面实在是很手足无措智商捉急,所以如果你愿意来,能不能先教我一下怎么鼓动你,你会愿意来?我们的用户大多都是非常可爱的萌妹子,剩下的也都是非常可爱的伪娘妹子……我们小社团自己也有两周一次的女仆餐厅聚餐,我们还有……呃……我大概明白为什么木有设计师了(>_<。)。

哦对,我现在实在是没法提供全职工作机会,我真没想到会有朋友向我投简历求工作,(=゚Д゚=),非常抱歉,希望将来有缘。

现在进展

我们做了很多工作,只是暂时没有在界面上体现出来。

  • 我们花了很多时间改进了微博数据的处理,包括清理过期微博、过滤僵尸粉、改进链接速度、改善搜索结果等等;
  • 我们研究了如何扩大搜索源,已经通过了初步测试,未来可以搜索的源会更多一些;
  • 我们设计了一个新功能,帮助用户及时发现他想要的东西。这个功能分三个环节,第一个环节已经基本完成等待测试了;
  • 哦,还有另一个新功能带你勾搭带你飞,所谓的 C 酱三大功能的第三功能。也进展顺利;
  • 新的界面也已经在后台整装待发;
  • 为了让界面更好看,我们还在研究如何服务器端判断 UA;
  • 然后,我在尽力做着不擅长的事情,做设计,画 Logo,并学习手绘萌妹图;
  • 当然,每两周一次的聚餐依然尽力。

基本资料

我们做的,现在是 cosplay 二手服装道具的搜索,短期定位为『好用的工具』,中期是为 coser 服务的优质功能小站,长期不提。

星际争霸里的数值平衡是挺有意思,值得仔细咀嚼的东西。

预备知识: 虽然星际显示的所有数值都是整数,但在内部绝大部分则使用了更精确的小数计算形式。而只在结果上进行了向上/向下取整处理。在不同场景下,这个计算特性也造成了一些数据结果的特性。比如:

  • 虫族的满血单位在受攻击后会立刻回一点血。
  • 取消建造返回 75% 资源但永远是整数。
  • 人类维修在一矿一气内是先扣款再维修。
  • 一次攻击最低造成 0.5 伤害。

等等……

攻击力,护甲值,血量

对于战斗中的任意一次攻击行为,都是通过以上三项得到最后的伤害计算结果,计算公式为:

伤害 = max { 攻击力 – 护甲值, 0.5 }

直观的公式,攻击力被护甲抵消掉一部分,剩下的对单位造成实际的伤害。

  • 人类枪兵默认 6 点伤害;
  • 人类地堡,默认 1 点护甲;

则人类枪兵每次攻击对地堡造成 5 点伤害。

当护甲值大于等于攻击力时,每次攻击至少造成 0.5 点伤害。

  • SCV 攻击力 5;(战五渣)
  • 行星要塞,升级建筑护甲,护甲值 5。

结果:SCV 每次攻击造成 0.5 伤害,由于显示数值均为向上取整的整数,所以实际上需要两次攻击以后才能看见 HP -1。

虫族被动回血与向上取整

虫族的所有单位均有一个持续的回血速率,为 0.27 血/秒。个别兵种,例如飞龙,或者埋地蟑螂,会有更高的回血速率。这一回血不受任何外界因素影响,也与是否战斗无关,永不停止,直到满血。

星际的血量计算是存在小数数值的,包括伤害下限的 0.5 血,包括虫族回血的 0.27/秒。但这属于内部数据,对外展示出来的最终结果,依然是整数。从真实的小数值到实际呈现的整数值,中间的取数办法是向上取整。也就是说,在任何情况下,只要血量真实值存在小数点,则显示数值均向上取一位。

例如虫族所有单位均有 0.27 血/秒的回血速率(部分特殊兵种更高)。那么任何一个虫族兵种被攻击一次以后,只要不死,则会立刻启动回血过程,在小于半秒的时间内回复了 0.1 的血,在最终数值显示上便回了一点血。这也是那些初级数值研究文章里常说的,虫族在被攻击一次以后会回复一点血的原因。其真实原因如下:

  • 虫族单位的回血是任何时候只要小于满血量便永远存在的;
  • 虫族单位被攻击后进入不满血状态,该回血启动,回复 0.1 甚至更少的值;
  • 系统显示数值是向上取整而非四舍五入;
  • 故显示上是瞬间回 1 血;

某些人认为的“1 点隐藏护甲”,则是完全完全错误的。尝试:

  • 零攻攻城坦克:攻城模式 35 点攻击力,重甲 +15;
  • 零防跳虫:35 血,0 护甲值,轻甲;
  • 一防跳虫:35 血,1 护甲值,轻甲;

零防跳虫就是一炮死。因为来不及回血,也不存在什么隐藏护甲值。但是如果虫族升了一防,则坦克一炮轰上以后跳虫会有两格血,事实上是 35-1 = 34 点伤害,剩余 1 血,同时虫族回血机制启动,极短时间回复 0.1 血(每秒是 0.27,开始回血时还不到 1 秒,几乎瞬间),由于数值向上取整,我们就会见到回复了 2 滴血。再尝试:

  • 一攻女妖:13×2 攻击力;
  • 三攻机枪兵:9 点攻击力
  • 零防跳虫:35 血,0 护甲值;

则零防跳虫在经受了女妖和机枪兵的一轮攻击后,正好还剩下一点血。本来伤害量是正好 35 点的,但由于女妖和枪兵无法做到完全同时产生伤害,使得跳虫有短暂的时间回复零点几的血,从而在第一轮攻击中幸存下来。需要机枪兵额外一次攻击才能杀死。从这些数值可以明显地看出,虫族的 “第一次受攻击秒回一血” 只是一个结果,并不是原因,而 “隐藏护甲” 则简直是瞎扯。另外,虽然从结果上看 “受到攻击后立刻回 1 血” 有时候也正确,但由此衍生出来的什么 “回 1 血隐藏 CD” 也是错误的,单纯只是持续回血过程中是否正好巧合地遇上整数断点罢了。

由于正常情况下伤害值都是整数,故虫族的小数点血量在实际效用上确实等同于整数 1 血。虽然真实血量是个斜线,但效用血量却是阶梯横线。

除了护甲大于等于攻击情况,只有非零攻异龙的弹射攻击是小数点伤害数值,腐化者的腐化技能通过 debuff 加成可能产生大量的小数点伤害数值。奇葩都出在虫族。

攻防升级

每个种族都有针对绝大部分单位的攻防升级科技,可升级三次。攻防升级对已经在战场上的单位同样有效,因此可以利用刚升级完成的时间让大部队发动一次有攻防优势的进攻。

三个种族的攻防升级具体影响的单位并不一样。人类分为生物部队攻防和机械部队攻防;星灵分陆军和空军攻防,另有所有单位的离子盾升级;虫族没有离子盾,但地面部队的近战攻击和远程攻击是分别升级的。

此外,还存在针对个别单位的单独攻防升级项目。人类的建筑护甲升级(+2 甲),雷兽的硬化甲壳升级(+2 甲),人类的恶火对轻甲的伤害加成等。

同一层攻击升级对不同单位的影响也不一。例如虫族地面近战攻击升级,跳虫是每层升 1 点,而雷兽则是每层 3 点。而三族所有防御升级却全是 +1,专项升级除外。因此三攻三防的枪兵内战,和零攻防的枪兵内战效果一模一样,但三攻三防的坦克对打起来却比零攻防的对打死得更快。高级兵种在攻防加成上享受到的比初级兵种更多一些。

多重攻击

在游戏中,“多重攻击”可以理解作“左右开弓”。也就是每次攻击有双份,每份独立进行攻防计算。游戏中除了星灵母舰是 6 重攻击以外,别的拥有多重攻击属性的都是双重攻击。

大部分双重攻击的单位都可以从外观上直观地看出来,收割者是双枪党,显然是双重攻击;女妖导弹有明显的相互缠绕的轨迹,也是双重攻击,导弹塔也类似;狂热者是帅气的幽能双刀;巨像和凤凰的两道激光那么明显,女皇表示她也有两只爪子……

例外的是行星要塞和不朽者。游戏中说明文字上写的行星要塞是加装了双管“伊比克斯”加农炮,外形上也很霸气,却不是双重攻击。不朽者的游戏背景资料写道,他们是仅存的龙骑士们加装了双重相位分裂炮,但实际游戏中也不是双重攻击。

双重攻击意味着 “一轮攻击,两份效果”。通常来说,双重攻击的特性主要是为了数值平衡,“打了一半”的情况极少出现,但如果你刻意制造还是能做出来的,比如狂热者的两刀就是有先后的。

在多重攻击下,伤害计算公式依然简单而符合逻辑:

伤害 = max { 攻击力-护甲值, 0.5 } x 多重攻击数

例如:

  • 零攻收割者,攻击力 4×2;
  • 三防雷兽,护甲 4。

每一轮攻击会造成 0.5×2 的伤害,也就是 1 点。而不是 0.5 点。通常来说,双重攻击在攻防优势时的收益更大,而劣势时的差距也更大。

双重攻击存在完全同步的两次攻击(收割者),以及有先后的双重攻击(狂热者)两种情况,两者在极端情况下的表现会有微小的不同,但大致没有区别。

特定属性加成

很多兵种对特定属性的对象的攻击力会有额外加成。例如劫掠者的普通伤害是 10,而对重甲单位的伤害是 20。被加成的属性通常有轻甲、重甲、生物单位等。目前还没有兵种对两种以上的属性有加成伤害。攻防升级对加成伤害同样有效,升级变化数值有些高于基础伤害的增加值。

但加成伤害的具体数量并没有明确的规律可寻,孢子爬虫对生物单位的伤害高达基础伤害的 3 倍。(15→45),而执政官则只加成约 40%(25→35)。通过特定属性加成并且分别微调,暴雪给自己留了个方便的平衡性改动的口子。

这些加成的计算优先级最高,只和攻击者及被攻击者的属性有关,计算时可以直接视为基础伤害。这造成了非常明显的兵种相克的链条,使用针对性的兵种能有效扩大优势夺取胜利。

攻击间隔

每个可进行直接攻击的单位都有两次攻击间的时间间隔设置,数值也是游戏里的秒。不少资料简单理解为攻击频率,严格地说是不对的。频率定义的是每秒多少次,而不是两次间隔;

  • 攻击间隔是该单位两次攻击行为之间的最短时间间隔,这个时间被形象地称为 “Cooldown”,来源于工业机械的停机散热。并不是到时间就必须进行下一次攻击;
  • 对于分先后的多重攻击,攻击间隔严格描述的是多重攻击每轮攻击中 “第一发” 之间的时间间隔。例如狂热者的两轮攻击,两个第一刀之间的最短时间间隔为 1.2 秒。多重攻击内部间隙一般不考虑了;
  • 除凤凰战机以外,所有兵种在都要站定时才能攻击,也就导致了 “甩枪” 这一操作的出现;
  • 站定输出的实质在于产生一次攻击前有短暂的前置时间,随便理解成瞄准、深呼吸、扣扳机都行,这一时间各兵种有不同但都接近于零,实质上就是程序在判断输出时必须无移动指令;
  • 实战中,站定输出的前置时间长度确实存在,原因是网速。你网速越好,前置站定时间越短;
  • 站定输出的后置停止时间是装饰用的,打完了歇口气的感觉,可以通过手动移动指令覆盖;
  • 兴奋剂、肾上腺素等升级可以减少输出间隔,在相同时间内作出更多次攻击行为,提高伤害;
  • 射程相当时,在移动上有优势的单位可以通过操作把对方兵种的攻击频率拖到跟自己一样;
  • 巢虫领主、航母等附带单位的攻击间隙,主单位与附带单位的攻击间隙都是独立计算的;
  • 尽管攻击力除以攻击间隔就可以得到 DPS(每秒输出伤害)数值,但 DPS 数值并不能有效描述该类单位的实战输出强度;
  • 部分战斗系技能有冷却时间,不耗蓝技能的 CD 较长,而耗蓝技能出于平衡性因素也添加了一些 CD,比如灵能风暴的 2 秒;
  • 修理技能没有 CD,感染者扔异化作战体也没有 CD;

距离与体积

星际中的长度单位以“格”为基础单位,游戏中各种涉及到距离、长度、速度的数据,均以格为基础数据,用精确的小数衡量。“格”的范围在建造建筑时体会非常明显。

尽管建筑占地为 2×2、3×3 之类,但建筑实际挤占的空间却略小于占地面积。在两个对角建造的建筑缝隙间,依然可以穿过体积小于 1 的兵种,比如机枪兵或者小狗。需要错一格才能严格封堵。对于 5×5 的主基地则更为特殊,错两格都依然能通过 1 体积兵种,错一格时甚至能通过一个追猎者。

每个单位都有自己的体积,以指定半径的圆形描述,属于一个内部数据,与玩家选中单位时脚下的圆形没有关系,只能通过解析客户端数据获得。所有的占位、可穿过等与体积相关的特征,都与这个内部数据相关。当两个单位的圆形最近处宽度小于兵种自身直径时,寻路算法便不把两单位之间的缝隙视作一条通道了。部分单位在切换形态时,例如攻城坦克切换到攻城模式时,其体积会发生变化。另一个更实际的例子是星灵机械哨兵的力场,通过从某个特定坐标 “膨胀” 出一个圆形,从而对部队分布产生影响。

而在建筑摆放时,则无视圆形体系这套系统,单纯以建筑网格判断是否可以建造。因此两个相邻建筑的碰撞体积圆周可能是相交的。所以有时候会出现攻城模式的坦克挡住了气矿,气矿无法建造的情况。

空中单位也存在体积,区别在于空中单位并不强制碰撞,而是缓慢地相互分离,直到达到最后互不重合为止。

视野

每个兵种与建筑都有自己的视野范围,呈圆形,在视野内才能看见敌方的动静,视野外则覆盖有战争迷雾,只能看见地形:

  • 地面单位的视野受地形影响更大一些,会受到树、草丛、柱子等影响,而空中单位则不会;
  • 所有友方单位的视野共享,包括多人游戏时的盟友视野,可以借助友方单位的视野进行一些必须有视野才能操作的动作,比如投放矿骡或者挖虫洞;
  • 建筑也拥有自己的视野,大多都是 9,但主基地和防御建筑的视野会更大一些;
  • 感应塔的视野是 12,但额外拥有 30 的感应范围,可感知敌人位置,但不属于视野;
  • 不考虑感应塔的特例,视野最大的建筑是萨尔那加塔,为 22,单位是星灵母舰,14;
  • 雷达可以全图开视野,半径为 13,这个都知道;
  • 所有的工程兵视野均为 8;
  • 建造中的建筑视野为 5,包括自身占据体积,对人类而言,建造中的 SCV 也会实际扩大这一区域的视野。
  • 虫茧,即正在变异中的毒爆、眼虫、巢虫领主和幼虫孵化各兵种时的状态,视野为 5。
  • 埋地单位视野减少为 4,但感染者和毒爆不变,异化作战体减少为 5;
  • 反隐可以认为是一种特殊的视野,反隐单位的反隐距离永远与视野一致;
  • 虽然如此,但视野会被地形遮挡,反隐能力却不会。悬崖下光子炮台,地形受限视野无法覆盖崖上,但借助友军视野,依然能侦测到高地上范围内的隐藏单位;
  • 视野详细数据见:http://wiki.teamliquid.net/starcraft2/Sight

射程

有距离的衡量单位以后,射程也就可以确定了。在游戏中射程的重要性受操作的影响非常大,更经常与地形、视野配合,获取更大的战斗优势。

  • 射程的起止点是从攻击单位的体积边缘一直到受伤害单位的体积边缘,以确保两个不同体积但相同射程的单位在无额外操作的情况下可以相互攻击到对方。最典型例如地堡枪兵(5+1)对抗追猎者(6);
  • 因此在视觉上,重形单位射程比实际数值更大一些。典型例子:光子超载的星灵枢纽、仲裁官;
  • 每个单位都存在体积,其边缘和视觉并不完全一致,有的大有的小。具体数值解析客户端可得,实际往往通过聚团时大小靠感觉判定;
  • 尽管异龙的射程只有 3,但由于弹射另有 2 的射程,再加上建筑较大的自身体积,异龙能打到 7 以上的距离。借助建筑弹射绕路的地面部队也是异龙操作技巧之一;
  • 近战兵种也是有射程的,数值上视为 0.1,但毒爆的触发范围为 0.25,确保毒爆对近战单位的优势。毒爆的伤害范围为 2.2,以爆炸中心点开始计算;
  • 升级冲锋的狂热者在冲锋追上敌人后必定至少造成一次伤害,这次伤害的 “近战距离” 可能大于 0.1,是某个补丁后添加的特殊设计;
  • 大部分兵种的远程攻击距离是整数,但并非必然。收割者(4.5)、巢虫领主(9.5)表示有话说。
  • 蔽目毒云造成的近战距离也为 0.1;
  • 人类攻城模式坦克和星灵风暴战舰是仅有的两个最大射程比视野还大的兵种,需要友军帮助打开视野才能获得最大攻击范围;
  • 人类攻城模式坦克是唯一一个有最小攻击距离的单位,距离为 2;
  • 星灵航母的射程分两段,8 点为派出拦截机的触发距离,14 点为拦截机的强制回收距离。
    • 拦截机派出时间为 8 秒,8 秒后必须回到航母后再重新派出,因此以下内容在讨论距离为 8 – 14 范围时都假定在同一个 8 秒内;
    • 拦截机本身在动画上有射程,但该射程实际并无作用,拦截机有时在动画效果上会飞到接近 14 处,但依然不会攻击 14 以外的目标;
    • 在派出拦截机后,航母可以后撤,只要 14 范围内,拦截机在 8 秒内依然会攻击既定目标;
    • 拦截机也有视野,因此在攻击 8-14 范围目标时不需要额外开视野;
    • 在 8-14 范围内,目标死亡后,玩家可以手动点选一个新目标,拦截机可以不回舱直接转向新目标。此时航母会驶向目标,再次手动拖拽可以使它继续停在 8 以外,达到距离外切换目标的效果;
    • 但 8 为“派出距离”,也就是说如果敌方在 8-14 内时,尽管已经派出的拦截机会继续攻击,但新造的或者未派出的拦截机则不会继续派出;
    • 默认的 “派出间隔” 为 0.5 秒,4 秒全派出。可以通过升级提升到 0.125(前四)到 0.25(后四),1.5 秒全派出;
    • 拦截机的攻击间隔为 3 秒,基础攻击力 5×2 双重攻击,一次派出可以攻击三次;
    • 航母的攻击力完全来自于拦截机,相当于 5 点攻击力的 16 重攻击。因此敌方的护甲升级会产生巨大的影响;
    • 拦截机 25 血,虽然无法选中、无法手动点击,但可以被自动防御机制,例如防空塔、机枪兵、光子炮台等击中摧毁,因此航母需要时刻注意补充拦截机。友军人类开启 SCV 自动修理也可以修理拦截机;
    • 拦截机虽然不占用人口,但由于航母占用 6 人口,因此初始四架每架拦截机等效占用 1.5 人口,满载八架后每架等效占用 0.75 人口;
    • 空的航母在攻击指令下达后也会停在 8 格处,而不会飞到敌人脸上;

移动速度

移动速度是建立在游戏内距离和游戏内时间双重数值下的的一个兵种动态属性。速度的作用在于快速接近敌人、逃跑、追击、巡图、捡漏等,以建立整个对战过程中的战术优势。速度并不影响攻防数值,但却可能影响兵种相克。速度的衡量标准单位为 1 格/秒,可以简写为 1。

  • 移动速度与攻击速度(攻击间隔)是分别的两个属性,例如时空折跃会将区域内敌方兵种移动速度降低到 50%,但并不改变其攻击速度,虽然从感觉上来说应该变;
  • 在较大部队行进时,每个兵种的速度是各自计算的,由于寻路与体积碰撞等因素,整个部队的移动速度会慢于组成兵种的移动速度;
  • 游戏中速度最快的是星灵航母的拦截机,速度为 7.5,但是考虑到拦截机属于特殊情况,而航母本身却只有可怜的 1.875 的速度,所以实战意义上的最快速度并不是它;
  • 可操作的最快速度是菌毯上的代谢加速跳虫,为 6.1088,其次紧随其后的是冲锋状态中的狂热者,速度为 6.05;
  • 那么显然问题来了,冲锋技术哪家强 冲锋狂热者能否追击到菌毯提速狗?
  • 答案当然是不能。事实上冲锋也是一个 BUFF,持续 3.5 秒,在此时间内差不多能冲过 22 格距离,相当于萨尔那加塔的视野,也差不多是一个屏幕的距离,然后就会慢下来;
  • 这与某次补丁的 “冲锋后至少能击中一下” 不矛盾,冲锋在两者距离小于 0.1 时会提前结束,当提前结束时,必然产生一次攻击。但如果是时间到结束,则相当于始终未曾接近,故不产生攻击行为;
  • 所以如果你够骚,可以尝试拿条跳虫把对方的狂热者带到一个屏幕外自己的大部队这里来消灭掉;
  • 速度第三是无菌毯提速狗,4.6991,所以穿狗入矿区必须靠建筑预防;
  • 并列第四的是推进器状态医疗艇、恶火和凤凰,均为 4.25;
  • 速度最慢的是未升级王虫,为 0.586;
  • 其它数据详见:http://wiki.teamliquid.net/starcraft2/Speed

弹道

很多兵种发射的子弹都有明确的行进轨迹,人类的各种飞弹,星灵的蓝色激光,虫族的绿色喷吐。弹道并不仅仅是一个视觉效果上的设置,在数据方面也会产生一些变化。

  • 弹道类攻击从攻击方发射出来,到防御方受到攻击,中间存在一个时间差。这个时间差随着弹道长度会变化;
  • 随着目标的移动,弹道也会发生变化,最后总是会击中目标,即使目标已经移出自己的射程外;
  • 铁鸦的可以跑远躲开的自动导航炸弹是技能,不是弹道类普通攻击;
  • 子弹飞行时间的长短并不影响攻击兵种的攻击频率,间隔是按发射频率算的;
  • 弹道类攻击有更明显的发射前动作,而不光光是子弹的飞行时间。这使得 “甩枪” 动作需要停留的时间比机枪兵和收割者更慢一些;
  • 尽管常规移动并不影响弹道类飞行的命中,但确实可能通过某些手段回避掉已经发出的弹道类攻击。比如追猎者的闪烁,或者人类兵的快速上下医疗艇。原理是取消弹道类攻击的飞行终点;
  • 整个游戏唯一针对弹道类攻击的技能是铁鸦的定点防御靶机,但出于平衡性修正,个别视觉上属于弹道类的攻击也被排除在外了;
  • 所以上下医疗艇可以防御的弹道类攻击种类最多;
  • 弹道类攻击会出现很多子弹同时射向某个残血目标导致大量输出浪费的现象,原因也是弹道攻击的延时。尽管输出有先后,但在第一发子弹飞到目标前,大家都会认为目标还活着纷纷扔出自己的菜刀;
  • 在非常非常极端的情况下,瞬发技能也可能造成类似的输出浪费。这是因为星际在游戏机制上的最短时间间隔为 0.001 秒,即 1 毫秒,可以通过分析游戏录像包数据得到。这使得在同一个时间间隔内的动作变成 真•同时;

星灵护盾(一)

星灵护盾是星灵特有的属性,覆盖所有的建筑和兵种,甚至包括生产过程中的单位。在任何情况下,星灵单位受到伤害时,都优先扣除护盾值,到护盾为 0 时,再扣除 HP。星际 1 中存在蝎子毒血无视护盾直接伤害 HP,星际 2 不存在。

护盾和护甲的防御是分别计算、单独升级的,所有单位的护盾防御初始值是 0,每级 +1。计算公式和护甲完全相同,即:

伤害 = max { 攻击力-护盾值, 0.5 } x 多重攻击数

在最极端的情况下:

  • 零攻收割者,攻击力 4×2;
  • 机械哨兵,守护者之盾,使光环内友方单位受到的远程伤害减少 2 点;
  • 二盾狂热者,护盾防御 2 点。

收割者每轮攻击为 (4-2)x2,而护盾防御也为 2,实际伤害为 0.5×2,即 1 点。当未开启守护者之盾时,则每轮实际伤害为 4 点。守护者之盾开启与否效果很明显。

当护盾的总量不足以抵挡单次伤害时,则护盾防御与护甲防御同时起作用。比如:

  • 零攻掠夺者,对重甲伤害 20;
  • 一防一盾追猎者,护盾剩余 10 点,护盾防御 1 点,护甲防御 2 点,重甲;

则掠夺的下一发伤害计算为:

  1. 护盾防御减伤: 20-1=19 点伤害;
  2. 全部剩余护盾抵挡掉 10 点伤害,19-10=9,剩余 9 点伤害传递给 HP 承受;
  3. 9 点伤害被护甲抵消 2 点,剩余 7 点伤害实际作用于追猎的血量上。

但当该临界点下的伤害被护甲完全防御时,并不造成额外 0.5 的伤害。比如:

  • 零攻狂热者,伤害 8×2;
  • 一防一盾机械哨兵,40 护盾 40 血,护盾防御 1 点,护甲防御 2 点;
  • 零防一盾机械哨兵,40 护盾 40 血,护盾防御 1 点,护甲防御 1 点;

由于狂热者双重攻击有先后,则攻击过程为:

  1. 前两轮打在护盾上,造成两次 (8-1)x2 =14 伤害,哨兵剩余 12 盾 40 血;
  2. 第三轮前一刀 8-1 点伤害盾完全吸收,后一刀 8-1 点伤害盾吸收 5 点,剩余 2 点打到护甲上;
  3. 零防哨兵 1 护甲会损失 1 点血量,39 HP,一防哨兵 2 护甲则未损失血量,40HP;
  4. 等待哨兵回复满盾后,再重复以上过程,零防哨兵再减 1 点血量,38HP,一防哨兵依然未损失 HP,40HP;
  5. 两次过程积累后可看出,每次破盾后打在护甲上的伤害为 2 点,被护甲 2 点抵消后,不再产生额外 0.5 点伤害。

零防哨兵的掉血曲线间接证明了狂热者双刀有先后,而一防哨兵未掉血,表明在临界点上,一次伤害如果已经对盾造成实际损伤,则即使剩余伤害被护甲完全抵消,也不会额外计算 0.5 伤害。理由大概是已经存在伤害,不需要再考虑伤害下限了。

护盾会在最后一次伤害结算后 10 秒开始回复,回复速度为每秒 2 点。有些说明写的是脱战后 10 秒恢复,从语言表述上来说是不正确的。星际跟 WOW 不一样,并没有明确的“战斗状态”,也就没有进战脱战这种说法。只要 10 秒不受到伤害,在战头中也是可以回复的,下次用闪烁追猎记得多操作。

建造中的建筑或折跃中的单位的护盾行为例外。建筑在放下的一瞬间就有 10% 的血量与护盾,而后按建造总时间与总护盾值匀速增长,没有 10 秒的结算时间,没有护盾防御加成,也没有额外的回复。例如:

  • 星灵枢纽:1000 血 1000 盾,建造时间 100 秒,放下的一瞬间有 100 血 100 盾,之后每秒增加 9 血 9 盾;
  • 零攻追猎者对重甲每次攻击 14 点伤害,1.44 秒攻击一次,100 秒攻击 69 次,造成 966 伤害;

也就是说,只靠一个追猎者,在主基地建造过程中完全无法造成实质伤害……

折跃兵种的过程也是一样,初始状态 10% 血量 10% 盾,因为折跃刷新的时间很短,兵种很快就会结束折跃满血满盾进入战斗。实战中不如集中火力打击水晶或运输船更合算。

所有建筑的护盾和血量都相同,绝大部分的兵种血量都大于等于护盾,但黑暗圣堂和执政官除外。考虑到升级时间与升级费用,在对抗虫族时升级三防有时不如升级一盾更合算,尤其是队伍内有大量执政官时。对抗人类……因为有 EMP……还是算了吧。

星灵护盾(二):刚毅护盾

刚毅护盾是星灵不朽者特有的被动技能,当护盾存在时,所有攻防结算伤害高于 10 点的攻击效果都降低为 10 点。这一上限是先由攻防结算后再作限定的,也就是说是 min{攻击力-护盾防御值, 10}。比如:

零攻追猎者,普通伤害 10 点,对重甲伤害 14 点;
三盾不朽者,重甲,护盾防御 3 点,护盾满,刚毅护盾有效。

则追猎打不朽,以重甲结算,攻击力为 14 点,不朽护盾防御力为 3 点,则攻防结算伤害为 11 点,触发了刚毅护盾,减少为 10 点,所以最终结果是不朽减 10 点盾,并发出刚毅护盾视觉效果。当不朽的护盾不足 10 点时,刚毅护盾效果依然存在,将高于 10 点的攻击伤害降为 10 点,剩下计算和普通的分界线计算一致,再次受到护甲减免。因此即使只有 1 点护盾,也可以抵抗一次高攻伤害。

但刚毅护盾对固定伤害的技能性攻击是无效的。尽管星际2是个科幻背景游戏,不过把以下这些技能理解作是“魔法攻击”,会更方便一些。

“魔法攻击”(技能伤害)

星际2是个科幻背景游戏,但把这些技能理解作是“魔法攻击”,理解上会更方便一些。

  • 聚变打击(幽灵) – 较大范围内 300 点伤害。
  • 大和炮(战列巡航舰)- 单体 300 点伤害。
  • EMP(幽灵) – 范围移除 100 点星灵护盾与 100 点能量(如果有能量)。
  • 哨兵导弹(寡妇雷) – 对攻击主体造成 125 点伤害(有护盾单位额外 +35 点),并造成 40 点溅射伤害(有护盾单位额外 40 点)。
  • 猎杀飞弹(铁鸦) – 攻击主体及范围内造成最多 100 点伤害。
  • 狙杀(幽灵) – 对生物单位造成 25 点伤害,对灵能单位额外造成 25 点伤害。
  • 能量反蚀(光明圣堂武士) – 消耗目标所有能量,每点能量造成 1 点伤害。
  • 灵能风暴(光明圣堂武士) – 范围内 8 次伤害每次 10 点,共计 4 秒。
  • 霉菌滋生(感染者) – 范围内 4 秒造成 30 点(重甲 40 点)伤害,且无法移动。

以上为伤害性技能,其特点是:

  • 伤害值不受攻防升级影响
  • 伤害值无视护甲、护盾防御值
  • 伤害值无视守护者之盾,但是会受到腐化影响
  • 伤害值无视刚毅护盾
  • 除聚变打击外,所有的技能施放都需要能量值

基于这些特性,认为是“魔法攻击”也并无不妥。是的,毒暴的伤害并不属于此类,毒暴的伤害是受攻防加成的。

能量

能量值是大部分兵种和单位施放特殊技能的消耗性资源,在游戏中以紫色条显示。大部分有能量单位的能量上限为 200 点,并且永久地以每秒 0.5625 点回复能量,刚生产出来的单位初始拥有 50 能量,一些单位可以研发升级让初始技能变为 75 点。但有三个单位例外:

  • 星灵枢纽初始能量 0 点,上限 100 点;
  • 皇后初始能量 25 点;
  • 定点防御靶机初始能量 200 点,每秒回复 1 点能量。

和血量相反,能量是向下取整的。

没有任何方式改变能量的增长速度与技能消耗,但依然有两个技能可以影响敌方能量:

  • EMP(人类,幽灵) ,范围内有能量的敌对单位减少 100 点能量;
  • 能量反蚀(星灵,高阶圣堂武士),清除敌对目标所有能量,并对其造成等量伤害。

临时性攻防提升

特定的技能也会影响伤害数据:

守护者之盾:

星灵机械哨兵的主动技能,展开一个范围为 4 的力场,范围内所有友军单位受到的远程伤害降低两点。守护者之盾属于临时的、有限制的防御提升。要注意的几点是:

  • 跟攻击单位的位置无关,只跟受伤害的单位是否在范围内有关;
  • 同样,无法防御“魔法攻击”,比如寡妇雷的哨兵导弹;
  • 自己也同样受益;
  • 对友方误伤也同样起效果;
  • 近战攻击不受减免,溅射伤害不受减免(未证实)
  • 蟑螂、刺蛇、宿主的蝗虫等,在与敌方贴脸攻击时,攻击动作会发生变化,属于近战,也不受减免

腐化:

腐化者主动技能,使目标在 30 秒内受到的伤害提升 20%。注意的点是:

  • 尽管腐化者是对空单位,但腐化技能也可以对地面单位释放;
  • 腐化后的伤害值是可能有小数点的,综合开篇讲的血量向上取整的特性,显示结果就是多次相同情况下的伤害值可能偏差 1 点;
  • 尽管它也属于技能,但并不直接产生伤害,而是依附于普通攻防,因此也受攻防升级影响;
  • 对技能伤害同样有加成,比如寡妇雷炸被腐化不朽伤害为 192 点。(未证实)

定点防御靶机:

铁鸦主动技能,在目标区域投放一个定点防御靶机,击落范围内所有向友方发射的弹道类攻击,每次防御消耗 10 点能量。防御机的工作原理是利用激光破坏飞向友方单位的弹道类攻击,包括人类导弹类攻击、星灵慢速弹道激光等等。注意点包括:

  • 与守护者之盾不同,无关攻击者的位置,甚至也无关友方位置,只要飞弹经过防御范围,定点防御靶机就有作用;
  • 与守护者之盾不同,靶机是直接免除某些类型的攻击,对不免的攻击则无影响,故不存在攻防值计算问题;
  • 与守护者之盾不同,靶机对友方误伤不防御;
  • 基于其工作原理,只对“有弹道、飞弹类”的远程攻击起作用,比如掠夺者、女妖、追猎者、凤凰,飞龙、腐化者,对瞬时远程攻击不起作用,比如机枪兵、不朽等。
  • 对航母的拦截机也有作用;
  • 同样基于其工作原理,雷神和落地维京的对地攻击也无法击落,只能击落雷神和维京的对空飞弹。
  • 所以靶机自身也是可以在不触发防御机制的情况下被击落的;
  • 对于多重攻击,每一重攻击都要消耗一份靶机能量;
  • 靶机能量回复速率比一般单位快,为每秒 1 点,故每存在 10 秒便可额外多击落一次弹道攻击;
  • 靶机属于建筑类型,工程站建筑护甲升级可以为靶机提供额外两点护甲,但它是轻甲,全星际唯一的轻甲建筑;
  • 因为是建筑,所以狙击、腐化、灵能风暴都无效;
  • 但你妈能量反蚀是有效的,一放一个准。50 血 200 能量初始还满能量的家伙……
  • 靶机在原理上属于攻击类,只不过攻击目标是弹道类子弹,所以工程站的研发项目“瞬时自动追踪”,也能让靶机的防御范围 +1,从 8 到 9。
  • 靶机的初始存在时间为 180 秒,最多可以防御 38 次攻击,可升级。升级后存在时间延长到 240 秒,至多防御 44 次攻击;
  • 可以被 SCV 修理,详见另一篇:《星际争霸2建造与修理详解》;
  • 幻像的攻击也会防御,一样消耗能量;
  • 攻防升级与靶机的防御能力无关,三攻子弹和零攻子弹一样防,所以越后期靶机减免的伤害越多,而守护者之盾则固定减伤 2 点,后期效果更弱;
  • 刺蛇、皇后等兵种在与敌方贴脸攻击时,属于近战,此时靶机不起作用
  • 多个靶机不会拦截同一发导弹,他们的防御能力总是累加的;
  • 特别注意:某个版本后,对巢虫领主也不起作用了;

结算顺序

参考以下事实:

  • 掠夺者,对重甲 20 点伤害;
  • 不朽者,重甲,拥有刚毅护盾,任何超过 10 点的伤害降低为 10 点,且站在守护者之盾范围内;
  • 掠夺者射出一枪,进入守护者之盾,对不朽造成 8 点伤害。

关于腐化,也有类似的事实:

  • 掠夺者,对重甲 20 点伤害;
  • 不朽者,重甲,拥有刚毅护盾,任何超过 10 点的伤害降低为 10 点,但处于被腐化状态,受伤害增加 20%;
  • 掠夺者射出一枪,对不朽造成 12 点伤害。

更复杂的:

  • 掠夺者,对重甲 20 点伤害,开兴奋剂增加 50% 攻速;
  • 不朽者,重甲,拥有刚毅护盾,任何超过 10 点的伤害降低为 10 点,但处于被腐化状态,受伤害增加 20%;
  • 附近的机械哨兵展开了守护者力场保护不朽者,所有的远程伤害减少 2 点;
  • 掠夺者射出一枪,对不朽造成 10 点伤害。

根据这一事实,我们得出一个伤害结算顺序的概念:

  • 伤害值都是通过顺序,在一个最基础的值上根据条件进行数值修正或数值替换;
  • 首先计算永久性攻防值(兵种属性决定基础数值),在此基础上进行技能性攻防修正(兵种技能影响最终数值);
  • 如果有多个永久性攻防值(兵种属性),先结算无附加条件的,再结算有附加条件的(护甲类型、兵种类型);
  • 如果有多个临时性攻防修正(兵种技能),先结算无附加条件的,再结算有附加条件的(远程、弹道);
  • 在以上四条确定的同一计算顺序内,先结算输出的伤害值(伤害别人的企图),再结算受到的伤害值(受伤害的企图);

比如上述例三:

  1. 首先计算永久性攻防值(兵种属性):掠夺者 10 点伤害,不朽者 0 盾防,伤害意图为 10 点;
  2. 因为不朽者护盾防御值为 0,因此受伤害意图变为 10-0 = 10 点;
  3. 因为掠夺者有两个永久性攻击值,其中 “对重甲 +10” 属于有条件数值,攻击数值修正为 20,防御为 0,伤害企图为 20 点;
  4. 因为不朽者没有针对远程攻击的有条件防御加成,因此受伤害图依然为 20-0 = 20 点;
  5. 判断掠夺者永久性攻击技能,有振荡弹,但对伤害数值无影响,因此伤害企图为 20+0 = 20 点;
  6. 判断不朽者永久性防御技能,有刚毅护盾,会产生效果,受伤害企图无视源伤害大小,强行修正为 10 点;
  7. 判断掠夺者临时性技能,有兴奋剂,但对伤害数值无影响,伤害企图依然为 10 点;
  8. 判断不朽者临时性技能,有两个,腐化和哨兵盾:
    • 首先结算无附加条件的腐化,受伤害企图修正为 10 x ( 1+20% ) = 12 点;
    • 再结算有附加条件的,哨兵盾只对 “远程攻击” 有效果,使得受到的远程伤害减少 2 点,受伤害企图修正为 10 点;
  9. 无其它条件,最后不朽受到 10 点伤害,进行盾数值、血量和护甲的计算。

如果结算时是先哨兵后腐化,那么不朽的每次伤害只有 (10-2) x 1.2 = 9.6 点,考虑到血/盾的数值向上取整,我们就会见到单次伤害为 9 点,而非 10 点了。

尽管未作测试,但可以大胆断言,在盾血边界的那次伤害上,星灵可以享受盾防御和护甲防御的双重减免,同时腐化也不会影响到转移到血量上的剩余伤害部分。因为在“伤害企图值→受伤害企图值”那次计算中,腐化的技能已经结算完毕。盾血边界的计算,其实是 “受伤害企图值” 与盾、血数值上的计算,而“受伤害企图值”本身已经包含了腐化的结算。否则就变成了一技能两次结算,属于 bug 了。也就是说三防 200 血 1 盾 4 护甲腐化不朽者,被三攻坦克轰了一炮以后,只也掉 7 滴血,而不会出现 (12-1) x 1.2 – 4 = 9.2 血这种复杂的情况。

通常来说 HTML 和 CSS 中引用图片都用的是 <img src=”…”> 和 url(…) 的引用办法。有时为了节约连接数,在诸如图标库等特殊用途 css 中,也会使用一张大图片通过 position 定位到不同位置的办法,来把所有图标放在同一张图片上。

不过还有一种办法是直接把图片通过 base64 编码以后写到文本中。对于非常静态化的需求,比如电子书、自制在线简历、email 投递、网络隐私安全病患者等等,或者各种原因在输入端只支持文本的场合,有时也是一种不错的选择。

这种办法其实很简单,就是把原来写 url 的位置替换成图片 base64 编码以后的文本。

比如我有一张图片,,把它用 base64 编码以后就成了一长串文本:(编译工具用百度一搜就行,在线的,本地的多得去了,在 Github 上还能搜到完全基于 JS 的。)

1
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b+AAAAAAAAAAAABCbCAgZG91YkBv4AAAAAAAAAAAAEJyZFRVbnRGI1JsdAAAAAAAAAAAAAAAAEJsZCBVbnRGI1JsdAAAAAAAAAAAAAAAAFJzbHRVbnRGI1B4bEBywAAAAAAAAAAACnZlY3RvckRhdGFib29sAQAAAABQZ1BzZW51bQAAAABQZ1BzAAAAAFBnUEMAAAAATGVmdFVudEYjUmx0AAAAAAAAAAAAAAAAVG9wIFVudEYjUmx0AAAAAAAAAAAAAAAAU2NsIFVudEYjUHJjQFkAAAAAAAAAAAAQY3JvcFdoZW5QcmludGluZ2Jvb2wAAAAADmNyb3BSZWN0Qm90dG9tbG9uZwAAAAAAAAAMY3JvcFJlY3RMZWZ0bG9uZwAAAAAAAAANY3JvcFJlY3RSaWdodGxvbmcAAAAAAAAAC2Nyb3BSZWN0VG9wbG9uZwAAAAAAOEJJTQPtAAAAAAAQASwAAAABAAIBLAAAAAEAAjhCSU0EJgAAAAAADgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAHjhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAAAAkAAAAAAAAAAAEAOEJJTQQKAAAAAAABAAA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAAM9AAAABgAAAAAAAAAAAAAAMAAAADAAAAAEAGIAbwBhAHQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAAAAABudWxsAAAAAgAAAAZib3VuZHNPYmpjAAAAAQAAAAAA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ADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcFJpZ2h0cz0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3JpZ2h0cy8iIHhtcE1NOkRvY3VtZW50SUQ9InV1aWQ6RUNGQzc3Mjg4MDQxREMxMUJDNDVBODNDNjIyRTJGRTkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjU2RTNBMDhERjRERTQxMUI5OTJDQzc3NTY4MTA1MkUiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0idXVpZDpFQ0ZDNzcyODgwNDFEQzExQkM0NUE4M0M2MjJFMkZFOSIgeG1wOkNyZWF0ZURhdGU9IjIwMDctMDgtMDNUMTM6MDk6MjUrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE0LTEwLTA3VDEzOjAxOjQzKzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE0LTEwLTA3VDEzOjAxOjQzKzA4OjAwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzIgV2luZG93cyIgZGM6Zm9ybWF0PSJpbWFnZS9qcGVnIiBwaG90b3Nob3A6TGVnYWN5SVBUQ0RpZ2VzdD0iMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcFJpZ2h0czpNYXJrZWQ9IkZhbHNlIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6RjU2RTNBMDhERjRERTQxMUI5OTJDQzc3NTY4MTA1MkUiIHN0RXZ0OndoZW49IjIwMTQtMTAtMDdUMTM6MDE6NDMrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hwYWNrZXQgZW5kPSJ3Ij8+/+4ADkFkb2JlAGRAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQEBAQEBAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAMAAwAwERAAIRAQMRAf/dAAQABv/EAaIA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

这串文本很长,不过相比于图片本身的体积,其实并没有大多少。这种体积的变化详细涉及到信息论和压缩原理,这篇文章先不写了。

然后我们在长串文本前再添加一些说明文字,供浏览器识别:

1
data:image/jpg;base64,

然后就可以直接替换原 url 了,就像这样:

1
2
3
<img src="
data:image/jpg;base64,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b+AAAAAAAAAAAABCbCAgZG91YkBv4AAAAAAAAAAAAEJyZFRVbnRGI1JsdAAAAAAAAAAAAAAAAEJsZCBVbnRGI1JsdAAAAAAAAAAAAAAAAFJzbHRVbnRGI1B4bEBywAAAAAAAAAAACnZlY3RvckRhdGFib29sAQAAAABQZ1BzZW51bQAAAABQZ1BzAAAAAFBnUEMAAAAATGVmdFVudEYjUmx0AAAAAAAAAAAAAAAAVG9wIFVudEYjUmx0AAAAAAAAAAAAAAAAU2NsIFVudEYjUHJjQFkAAAAAAAAAAAAQY3JvcFdoZW5QcmludGluZ2Jvb2wAAAAADmNyb3BSZWN0Qm90dG9tbG9uZwAAAAAAAAAMY3JvcFJlY3RMZWZ0bG9uZwAAAAAAAAANY3JvcFJlY3RSaWdodGxvbmcAAAAAAAAAC2Nyb3BSZWN0VG9wbG9uZwAAAAAAOEJJTQPtAAAAAAAQASwAAAABAAIBLAAAAAEAAjhCSU0EJgAAAAAADgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAHjhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAAAAkAAAAAAAAAAAEAOEJJTQQKAAAAAAABAAA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAAM9AAAABgAAAAAAAAAAAAAAMAAAADAAAAAEAGIAbwBhAHQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAAAAABudWxsAAAAAgAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAAAwAAAAAFJnaHRsb25nAAAAMAAAAAZzbGljZXNWbExzAAAAAU9iamMAAAABAAAAAAAFc2xpY2UAAAASAAAAB3NsaWNlSURsb25nAAAAAAAAAAdncm91cElEbG9uZwAAAAAAAAAGb3JpZ2luZW51bQAAAAxFU2xpY2VPcmlnaW4AAAANYXV0b0dlbmVyYXRlZAAAAABUeXBlZW51bQAAAApFU2xpY2VUeXBlAAAAAEltZyAAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAAAMAAAAABSZ2h0bG9uZwAAADAAAAADdXJsVEVYVAAAAAEAAAAAAABudWxsVEVYVAAAAAEAAAAAAABNc2dlVEVYVAAAAAEAAAAAAAZhbHRUYWdURVhUAAAAAQAAAAAADmNlbGxUZXh0SXNIVE1MYm9vbAEAAAAIY2VsbFRleHRURVhUAAAAAQAAAAAACWhvcnpBbGlnbmVudW0AAAAPRVNsaWNlSG9yekFsaWduAAAAB2RlZmF1bHQAAAAJdmVydEFsaWduZW51bQAAAA9FU2xpY2VWZXJ0QWxpZ24AAAAHZGVmYXVsdAAAAAtiZ0NvbG9yVHlwZWVudW0AAAARRVNsaWNlQkdDb2xvclR5cGUAAAAATm9uZQAAAAl0b3BPdXRzZXRsb25nAAAAAAAAAApsZWZ0T3V0c2V0bG9uZwAAAAAAAAAMYm90dG9tT3V0c2V0bG9uZwAAAAAAAAALcmlnaHRPdXRzZXRsb25nAAAAAAA4QklNBCgAAAAAAAwAAAACP/AAAAAAAAA4QklNBBEAAAAAAAEBADhCSU0EFAAAAAAABAAAAAY4QklNBAwAAAAAA4gAAAABAAAAMAAAADAAAACQAAAbAAAAA2wAGAAB/9j/7QAMQWRvYmVfQ00AAv/uAA5BZG9iZQBkgAAAAAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgTExUTExgRDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBDQsLDQ4NEA4OEBQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIADAAMAMBIgACEQEDEQH/3QAEAAP/xAE/AAABBQEBAQEBAQAAAAAAAAADAAECBAUGBwgJCgsBAAEFAQEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAQQBAwIEAgUHBggFAwwzAQACEQMEIRIxBUFRYRMicYEyBhSRobFCIyQVUsFiMzRygtFDByWSU/Dh8WNzNRaisoMmRJNUZEXCo3Q2F9JV4mXys4TD03Xj80YnlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3EQACAgECBAQDBAUGBwcGBTUBAAIRAyExEgRBUWFxIhMFMoGRFKGxQiPBUtHwMyRi4XKCkkNTFWNzNPElBhaisoMHJjXC0kSTVKMXZEVVNnRl4vKzhMPTdePzRpSkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2JzdHV2d3h5ent8f/2gAMAwEAAhEDEQA/AO2qxTkdJLmD9JS98DxEy4KrjhwcC35+C2ejiMd4/NLyWj7gUDIxG41+jf0Vx9p7A/uK2MnqnE97H7XOlg9GPIOwjL/uZNZ92pH4oBaXuOmnij5LWtEAaqOKAZJ4HZPGgsMUgTLhJQWDYNdAFGlr73T2CvXY7Hska+IT4tDWN3NOg5S9wcPir2Txgfov/9D0TpdhNFJ2wHl4+YM/wV62tlrCx4lpVPGYW4TSOan7o+B93/RV9PyfMSO5YsI9AidfSPyedzqsnFs22++t30LPHyd/LVduQ8aALp7K67WFljQ5h5BWNfhVV2Ftbt7fyeRU+PKJCpDVqZ+XlA8UTcT3+aLTOZYOB80m9QvAILBr4aI/2XyTfZvJSXDswcOXuX//0fUKGBrC3tP5VIexsH83QKUeCUBEm0AUGvZvs0JhvgEP7OFc2hLaEROtlhx3qdWn6Pkm9FXNoS2hHjR7Qf/ZOEJJTQQhAAAAAABVAAAAAQEAAAAPAEEAZABvAGIAZQAgAFAAaABvAHQAbwBzAGgAbwBwAAAAEwBBAGQAbwBiAGUAIABQAGgAbwB0AG8AcwBoAG8AcAAgAEMAUwA2AAAAAQA4QklNBAYAAAAAAAcACAAAAAEBAP/hDXpodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcFJpZ2h0cz0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3JpZ2h0cy8iIHhtcE1NOkRvY3VtZW50SUQ9InV1aWQ6RUNGQzc3Mjg4MDQxREMxMUJDNDVBODNDNjIyRTJGRTkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjU2RTNBMDhERjRERTQxMUI5OTJDQzc3NTY4MTA1MkUiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0idXVpZDpFQ0ZDNzcyODgwNDFEQzExQkM0NUE4M0M2MjJFMkZFOSIgeG1wOkNyZWF0ZURhdGU9IjIwMDctMDgtMDNUMTM6MDk6MjUrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDE0LTEwLTA3VDEzOjAxOjQzKzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE0LTEwLTA3VDEzOjAxOjQzKzA4OjAwIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzIgV2luZG93cyIgZGM6Zm9ybWF0PSJpbWFnZS9qcGVnIiBwaG90b3Nob3A6TGVnYWN5SVBUQ0RpZ2VzdD0iMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcFJpZ2h0czpNYXJrZWQ9IkZhbHNlIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6RjU2RTNBMDhERjRERTQxMUI5OTJDQzc3NTY4MTA1MkUiIHN0RXZ0OndoZW49IjIwMTQtMTAtMDdUMTM6MDE6NDMrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3hwYWNrZXQgZW5kPSJ3Ij8+/+4ADkFkb2JlAGRAAAAAAf/bAIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgICAwMDAwMDAwMDAwEBAQEBAQEBAQEBAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAMAAwAwERAAIRAQMRAf/dAAQABv/EAaIA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
">

编码头的标准格式是

1
data:[<mime type>][;charset=<charset>][;base64],<encoded data>

理论上方括号是可以省略的,同时也可以看到还有其它编码形式,比如base85、base16 等,尽管没有什么实际意义甚至有反效果。(比如有浏览器兼容性、超出合法字符区间等情况)。

好处与坏处:

  • 更新:保证网页上的重要图片不会加载失败。当 HTML 加载完毕或 CSS 加载完毕时,图片一定可以正常显示。不会出现 HTML+CSS 加载成功,但图片没有显示的问题。特别适合于类似评分星级、打标等功能。
  • 节约连接数:http 协议下,每个单独资源在客户端都呈现为一个独立文件(在服务器端部分是),都需要握手协议开销和传输开销,而使用 base64 以后,就变成了 “文件内部” 数据,不需要额外开销。而在呈现上没有变化。这在某网页有大量小文件的静态资源时尤其有用。但随着 cdn 的发展,这种情况又少下去了。
  • 图片过滤无效:有时候用户因为某些原因会屏蔽网页上的图片呈现,这些屏蔽方式通常都是通过匹配 html/css/js 中的资源路径实现的,但在 base64 编码下这种方式会无效。但相应的,基于服务器代理转码的浏览器(UC 之类通常是手机端浏览器),以前也无法转换,现在应该改进了吧。是好是坏看具体场景了。
  • 不方便编辑:这个主要出现在常用的文本编辑器里,在成熟的 IDE 环境中则不存在这种问题,鼠标移到 base64 图片上同样会有预览。有些文件编辑器也通过插件来解决类似问题。
  • 其它:呃…… 少量增加整个网页体积,等。

最后是 php 版的 base64 图片生成:

1
2
3
4
<?php
$img_file = file_get_contents("img/logo.jpg");
echo base64_encode($img_file);
?>

用的也是现成库,别的代码版本就不写了。

0%