今天在改進 iText 上傳前壓縮大圖的功能。
其中,百度、騰訊、Google 等各家 OCR 服務對上傳的圖片尺寸都有要求、也都要求對圖片進行 base64 壓縮。可這要求跟要求可就不同了。
| 服務 | 宣稱圖片大小 | 實際可用大小 | 計算方式 |
|---|---|---|---|
| 百度 | 4 MB | 1.5 MB | 4 / 2 / 1.3 = 1.5 MB |
| 騰訊 | 1 MB | 0.5 MB | 1 / 2 = 0.5 MB |
| 4 MB | 4 MB | 4 = 4 M |
為什么實際大小與宣稱大小不一致呢?
- 首先,base64 壓縮后,得到的大小會增加約 1/3
- 進一步,base64 是使用字符串表示的。那么,一個字符串如 'a' 占幾個字節(jié)呢?看起來百度是使用 2,騰訊是使用 1
- 綜合起來,就是上面看到的縮水版大小
- 另外,百度要求圖片最大分辨率為 4096 * 4096;而其他 2 家則無此要求
既然 base64 會帶來計算上的麻煩,為什么不直接使用解壓后的圖片大小呢?沒錯,Google 就是這么干的。你無需考慮 base64 帶來的尺寸增加,也無需考慮一個字符串到底占幾個字節(jié),只要原圖是 4 MB 以下即可
從這一點上看,服務接口的素質(公司的節(jié)操)順序為:
Google > 騰訊 > 百度