当前位置: 首页 > article >正文

【Python/C++ 图片与Base64互转:原理详解+Python/C++双语言实战】

文章目录图片与Base64互转原理详解Python/C双语言实战前言一、为什么图片转换优先选Base64二、Base64编码核心特点三、Python实现图片与Base64互转依赖说明完整代码使用说明四、C实现图片与Base64互转实现说明完整代码编译运行五、适用场景与注意事项推荐场景不推荐场景六、总结图片与Base64互转原理详解Python/C双语言实战前言在接口传输、前端内嵌、配置存储等场景中图片转Base64是最常用的二进制文本化方案。本文详细说明Base64的选型原因、核心特点并提供Python极简实现与C无依赖完整实现可直接复制使用。一、为什么图片转换优先选Base64纯文本兼容适配JSON/HTTP/配置文件二进制图片含不可见字符与0x00直接传输易截断乱码Base64仅用A-Z、a-z、0-9、、/、可安全嵌入任何文本环境。无额外依赖全语言原生支持Python、C、Java、JS等均内置编解码接口无需第三方库接入成本极低。体积膨胀可控平衡性能编码后体积仅增约1/3远小于十六进制适合小图标、二维码、接口小文件传输。生态成熟行业标准方案MIME邮件、DataURL、Web接口通用约定兼容性与稳定性经过长期验证。二、Base64编码核心特点编码规则3字节(24bit) → 4个6bit单元 → 映射为4个Base64字符。填充规则长度非3的倍数时用补齐至4的整数倍。字符集64个可打印ASCII字符无特殊转义风险。本质属性编码非加密仅做格式转换不提供安全保护。体积特性编码后体积≈原文件×1.33。三、Python实现图片与Base64互转依赖说明使用内置base64模块无需安装第三方包。完整代码importbase64defimage_to_base64(image_path:str)-str:图片转Base64字符串withopen(image_path,rb)asf:bytes_dataf.read()base64_strbase64.b64encode(bytes_data).decode(utf-8)returnbase64_strdefbase64_to_image(base64_str:str,save_path:str)-None:Base64字符串保存为图片bytes_database64.b64decode(base64_str)withopen(save_path,wb)asf:f.write(bytes_data)if__name____main__:# 测试图片转Base64base64_dataimage_to_base64(test.jpg)print(Base64编码完成)# 测试Base64转图片base64_to_image(base64_data,output.jpg)print(图片解码保存完成)使用说明传入图片路径返回标准Base64字符串。解码时直接写入文件支持PNG/JPG/BMP等格式。可拼接data:image/png;base64,用于前端DataURL显示。四、C实现图片与Base64互转实现说明无第三方依赖纯STL实现编解码支持Windows/Linux跨平台编译。完整代码#includeiostream#includefstream#includestring#includevectorusingnamespacestd;// Base64 编码表conststring base64_charsABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789/;// 判断是否为Base64字符inlineboolis_base64(unsignedcharc){return(isalnum(c)||(c)||(c/));}// Base64 编码stringbase64_encode(constunsignedchar*bytes_to_encode,size_t in_len){string ret;inti0,j0;unsignedcharchar_array_3[3],char_array_4[4];while(in_len--){char_array_3[i]*(bytes_to_encode);if(i3){char_array_4[0](char_array_3[0]0xfc)2;char_array_4[1]((char_array_3[0]0x03)4)((char_array_3[1]0xf0)4);char_array_4[2]((char_array_3[1]0x0f)2)((char_array_3[2]0xc0)6);char_array_4[3]char_array_3[2]0x3f;for(i0;i4;i)retbase64_chars[char_array_4[i]];i0;}}if(i){for(ji;j3;j)char_array_3[j]\0;char_array_4[0](char_array_3[0]0xfc)2;char_array_4[1]((char_array_3[0]0x03)4)((char_array_3[1]0xf0)4);char_array_4[2]((char_array_3[1]0x0f)2)((char_array_3[2]0xc0)6);for(j0;ji1;j)retbase64_chars[char_array_4[j]];while(i3)ret;}returnret;}// Base64 解码stringbase64_decode(conststringencoded_string){size_t in_lenencoded_string.size();size_t i0,j0,in_0;unsignedcharchar_array_4[4],char_array_3[3];string ret;while(in_len--(encoded_string[in_]!)is_base64(encoded_string[in_])){char_array_4[i]encoded_string[in_];in_;if(i4){for(i0;i4;i)char_array_4[i]base64_chars.find(char_array_4[i]);char_array_3[0](char_array_4[0]2)((char_array_4[1]0x30)4);char_array_3[1]((char_array_4[1]0x0f)4)((char_array_4[2]0x3c)2);char_array_3[2]((char_array_4[2]0x03)6)char_array_4[3];for(i0;i3;i)retchar_array_3[i];i0;}}if(i){for(ji;j4;j)char_array_4[j]0;for(j0;j4;j)char_array_4[j]base64_chars.find(char_array_4[j]);char_array_3[0](char_array_4[0]2)((char_array_4[1]0x30)4);char_array_3[1]((char_array_4[1]0x0f)4)((char_array_4[2]0x3c)2);for(j0;ji-1;j)retchar_array_3[j];}returnret;}// 读取文件为二进制vectorunsignedcharread_file(conststringpath){ifstreamfs(path,ios::binary|ios::ate);if(!fs)return{};size_t sizefs.tellg();fs.seekg(0);vectorunsignedcharbuf(size);fs.read((char*)buf.data(),size);returnbuf;}// 写入二进制文件voidwrite_file(conststringpath,conststringdata){ofstreamfs(path,ios::binary);fs.write(data.data(),data.size());}intmain(){// 图片转Base64autoimg_bufread_file(test.jpg);string b64base64_encode(img_buf.data(),img_buf.size());coutBase64 encode successendl;// Base64转图片string img_database64_decode(b64);write_file(output_cpp.jpg,img_data);coutBase64 decode save successendl;return0;}编译运行g base64.cpp-obase64_tool ./base64_tool五、适用场景与注意事项推荐场景接口传输小图片、验证码、二维码前端DataURL内嵌小图标配置文件存储小型二进制资源不推荐场景大于100KB的图片体积膨胀、解析慢高频传输大图建议用文件上传URL安全敏感场景Base64可直接解码六、总结Base64是二进制→文本的通用标准兼容性与易用性最优。编码规则为3字节转4字符用填充体积增大约1/3。Python一行核心编码C纯STL跨平台实现生产环境可直接复用。小文件用Base64更简洁大文件优先文件存储与URL传输。

