漫画是一种以图片为主体的内容形式,我们在实现漫画业务需求时,不可避免地会和图片打交道。本文总结了番茄小说业务场景中两个和图片相关的技术需求,在此抛出遇到的问题与团队的解决思路,望能抛砖引玉。
漫画的内容是由一张张的图片构成,这些图片就是我们的资产,为了防止盗版商/灰黑产能轻易地获取这些资产,我们需要提供一个图片加密方案,以此来保证这些内容只能在我们允许的分发渠道上展示。
加密过程,无非就是明文、加 / 解密算法、密文。在这种情况下,增加对内容的保护程度,本质上就是对密钥算法的迭代。但本次需求不同点在于,由于我们需要保护的不是某一个特定的文件,而是一大批文件,因此除了密钥算法本身的迭代外,我们还可以考虑从密钥的颗粒度着手。
针对漫画章节的特性,我们考虑了三种颗粒度的密钥方案:
「所有内容统一一个密钥」
「每个用户一个密钥」
「每个章节一个密钥」
从安全性的角度上看,我们认为,密钥颗粒度越小,越难被发现分发内容的规律,越难被破解。
上文从安全角度分析,我们确定了要以每个漫画章节一个密钥的设计方向。然而,从维护成本看,如果我们直接为每个漫画章节都保存一个密钥,则需要引入额外的章节数量级(千万级~亿级)的密钥存储,维护成本相对比较高。
如何既能实现章节维度的密钥,又能降低维护成本呢?
“元密钥”方案解决了海量章节数量级的密钥维护成本问题,我们只需要维护一个“元密钥”和一个“变换函数”,即可源源不断的生成新的章节密钥。
如上,我们确定了我们加密方案的基础—— “元密钥”。于是基于 “元密钥”方案 ,我们所设计的整体流程如下所示,核心主要是生产与分发两步。
「生产」
生产步骤主要由内容生产服务完成,其主要功能是将内容提供商或者是作者提供的多媒体源文件,转换成在客户端APP可读的文件形式,然后上传到云端或其他存储介质中。在生产过程中,需要生成不加密版本和加密版本,同时保存至对象存储服务中。加密版本的漫画图片使用 “变换函数” 组合元密钥和章节id生成章节密钥,来对该章节的漫画内容进行加密。不加密版本是为了防止极端情况下获取元密钥失败,此时可直接下发不加密版本,减少用户体验上的损失。
「分发」
分发步骤主要由内容分发服务完成,其主要功能是查询客户端请求的章节内容,打包下发给客户端 APP 进行展示。漫画的章节内容,同时包括了漫画图片的 URL 链接、图片加密状态以及章节密钥。 其中漫画图片的URL链接以及章节加密状态是从存储服务中获取的,而章节密钥则是在分发时利用 “变换函数” 来进行生成,所以生成时也需要获取元密钥,获取元密钥失败时,就会降级到图片不加密的逻辑,下发非加密图片。
最后,漫画章节内容在下发前,还需要对下发的响应包进行加密。客户端获取到章节内容时,需要首先对响应包进行解密,得到当前的图片加密状态、漫画图片 URL 链接以及章节密钥等信息;然后根据漫画图片链接,获取漫画图片文件;最后根据图片加密状态,判断是否需要对获取到的漫画图片文件进行解密,如需解密,则根据下发的章节密钥进行解密。
上述方案也存在一些局限,一个比较严重的问题在于如果密钥生成函数计算出错,会导致加/解密的密钥不匹配,进一步导致图片内容解密失败,这会使得图片无法正常显示,对于用户来说这是非常有损的体验。由于图片内容加密过程发生在内容生产服务,图片内容解密过程发生在客户端,内容分发服务本身无法感知到解密失败事件,不能前置降级处理,因此实现上必须在客户端上做好解密失败的监控,在解密失败时及时告警,推动后台排查处理。
相比于网文,漫画的书封更加精美,信息量也更多,因此在产品形态上,漫画也采用了大屏的展现形式。
然而,在漫画功能上线后,我们发现有部分漫画的原始书封比较模糊,影响体验,如下所示:
为了提升这部分图片的画质,我们想到了寻求超分/画质增强组件搭建自动化处理流程,对该类图片做增强处理,得到高清图,提升整体观感。
筛查低质图片
图片增强处理
筛查低质图片的方法 - vqscore
图片超分接入方法 - imageX
图片超分处理方案 - 多媒体实验室
图片超分处理方案开发 - by 多媒体实验室
图片超分处理方案效果验证 - by 内容分发侧
图片超分处理方案正式接入 - by 内容生产侧
「方案预设」
「数据分析」
「验证方案」
对输入图片(ori)做离线增强处理,得到超分图片(SR2)。为了验证下采样抗性,进一步下采样至 240p,记为(SR2_240)。同时作为对照组,将输入图片 ori 下采样至 240p,记为 ori_240。
计算以上 4 个节点的 vqscore,从大图和小图两个维度予以验证:
「整体结论」
「前后对比」
「测试阶段」
测试阶段,触发超分处理的时机放在客户端请求图片时。
「正式接入」
正式接入时,触发超分处理的时机放在内容生产服务上传图片时。
本文总结了两个业务场景中遇到并已经解决的实际问题——图片加密和图片超分。图片加密基于我们的真实业务场景进行思考,提出了以章节维度进行加密的方案,同时设计了元密钥+函数概念避免了章节维度带来的海量密钥存储的问题;图片超分充分结合业务需求和火山引擎视频云在图片画质评估、图片处理和接入、超分定制化方案的一揽子能力,针对低、中低画质的图片进行增强处理,效果提升显著。由于篇幅所限,本文仅对解决思路进行了阐述,具体实现上有所省略,但仍希望能给整个行业一点启发,一同进步!