base64 编码图片一般会使体积变大多少? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
rv54ntjwfm3ug8
V2EX    程序员

base64 编码图片一般会使体积变大多少?

  •  
  •   rv54ntjwfm3ug8 2022-04-15 21:05:25 +08:00 7485 次点击
    这是一个创建于 1282 天前的主题,其中的信息可能已经有所发展或是发生改变。

    客户要求把用户上传的 8~9MB 照片全部 base64 保存进数据库防止被传马,API 直接返回 base64 ,给他解释 base64 会让图片变大他理解不了

    40 条回复    2022-04-18 09:33:16 +08:00
    rainboat
        1
    rainboat  
       2022-04-15 21:10:15 +08:00
    实践是检验真理的唯一标准,多找几张图转成 base64 编码试试
    claneo
        2
    claneo  
       2022-04-15 21:11:54 +08:00
    33%
    gdfsjunjun
        3
    gdfsjunjun  
       2022-04-15 21:13:27 +08:00
    数据库存 base64?是个勇士
    gdfsjunjun
        4
    gdfsjunjun  
       2022-04-15 21:14:17 +08:00
    自己搭建图床系统,数据库只存图片路径
    yaoyaomoe
        5
    yaoyaomoe  
       2022-04-15 21:14:25 +08:00 via iPhone   1
    36
    This encoding causes an overhead of 3336% (33% by the encoding itself; up to 3% more by the inserted line breaks).
    来源 维基百科 Base64
    但是 gzip 可以解决一部分
    chendy
        6
    chendy  
       2022-04-15 21:17:46 +08:00
    数据库存 blob 呗,base64 何必呢
    jinliming2
        7
    jinliming2  
       2022-04-15 21:26:14 +08:00   1
    @yaoyao1128 通常不做展示的话,不会插换行符的,所以就是 33%
    aptx4689
        8
    aptx4689  
       2022-04-15 21:47:54 +08:00   2
    你可以给他演示一下用 base64 存数据库也能挂马
    crab
        9
    crab  
       2022-04-15 21:57:03 +08:00
    4/3
    yuzo555
        10
    yuzo555  
       2022-04-15 22:04:09 +08:00   2
    三个字节的原文会变成 4 个字节的 Base64 编码。
    Tink
        11
    Tink  
    PRO
       2022-04-15 22:19:40 +08:00 via Android
    数据库字段得多长.
    FreeEx
        12
    FreeEx  
       2022-04-15 22:21:52 +08:00 via iPhone
    minIO 不好用吗
    xianrenT
        13
    xianrenT  
       2022-04-15 22:25:52 +08:00
    @gdfsjunjun 为啥是个勇士,除了占用空间还有什么坏处吗?
    luzemin
        14
    luzemin  
       2022-04-15 22:33:37 +08:00
    @xianrenT 传输带宽
    vvhhaaattt
        15
    vvhhaaattt  
       2022-04-15 23:06:47 +08:00 via Android
    我记得谷歌相册 web 就是将图片 base64 编码后上传?
    vvhhaaattt
        16
    vvhhaaattt  
       2022-04-15 23:14:35 +08:00 via Android
    @vvhhaaattt 搜索了下没有相关文档。但我记得是哪个服务上传图片的接口要用 base64 编码,文档中还提到图片大小跟占用宽带不一致,服务端限制的图片大小而不是宽带大小。
    另外 base64 编码后比较方便放到 json 中,统一接口 content type 。
    vvhhaaattt
        17
    vvhhaaattt  
       2022-04-15 23:16:40 +08:00 via Android
    没仔细看是入库编码啊……
    xtinput
        18
    xtinput  
       2022-04-15 23:22:49 +08:00
    base64 的有效数据 75%,所以会增大 33.333%
    kaiki
        19
    kaiki  
       2022-04-15 23:25:53 +08:00
    前端获取不到后端文件的路径的话,就算是木马也没法执行啊,原文件储存,中间用个图片解析程序中转下不就行了
    mikewang
        20
    mikewang  
       2022-04-16 00:16:05 +08:00   9
    Base64 ,故名思义,64 进制( 2^6 ),一个字符表示 6 个比特数据
    一个字符计算机储存为 8 个比特,多出来(8-6)/6 = 1/3 = 33.33%
    3dwelcome
        21
    3dwelcome  
       2022-04-16 00:52:41 +08:00   1
    说出来你们可能不信,base64 增大的那 33%,只要用目前较强力的压缩算法,比如 7z ,又可以把增大的部分给压回去。

    所以 base64+7z, 可能最终对比原图 JPG 大小,也就大个 5%。
    IvanLi127
        22
    IvanLi127  
       2022-04-16 01:12:40 +08:00 via Android
    还不趁机加价加工期
    sneezry
        23
    sneezry  
       2022-04-16 03:08:07 +08:00
    这都是什么可爱客户
    Quarter
        24
    Quarter  
       2022-04-16 08:21:41 +08:00 via iPhone
    mongo ?
    play78
        25
    play78  
       2022-04-16 08:40:44 +08:00
    这种方式有个客户刚好用上,最后问,为什么每次请求都那么慢。
    是因为普通的文件服务器,图片能在浏览器缓存,而数据库查询出来的图片,做缓存很麻烦,要写代码做。
    gam2046
        26
    gam2046  
       2022-04-16 09:47:30 +08:00   1
    @3dwelcome #21 7z 以后还是 blob 数据,那么既然如此,为何还要走 base64 -> 7z 这条路,直接图片本身 blob 入库。最后结果是一样,而且这么兜了一圈以后,base64 浪费一遍 CPU 资源,zip/unzip 又费一次 CPU 。
    cheng6563
        27
    cheng6563  
       2022-04-16 12:40:21 +08:00
    存储体积会涨 36%,但是,内存占用可能会翻个好几倍
    Askiz
        28
    Askiz  
       2022-04-16 12:57:35 +08:00
    @aptx4689 这能做到吗?
    markgor
        29
    markgor  
       2022-04-16 13:13:25 +08:00
    之前有遇到过一个搞.NET PC 端的,他们就是把图片传入 sqlserver 的,但没有 base64 ,直接传 blob 。
    我觉得直接把图片传入数据库中好处是:不用理会路径。
    坏处是:当 sqlserver 为远程时容易把 sqlserver 的带宽打满导致响应不了其他请求。


    其实配置下静态目录和执行权限,安全系数不会比存数据库低吧,而且就算存数据库为什么要 base64 呢?
    markgor
        30
    markgor  
       2022-04-16 13:16:38 +08:00
    话说这让我联想起 9 年前,和客户吃饭时客户专门带上懂电脑的朋友,试探性的问了我一句如果被 DDOS 了怎么办。
    我那时候回复是只能硬抗,要么上设备清洗要么加大带宽。
    然后他似笑非笑的说为什么不把 DNS 改为 127.0.0.1
    当时我很无语,随后问他那拔网线不是更快......
    Cusmate
        31
    Cusmate  
       2022-04-16 13:48:23 +08:00
    @markgor 这位改 dns 解析思路异于常人,卖服务的怎么就没想到这个点子呢。
    aylmer
        32
    aylmer  
       2022-04-16 14:48:30 +08:00
    直接上 oss 就解决的事,为什么要弄得这么麻烦呢
    en20
        33
    en20  
       2022-04-16 15:02:45 +08:00
    经典客户不懂装懂,你还是顺着他意思吧
    wupher
        34
    wupher  
       2022-04-16 17:28:25 +08:00   1
    他愿意为此掏钱就照做吧,不过建议明确注明此项技术方案是甲方要求,由此引发的相关问题不担责即可。
    marcojbk
        35
    marcojbk  
       2022-04-16 22:02:41 +08:00 via iPhone
    这不是好事吗,硬件要求又提高不少,买硬件的回扣你能多挣不少呢
    caisanli
        36
    caisanli  
       2022-04-17 08:41:46 +08:00 via iPhone
    我以前搞过一次 做一个新闻页 需要上传图片 领导不给文件服务资源 我就把图片转 base64 存数据库
    mutalisk
        37
    mutalisk  
       2022-04-17 11:29:34 +08:00
    @3dwelcome 压回去不又变成二进制流了么,很多都是不可见字符。本来做 base64 的目的不就是都是可见的字符么,便于 json 传输或者终端打印。既然要压,那干嘛不直接用原来的图片字节流呢。
    PopRain
        38
    PopRain  
       2022-04-17 15:16:29 +08:00
    @Cusmate 他可能认为攻击是基于域名而不是 IP 地址,改一下让他们自己攻击自己
    shanyue
        39
    shanyue  
       2022-04-17 20:17:08 +08:00   1
    33%,可以根据这个工具 https://devtool.tech/base64 ,看一下编码的过程,为什么是 33% 一目了然。
    debuggeeker
        40
    debuggeeker  
       2022-04-18 09:33:16 +08:00
    其实如果不是需要原图的话,可以保存 2 份,保存一次原图,制作一次采样图片,也保存到 oss 中,这种图片肯定不放数据库的,都是第三方储存桶。客户需要图片,就把图片地址丢给他,原图和采样都给,然他自己拿。采样工具可以 GitHub 看 Luban
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2249 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 01:19 PVG 09:19 LAX 18:19 JFK 21:19
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86