相关文章:

【Python/C++ 图片与Base64互转:原理详解+Python/C++双语言实战】

文章目录图片与Base64互转:原理详解Python/C双语言实战前言一、为什么图片转换优先选Base64?二、Base64编码核心特点三、Python实现图片与Base64互转依赖说明完整代码使用说明四、C实现图片与Base64互转实现说明完整代码编译运行五、适用场景与注意事项推…...

保姆级教程:在Windows 10上从零配置KataGo围棋AI(附显卡驱动避坑指南)

保姆级教程:在Windows 10上从零配置KataGo围棋AI(附显卡驱动避坑指南) 围棋作为一项古老的智力运动,如今在人工智能技术的加持下焕发出新的活力。KataGo作为当前最强大的开源围棋AI之一,以其精准的棋力评估和灵活的配…...

sqlite3,一个轻量级的 Python 库!

【sqlite3,一个轻量级的 Python 库!】在日常开发与生活中,我们经常需要存储小型数据:本地工具的配置信息、个人记账数据、桌面软件的用户记录、小程序缓存数据、爬虫临时数据等。这类场景不需要 MySQL、PostgreSQL 这类重型数据库…...

WarcraftHelper:魔兽争霸3现代化兼容性解决方案技术解析

WarcraftHelper:魔兽争霸3现代化兼容性解决方案技术解析 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper是一款针对经典RTS…...

别再猜了!一文讲透海康、大华等工业相机MAC地址的编码规则与设备识别原理

工业相机MAC地址解码:从硬件标识到智能产线的设备管理艺术 在自动化产线的钢铁丛林中,工业相机如同敏锐的视觉神经,而MAC地址则是它们的唯一身份证。当数百台海康、大华相机在千兆以太网上同时闪烁数据灯时,工程师们面对的不仅是一…...

如何用Video-subtitle-extractor本地提取87种语言视频硬字幕:终极完整指南

如何用Video-subtitle-extractor本地提取87种语言视频硬字幕:终极完整指南 【免费下载链接】video-subtitle-extractor 视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字…...

从模块复用角度看设计:手把手教你用已有的3-8译码器IP核,快速搭建一个全减器

