瞧瞧我們對漫畫圖片都做了什麼!?

概述

漫畫是一種以圖片爲主體的內容形式,我們在實現漫畫業務需求時,不可避免地會和圖片打交道。本文總結了番茄小說業務場景中兩個和圖片相關的技術需求,在此拋出遇到的問題與團隊的解決思路,望能拋磚引玉。

一、漫畫內容加密

1. 需求背景

漫畫的內容是由一張張的圖片構成,這些圖片就是我們的資產,爲了防止盜版商 / 灰黑產能輕易地獲取這些資產,我們需要提供一個圖片加密方案,以此來保證這些內容只能在我們允許的分發渠道上展示。

2. 內容加密的思考

加密過程,無非就是明文、加 / 解密算法、密文。在這種情況下,增加對內容的保護程度,本質上就是對密鑰算法的迭代。但本次需求不同點在於,由於我們需要保護的不是某一個特定的文件,而是一大批文件,因此除了密鑰算法本身的迭代外,我們還可以考慮從密鑰的顆粒度着手。

3. 密鑰的顆粒度

針對漫畫章節的特性,我們考慮了三種顆粒度的密鑰方案:

「所有內容統一一個密鑰」

該方案的問題是,只要盜版商 / 灰黑產獲取到一個密鑰,即可解全網的圖片內容。盜版商 / 灰黑產獲取到該密鑰的成本非常低,該方案做了等於沒做。

「每個用戶一個密鑰」

每個用戶一個密鑰,意味着每個用戶獲取的內容是不同的,使得內容不能放在 CDN 上,需要由服務端 API 直接輸出。但問題在於圖片文件比較大,不適合直接放在服務端 API 的響應包裏。且對於圖片這種多媒體數據,更應該更多地利用 CDN 近用戶端的好處。

「每個章節一個密鑰」

由於是內容維度的密鑰,還是可以將內容推至 CDN 來進行訪問,也避免了 “所有內容統一一個密鑰” 的問題。壞人可以獲取到一個密鑰,但比較難獲取到所有內容的密鑰。

從安全性的角度上看,我們認爲,密鑰顆粒度越小,越難被發現分發內容的規律,越難被破解。

4. 如何維護密鑰

上文從安全角度分析,我們確定了要以每個漫畫章節一個密鑰的設計方向。然而,從維護成本看,如果我們直接爲每個漫畫章節都保存一個密鑰,則需要引入額外的章節數量級(千萬級~億級)的密鑰存儲,維護成本相對比較高。

如何既能實現章節維度的密鑰,又能降低維護成本呢?

我們想到了一種基於 “元密鑰” 的實現方式,即:

“元密鑰”方案解決了海量章節數量級的密鑰維護成本問題,我們只需要維護一個 “元密鑰” 和一個“變換函數”,即可源源不斷的生成新的章節密鑰。

5. 整體流程設計

如上,我們確定了我們加密方案的基礎—— “元密鑰”。於是基於 “元密鑰” 方案 ,我們所設計的整體流程如下所示,核心主要是生產與分發兩步。

「生產」

生產步驟主要由內容生產服務完成,其主要功能是將內容提供商或者是作者提供的多媒體源文件,轉換成在客戶端 APP 可讀的文件形式,然後上傳到雲端或其他存儲介質中。在生產過程中,需要生成不加密版本和加密版本,同時保存至對象存儲服務中。加密版本的漫畫圖片使用 “變換函數” 組合元密鑰和章節 id 生成章節密鑰,來對該章節的漫畫內容進行加密。不加密版本是爲了防止極端情況下獲取元密鑰失敗,此時可直接下發不加密版本,減少用戶體驗上的損失。

「分發」

分發步驟主要由內容分發服務完成,其主要功能是查詢客戶端請求的章節內容,打包下發給客戶端 APP 進行展示。漫畫的章節內容,同時包括了漫畫圖片的 URL 鏈接、圖片加密狀態以及章節密鑰。 其中漫畫圖片的 URL 鏈接以及章節加密狀態是從存儲服務中獲取的,而章節密鑰則是在分發時利用 “變換函數” 來進行生成,所以生成時也需要獲取元密鑰,獲取元密鑰失敗時,就會降級到圖片不加密的邏輯,下發非加密圖片。

最後,漫畫章節內容在下發前,還需要對下發的響應包進行加密。客戶端獲取到章節內容時,需要首先對響應包進行解密,得到當前的圖片加密狀態、漫畫圖片 URL 鏈接以及章節密鑰等信息;然後根據漫畫圖片鏈接,獲取漫畫圖片文件;最後根據圖片加密狀態,判斷是否需要對獲取到的漫畫圖片文件進行解密,如需解密,則根據下發的章節密鑰進行解密。

6. 解密失敗感知

上述方案也存在一些侷限,一個比較嚴重的問題在於如果密鑰生成函數計算出錯,會導致加 / 解密的密鑰不匹配,進一步導致圖片內容解密失敗,這會使得圖片無法正常顯示,對於用戶來說這是非常有損的體驗。由於圖片內容加密過程發生在內容生產服務,圖片內容解密過程發生在客戶端,內容分發服務本身無法感知到解密失敗事件,不能前置降級處理,因此實現上必須在客戶端上做好解密失敗的監控,在解密失敗時及時告警,推動後臺排查處理。

二、漫畫封面超分

1. 需求背景

相比於網文,漫畫的書封更加精美,信息量也更多,因此在產品形態上,漫畫也採用了大屏的展現形式。

然而,在漫畫功能上線後,我們發現有部分漫畫的原始書封比較模糊,影響體驗,如下所示:

爲了提升這部分圖片的畫質,我們想到了尋求超分 / 畫質增強組件搭建自動化處理流程,對該類圖片做增強處理,得到高清圖,提升整體觀感。

2. 目標

3. 調研

4. 設計思路

5. 技術實現

漫畫封面超分處理方案

「方案預設」

「數據分析」

「驗證方案」

對輸入圖片(ori)做離線增強處理,得到超分圖片(SR2)。爲了驗證下采樣抗性,進一步下采樣至 240p,記爲(SR2_240)。同時作爲對照組,將輸入圖片 ori 下采樣至 240p,記爲 ori_240。

計算以上 4 個節點的 vqscore,從大圖和小圖兩個維度予以驗證:

「整體結論」

「前後對比」

流程示意 (流程圖只表述關鍵節點)

「測試階段」

測試階段,觸發超分處理的時機放在客戶端請求圖片時。

「正式接入」

正式接入時,觸發超分處理的時機放在內容生產服務上傳圖片時。

三、總結

本文總結了兩個業務場景中遇到並已經解決的實際問題——圖片加密和圖片超分。圖片加密基於我們的真實業務場景進行思考,提出了以章節維度進行加密的方案,同時設計了元密鑰 + 函數概念避免了章節維度帶來的海量密鑰存儲的問題;圖片超分充分結合業務需求和火山引擎視頻雲在圖片畫質評估、圖片處理和接入、超分定製化方案的一攬子能力,針對低、中低畫質的圖片進行增強處理,效果提升顯著。由於篇幅所限,本文僅對解決思路進行了闡述,具體實現上有所省略,但仍希望能給整個行業一點啓發,一同進步!

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/6NF8ocAVONXQ7fjVdAwu0A