御坂巧克力

吃饱了撑着发些东西

关注

怎么做到不点开和点开是两张不一样的图片?

2020-12-05 22:08阅读:3876巧克力日常

记得那张点开和不点开不一样的图片吗?

我在zh上看到的原理

如果只是想看看怎么做可以直接跳过这部分

下文作者:LoveLapras

简单来说吧,这种图片是利用不透明度(Alpha)来实现的,因此一般为png类型。


当Alpha为0%时,一张图片相当于完全透明;


当Alpha为100%时,一张图片相当于完全不透明。


那么一张Alpha为50%的图片就相当于半透明了。


比如说,一张纯白色的图片,其Alpha为50%,那么在白色背景下,其看起来就是白色;


在黑色背景下,其看起来应该是灰色(50%的白色和后面50%的黑色背景叠加)。


同理,一张Alpha为50%的纯黑色的图片在白色背景下看起来是灰色,在黑色背景下看起来是黑色。


而QQ中,在点开图片前,背景是白色的;


点开图片后;背景是黑色的。


因此,我们可以利用这一原理来实现。


考虑到点开后的图片一定不会比点开前的白(毕竟点开后背景就是黑色了),而Alpha又只有一个通道,因此我们需要对图片进行预处理。


①将点开前的图片和点开后的图片变为灰度图片(即,对于任意一个像素,其RGB相等)。


②将点开前的图片变白,点开后的图片变黑,使得对于同一个位置的像素,点开前比点开后更接近白色。


此处,我们用0~1中的实数来表示像素的RGB值,其中1为最亮,也就是说,RGB为1表示白色,RGB为0表示黑色。


第①步很简单,直接利用著名公式RGB=0.299R+0.587G+0.114B就行了。


第②步也很简单,实现方法也有很多,我们这里用一种简单粗暴的方法:


将点开前的图片的RGB设置在0.5~1之间,将点开后的图片的RGB设置在0~0.5之间。


也就是说,对于点开前的图片,RGB=RGB/2+0.5;对于点开后的图片,RGB=RGB/2。


预处理后,我们就要计算生成图片的RGB和Alpha(以下简称A)了,我们知道,显示的颜色=图片的颜色×A+背景的颜色×(1-A)。


由于点开前的背景色是1,点开后的背景色是0,因此,我们可以列出如下方程组:


RGB×A+1×(1-A)=点开前的RGB


RGB×A+0×(1-A)=点开后的RGB


其中,点开前的RGB和点开后的RGB都是已知的,要求的是RGB和A,解这一方程组,得:


A=点开后的RGB-点开前的RGB+1


RGB=点开后的RGB/A


(当A=0时,RGB为任何颜色都可以。由于点开前的RGB≥点开后的RGB并且其均在0~1之间,所以A会在0~1之间,RGB也在0~1之间)


至此,我们已经得到了一个通用公式,可以利用这个公式逐一处理每个像素,这点可以通过编程实现,具体也不难

简单点说就是

在白色的背景下

白色用透明色来表示

黑色用纯黑色来表示

在黑色的背景下

白色用纯白色来表示

黑色用透明色来表示

正常情况下软件背景是白色的

但是打开以后基本会变成黑色的背景

利用背景色系的变化

来改变不同状况下看到的图片

------下面是你们要的制作方法------

需要的软件在我粉丝群里面有

文件夹里面那个图片合成的那个

(里面那个txt文件不用下载....

压缩包解开点这个

这仅仅是用浏览器来运行

网址存了没有用

打开以后是这样的

那么应该会用吧

白底就是我们平常没打开看到的

黑底是打开来看到的

ps:云音乐的手机版直接可以点开看里面的图

电脑版可以选择切换背景(点背景的炫酷黑

或者查看原图

经过实验

这种方法可以有效避免各类审查

(所以说干好事不会封?

御坂巧克力

吃饱了撑着发些东西

关注

往期回顾

查看更多 >
  • 云村交易所
  • X StudioAI歌手
  • 用户认证
  • AI 免费写歌
  • 云推歌
  • 赞赏

廉正举报 不良信息举报邮箱: 51jubao@service.netease.com

互联网宗教信息服务许可证:浙(2022)0000120 增值电信业务经营许可证:浙B2-20150198 粤B2-20090191-18  浙ICP备15006616号-4  工业和信息化部备案管理系统网站

网易公司版权所有©1997-2026杭州乐读科技有限公司运营:浙网文[2024] 0900-042号 浙公网安备 33010802013307号 算法服务公示信息