模块化设计实战:用3-8译码器IP核快速构建全减器 在FPGA和ASIC开发中,模块复用是提升开发效率的关键策略。想象一下,你手头有一个经过充分验证的3-8译码器IP核——可能是公司内部库中的标准模块,或是上个项目留下的可靠代码。本文将…...

Xinference-v1.17.1 LaTeX科研助手:论文写作与公式识别一体化方案

Xinference-v1.17.1 LaTeX科研助手:论文写作与公式识别一体化方案 科研工作者每天都要面对大量的论文写作和公式编辑工作,传统方式既耗时又容易出错。本文将介绍如何用Xinference-v1.17.1构建智能LaTeX科研助手,让AI帮你完成从文献处理到公式…...

大麦网终极抢票指南:Python自动化脚本告别手速烦恼

大麦网终极抢票指南:Python自动化脚本告别手速烦恼 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 还在为抢不到心仪的演唱会门票而烦恼吗?每次开票瞬间就被秒光&#xff…...

大模型学习-python基础Day9

一.模块与包模块是包含Python代码的文件,通常以.py为扩展名。模块可以包含函数、类、变量或可执行代码,用于将相关功能组织在一起,便于代码复用和维护。模块的作用代码复用:将常用功能封装为模块,避免重复编写相同代码…...

Face Analysis WebUI新手指南:如何准确分析人脸年龄、性别和头部姿态

Face Analysis WebUI新手指南:如何准确分析人脸年龄、性别和头部姿态 1. 引言:人脸分析的实际价值 想象一下,你正在整理家庭相册,想知道照片中每个人的年龄;或者你运营着一个社交媒体平台,需要分析用户头…...

搞定微信小程序云开发`cloud.callFunction`报错:从`-501000`到成功获取`openid`的保姆级避坑指南

微信小程序云开发实战:从-501000报错到稳定获取openid的完整解决方案 第一次接触微信小程序云开发时,很多人都会被cloud.callFunction报错-501000搞得焦头烂额。这个看似简单的错误代码背后,往往隐藏着从环境配置到代码调用的系统性认知偏差。…...

一台电脑变游戏派对:Nucleus Co-Op让你和好友共享屏幕乐趣

一台电脑变游戏派对:Nucleus Co-Op让你和好友共享屏幕乐趣 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 你是否曾梦想过和朋友一起坐…...

从零到壹嵌入式Linux编程实战教程课:第6课 嵌入式C语言进阶(适配实战)模块一:基础入门

文章目录一、课程目标二、嵌入式C语言基础回顾与实战适配1. C语言与嵌入式开发的关联2. 基本程序结构三、核心基础:数据类型与变量1. 嵌入式常用数据类型2. 变量定义与初始化四、运算符与表达式1. 常用运算符(实战高频)2. 表达式优先级五、分…...

如何用Driver Store Explorer清理Windows驱动垃圾,轻松释放20GB磁盘空间

如何用Driver Store Explorer清理Windows驱动垃圾,轻松释放20GB磁盘空间 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer Windows系统驱动程序管理一直是普通用户的痛点&…...

别再死记硬背了!用Python+Matplotlib可视化理解高斯定理(附代码)

用PythonMatplotlib动态可视化高斯定理:从抽象公式到直观理解 在物理学的课堂上,高斯定理常常是让学生们头疼的一个难点——那些抽象的电场线、闭合曲面和电通量概念,仅靠静态的教科书图示和数学推导很难真正理解。但如果我们换一种方式&…...

从零到壹嵌入式Linux编程实战教程课:第 5 课:Linux 基础命令与文件系统入门

第5课 Linux基础命令与文件系统入门 文章目录 第5课 Linux基础命令与文件系统入门一、课程目标二、Linux 命令基础1. 命令基本格式 三、目录与文件管理命令1. ls — 查看目录内容2. cd — 切换目录3. pwd — 显示当前路径4. mkdir — 创建目录5. rmdir — 删除空目录6. cp — 复…...

3分钟快速解密QQ音乐加密音频:qmc-decoder完整使用指南

3分钟快速解密QQ音乐加密音频:qmc-decoder完整使用指南 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否遇到过这样的困扰:从QQ音乐下载的歌曲…...

3个妙招解决FasterWhisperGUI在Windows系统安装后无法启动的难题

3个妙招解决FasterWhisperGUI在Windows系统安装后无法启动的难题 【免费下载链接】faster-whisper-GUI faster_whisper GUI with PySide6 项目地址: https://gitcode.com/gh_mirrors/fa/faster-whisper-GUI FasterWhisperGUI是一个基于PySide6开发的图形界面工具&#x…...

下午题_试题二

目录 一.题型 注意:需求分析、ER图(概念模型设计)、关系模式化(逻辑结构设计)三者的关系 二.目标分数 三.知识讲解 1.E-R图基本图形元素 ①实体 ②属性 ③联系(重要考点) 2.关系模式&a…...

7种字重思源宋体:免费开源中文字体的完整使用指南

7种字重思源宋体:免费开源中文字体的完整使用指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在寻找高质量且完全免费的中文字体解决方案吗?Source Han S…...

VM如何将扩展容量减小

原来:由于硬盘磁盘容量拓展时候分配了300GB,导致虚拟机内部未分配内存161GB。现在:硬盘磁盘容量拓展缩减至144GB,虚拟机内部保留一些未分配内存为E盘扩容。那么如何将过多的未分配内存进行缩减呢:1.找到vmdk文件目录&a…...

保姆级教程:在Ubuntu 20.04上用Docker搞定NVIDIA TAO Toolkit环境搭建(含Jupyter配置)

从零搭建NVIDIA TAO Toolkit开发环境:Ubuntu 20.04Docker全流程指南 第一次接触NVIDIA TAO Toolkit时,最让人头疼的往往不是模型训练本身,而是环境配置这个"前置关卡"。作为专为迁移学习优化的工具链,TAO虽然大幅降低了…...

ABAP 又迎来一个顶层关键字,聊透 ABAP CE 2602 里的 MERGE

在 ABAP 的世界里,新增一个真正意义上的顶层关键字,属于那种很多开发者职业生涯里都碰不上几次的事情。上一次足够有存在感的例子,还得追到 ABAP SQL 在 7.51 里引入 WITH,用来支持 Common Table Expression。到了 ABAP CE 2602,这件事又发生了一次,这次轮到的是 MERGE。…...

不止于调试:挖掘J-Link Commander隐藏命令,玩转芯片信息读取与安全启动

深入探索J-Link Commander:解锁芯片信息读取与安全启动的高级技巧 当大多数开发者将J-Link视为简单的调试工具时,它实际上隐藏着令人惊讶的硬件交互能力。想象一下,你不仅能调试代码,还能直接与芯片内部的各种寄存器对话&#xff…...

从 Hello Excel 走进 SAP iRPA,记录一次最朴素也最重要的自动化起步

把时间拨回 2020 年,很多人刚接触这条产品线时,看到的名字还是 SAP Intelligent RPA。后面这条路线逐步并入了 SAP Build Process Automation 的产品叙事里,所以今天再回头看当年的 Desktop Studio,会更容易理解它为什么既有一点厚重感,又带着很强的工程化味道。SAP 官方后…...

避开这些坑!TWEN-ASR ONE的GPIO、ADC、PWM实战避坑指南(基于V1.0开发板)

TWEN-ASR ONE硬件接口深度优化:GPIO防抖、ADC校准与PWM精调实战 当开发者从TWEN-ASR ONE的基础功能演示进阶到实际项目开发时,往往会遇到一些教科书上不曾提及的"暗坑"。这些看似微小的细节问题,轻则导致功能异常,重则影…...

3大核心技术揭秘:如何用DouyinLiveRecorder智能提取直播文字信息

3大核心技术揭秘:如何用DouyinLiveRecorder智能提取直播文字信息 【免费下载链接】DouyinLiveRecorder 可循环值守和多人录制的直播录制软件,支持抖音、TikTok、Youtube、快手、虎牙、斗鱼、B站、小红书、pandatv、sooplive、flextv、popkontv、twitcast…...

别再只用欧氏距离了!用Python手把手教你实现DTW算法,搞定语音识别中的时间对齐难题

突破时间维度限制:用Python实战DTW算法解决语音对齐难题 当你在开发语音识别系统时,是否遇到过这样的困扰——同一句话被不同用户以不同语速说出,导致传统距离计算方法完全失效?想象一下这样的场景:用户A快速说出"…...

Rhino 7 + Grasshopper 实战:用‘几何管道’和‘命名视图’提升BIM/参数化建模效率

Rhino 7 Grasshopper 实战:用‘几何管道’和‘命名视图’提升BIM/参数化建模效率 在建筑与工业设计领域,参数化建模已经从先锋技术转变为行业标配工具。当设计迭代以小时甚至分钟为单位进行时,传统建模软件的手动操作模式显得力不从心。Rhi…...