Carbon 源码截图美化指南:基于 carbon 仓库创建并分享漂亮的源代码图片
Carbon 源码截图美化指南基于 carbon 仓库创建并分享漂亮的源代码图片【免费下载链接】carbon:black_heart: Create and share beautiful images of your source code项目地址: https://gitcode.com/gh_mirrors/ca/carbon本篇技术指南围绕开源项目 Carbon仓库gh_mirrors/ca/carbon展开系统讲解如何将源代码转换为具备专业美感的图片从多种方式导入代码、按需定制语法主题与排版、再到保存、嵌入、发布与下载导出的完整工作流。读完本文你将掌握 Carbon 的完整使用链路并能结合源码理解其底层实现机制将美观的代码图片无缝嵌入到博客、文档与社交媒体中。Carbon 是什么Carbon 是一个开源的 Web 应用项目主页在carbon.now.sh当前仓库版本为 4.9.10其使命正如 package.json 的描述Create and share beautiful images of your source code——创建并分享漂亮的源代码图片。最初的设计动机源于开发者社区中大量出现在 Twitter 等平台的代码截图代码本身往往很出色但在美观度上仍有很大提升空间。Carbon 正是为了解决这个痛点而生它让任何人都可以轻松地把一段代码变成视觉上赏心悦目的分享素材。项目核心代码位于 components/Carbon.js代码渲染与编辑器核心、lib/constants.js主题、字体、语言与默认配置与 lib/api.js前后端 API 交互层。核心特性根据 README.md 的 Features 章节Carbon 提供三大核心能力Customization高度可定制可自定义图片的语法高亮主题syntax theme、字体样式font style、背景、窗口主题、内边距、阴影等视觉元素Share quickly快速分享一键保存图片或生成分享链接Save snippets保存片段创建账号后可将代码片段保存到云端分享出去的片段会在 Twitter、Slack 等平台上自动展开unfurl为图片预览同时保留源码访问入口。导入代码的三种方式按照 README.md 的 Usage 章节将代码导入 Carbon 有以下几种途径直接把文件拖拽到编辑器上Drop a file onto the editor在 URL 中追加一个 GitHub Gist ID例如carbon.now.sh/gist_idCarbon 会自动拉取该 Gist 的内容直接在编辑器里开始输入Or just start typing!这是最朴素也最常用的方式。从源码看编辑器基于 CodeMirror 构建见 components/Carbon.js 中react-codemirror2的Controlled组件支持代码自动检测语言、行号、自动闭合括号lib/custom/autoCloseBrackets.js等能力。语言检测在auto模式下借助highlight.js的highlightAuto完成再从LANGUAGE_MODE_HASH/LANGUAGE_NAME_HASH/LANGUAGE_MIME_HASH三个索引中查找对应语言模式lib/constants.js。图片定制详解代码导入后你可以通过顶部的设置面板调整大量视觉参数。这些参数全部在 lib/constants.js 的DEFAULT_SETTINGS中定义理解它们就掌握了定制的全部维度配置项默认值说明paddingVertical/paddingHorizontal56px图片内边距控制代码四周留白backgroundColorrgba(171, 184, 195, 1)纯色背景模式下的背景色backgroundModecolor背景模式可切换为image使用背景图片dropShadowtrue是否显示阴影dropShadowOffsetY20px阴影垂直偏移dropShadowBlurRadius68px阴影模糊半径themeseti语法高亮主题windowThemenone窗口主题如 macOS 风格窗口装饰windowControlstrue是否显示窗口控制按钮红黄绿三键languageauto代码语言默认自动检测fontFamilyHack等宽字体fontSize14px字号lineHeight133%行高lineNumbersfalse是否显示行号firstLineNumber1起始行号exportSize2x导出倍率widthAdjustmenttrue是否自动调整宽度watermarkfalse是否显示 Carbon 水印squaredImagefalse是否输出正方形图片hiddenCharactersfalse是否显示隐藏字符空格、制表符等语法主题ThemeCarbon 内置了大量知名语法高亮主题全部定义在 lib/constants.js 的THEMES数组中包括3024 Night、A11y Dark、Blackboard、Base 16、Cobalt、Dracula、Duotone、Hopscotch、Lucario、Material、Monokai、Night Owl、Nord、Oceanic Next、One Light、One Dark、Panda、Paraiso、Seti、Shades of Purple、Solarized、SynthWave 84、Twilight、Verminal、VSCode、Yeti、Zenburn等。每个主题以highlights对象定义各语法元素关键字、字符串、注释、数字、运算符等的颜色例如{ id: monokai, name: Monokai, highlights: { background: #272822, text: #f8f8f2, keyword: #f92672, string: #e6db74, comment: #75715e, number: #ae81ff, // ... }, }主题通过THEMES_HASH toHash(THEMES)生成索引默认主题为seti。浏览器端在 components/Themes/GlobalHighlights.js 中将这些高亮色注入页面样式。字体与排版FONTS常量列出了全部可选的等宽字体Anonymous Pro、Cascadia Code、Droid Sans Mono、Fantasque Sans Mono、Fira Code、Hack、IBM Plex Mono、Inconsolata、JetBrains Mono、Monoid、Source Code Pro、Space Mono、Ubuntu Mono。代码渲染时开启font-variant-ligatures: contextual与font-feature-settings: calt 1见 components/Carbon.js以支持 Fira Code 等字体的连字效果。背景与预设背景既可以是纯色也可以切换为图片模式backgroundMode: image后者可从 Unsplash 随机拉取图片lib/api.js 中的unsplash.random()与unsplash.download(id)或使用 components/RandomImage.js、components/BackgroundSelect.js 自行选择。为了快速出图Carbon 还内置了 8 套一键预设DEFAULT_PRESETS见 lib/constants.js每套组合了不同的主题、背景色与字体例如默认预设preset:4Seti 主题 灰色背景 阴影preset:7Material 主题 Fira Code 蓝色背景rgba(74,144,226,1)preset:8Blackboard 主题 黄色背景rgba(248,231,28,1)preset:9Zenburn 主题 黑白窗口windowTheme: bwpreset:0Verminal 主题 紫色背景rgba(121,72,185,1)。预设的预览图标存放于 public/static/presets/。窗口主题方面windowTheme支持none、sharp无圆角、bw黑白边框等变体具体样式同样定义在 components/Carbon.js 的style jsx中。导出与分享完成定制后就可以把作品分享出去了。README 的 Exporting Sharing 章节给出了四种主流分享路径。创建保存的片段Saved Snippet分享一个已保存的片段时Twitter、Slack 等平台会自动将链接展开为图片预览——读者第一眼看到的就是你的作品点击链接又能直接访问源码甚至可以沿着链接回来继续编辑更新。创建保存片段的三个步骤点击 Sign in/Sign up 按钮登录正常编辑代码——片段会自动保存无需手动点击保存复制浏览器地址栏中的 URL分享出去即可。从源码看这一流程由 lib/api.js 支撑api.snippet.update对更新做了 1 秒防抖debounce(updateSnippet, ms(1s))createSnippet则做了 5 秒防抖listSnippets需要先通过 Firebaseauth().currentUser.getIdToken()获取授权令牌再请求服务端。保存的片段通过pages/[id].js以carbon.now.sh/id形式访问getServerSideProps中path.length 19 path.indexOf(.) 0判定是否为片段 ID分享出去的 URL 即片段 ID 对应的页面地址。嵌入片段Embed这是官方推荐的、在自己的网站或博客中分享 Carbon 图片的方式——读者甚至可以直接点击按钮复制其中的代码。任何 Carbon 片段都可以通过carbon.now.sh/embedURL 直接嵌入界面的 Copy Menu 能快速复制正确的 iFrame 片段或复制用于 Medium 等平台的编码 URL也可以嵌入已保存的片段或 GitHub Gistcarbon.now.sh/embed/:id。嵌入页面的实现位于 pages/embed/index.js 与 pages/embed/[id].js。嵌入页以readOnly模式渲染代码保留复制按钮并通过window.top.postMessage向宿主页面发送iframe.resize消息实现自适应高度同时把代码变更实时同步给父页面{ id: carbon:..., code }。嵌入页面会加载对应的主题 CSSpublic/static/themes/ 中的night-owl.min.css、nord.min.css、one-dark.min.css、one-light.min.css、synthwave-84.min.css、verminal.min.css并为高亮主题注入全局样式。使用 Tweet 按钮Tweet 按钮不仅会把图片分享到 Twitter还会正确编码图片的alt文本确保图片对辅助技术屏幕阅读器等友好、可访问。若想手动发布图片README 也提示了如何为 Twitter 图片添加描述。其底层逻辑在 lib/api.js 的tweet()函数中将图片 data URL 的 base64 部分 POST 到/api/twitter服务端返回图片 URL 后拼接Created with carbon_app文本并打开twitter.com/intent/tweet窗口同时做了 5 秒防抖并针对 Twitter API 的 420 限流码给出友好提示。直接下载图片Carbon 支持将图片下载为PNG和SVG两种格式此外还有两种便捷用法点击Export → Open直接在浏览器中打开图片通过Copy → Image把图片直接复制到系统剪贴板。导出面板的实现见 components/ExportMenu.js支持自定义文件名默认carbon、选择导出倍率EXPORT_SIZES定义了1x、2x、4x默认2x并提供两个快捷键盘操作——⌘-⇧-e快速导出 PNGblob、⌘-⇧-s导出 SVG。图片生成基于 lib/dom-to-image.js 将 DOM 渲染为位图/SVG导出时会把用于占位的背景网格等元素eliminateOnRender从最终图片中剔除。桌面离线安装PWACarbon 是一个支持离线使用的渐进式 Web 应用PWA。在 Chrome 等支持 PWA 的浏览器中可以这样安装到桌面访问carbon.now.sh点击浏览器的设置菜单选择 Install Carbon...安装 Carbon。安装后即可离线创建与导出代码图片。这一能力依赖 next.config.js 中的next-pwa配置与 public/manifest.json 清单文件。从源码理解核心渲染链路从源码结构看Carbon 的整体渲染流程可以概括为代码输入 → CodeMirror 编辑器components/Carbon.js → 语言检测/高亮highlight.js codemirror modes → 主题/字体/背景等设置合并DEFAULT_SETTINGS → 导出容器 #export-containerdom-to-image.js → PNG / SVG / 剪贴板 / 分享值得注意的实现细节配置合并{ ...DEFAULT_SETTINGS, ...this.props.config }传入的配置会覆盖默认值因此 URL 中的查询参数可以精确控制渲染结果语言加载useModeLoader会按需动态加载 CodeMirror 的几十种语言模式其中 Apache、Elixir、GraphQL、Nim、RISC-V、Solidity 等属于仓库自研模式位于 lib/custom/modes/行号与选中行点击行号gutter可以高亮/淡化指定代码行配合Shift可以成组选择最终也会反映在导出的图片中非常适合制作重点讲解某几行的教学配图见 components/Carbon.js 的useSelectedLines。社区生态README 的 Community 章节整理了社区围绕 Carbon 构建的丰富生态编辑器插件IntelliJ IDEA、Atom、VS Code、Sublime Text 3、Vim/Neovim、Emacs、Xcode 等主流编辑器均有carbon-now-sh类插件可在编辑器内一键把选中代码送入 Carbon工具carbon-now-cli命令行工具支持交互模式与选择性高亮nef可从 Xcode Playground 批量导出Telegram 机器人carbonshbot可直接把代码片段或 Gist URL 转换为 Carbon 图片R语言用户可用carbonate迭代调整图片美学参数Slack 用户可通过/carbon命令直接在 Slack 中使用引用计算机科学教材《CS 101 - An Introduction to Computational Thinking》在教学中引用了 Carbon。这些生态项目本身不在本仓库内但说明 Carbon 的分享格式与链接协议已被广泛集成。本地开发与运行如果你希望在自己的环境中运行本仓库package.json 中提供了完整的脚本npm install # 安装依赖Node 12 npm run dev # 启动 Next.js 开发服务器 npm run build # 生产构建 npm start # 启动生产服务器 npm run lint # ESLint 检查 npm run test:e2e # 运行 Cypress 端到端测试配置见 cypress/config.json npm run cy:open # 交互式打开 Cypress 测试面板端到端测试位于 cypress/integration/覆盖了基本编辑流程basic.spec.js、背景色定制background-color.spec.js、嵌入功能embed.spec.js、Gist 导入gist.spec.js、localStorage 持久化localStorage.spec.js与视觉回归测试visual-testing.spec.js等可作为理解各功能模块行为的参考。结语从导入代码、精细化定制视觉样式到保存片段、嵌入网页、发推与导出 PNG/SVGCarbon 提供了一条完整且流畅的代码 → 图片 → 分享工作流。本文不仅覆盖了 README.md 的全部使用要点还从 lib/constants.js、components/Carbon.js、lib/api.js 等核心源码出发揭示了主题系统、自动保存、嵌入通信与导出渲染等底层实现。无论你是想快速产出美观的代码配图还是希望在自己的项目中复用 Carbon 的渲染架构都可以直接深入本仓库继续探索。【免费下载链接】carbon:black_heart: Create and share beautiful images of your source code项目地址: https://gitcode.com/gh_mirrors/ca/carbon创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

ESPBO算法:基于学生心理优化的增强策略与应用

ESPBO算法:基于学生心理优化的增强策略与应用

1. ESPBO算法核心思想解析学生心理优化算法(Student Psychology Based Optimization, SPBO)是一种基于群体智能的元启发式算法,其核心思想是通过模拟不同学习水平学生在教育环境中的行为差异来实现优化搜索。在传统SPBO中,算法将种群个体划分为四类角色&…

2026/9/19 6:09:47 阅读更多 →
Unity Mod开发实战:用BepInEx与Visual Studio构建你的第一个插件

Unity Mod开发实战:用BepInEx与Visual Studio构建你的第一个插件

如果你和我一样,玩《英灵神殿》时折腾过MOD,又或者翻遍了某个Unity游戏的模组论坛,发现想实现的小功能根本没有现成成品,那这篇BepInEx插件开发实战就是给你准备的。我会用Visual Studio 2022从零跑通一个能加载、能输出日志的Uni…

2026/9/19 6:09:47 阅读更多 →
PyCharm Community 安装配置全攻略:从零跑通第一个 Python 项目

PyCharm Community 安装配置全攻略:从零跑通第一个 Python 项目

如果你是刚接触 Python,又不想一上来就面对一堆命令行配置,那 PyCharm Community(社区版)大概率是你最省心的选择。这个由 JetBrains 官方提供的免费版本,覆盖 Windows、macOS、Linux 三大平台,日常写脚本、…

2026/9/19 6:08:47 阅读更多 →

最新新闻

MCU外设驱动自研还是复用?从HAL/LL到寄存器判断

MCU外设驱动自研还是复用?从HAL/LL到寄存器判断

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 6:51:03 阅读更多 →
语音AI智能体如何从 30 秒演示走向凌晨无人值守

语音AI智能体如何从 30 秒演示走向凌晨无人值守

语音AI智能体如何从 30 秒演示走向凌晨无人值守 【免费下载链接】awesome-llm-apps 100 AI Agents, Agent Skills and RAG Apps - Free and Open Source. 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-llm-apps 如果你在做语音AI智能体——博物馆导览&…

2026/9/19 6:51:03 阅读更多 →
麒麟V10 ARM离线部署MySQL 8.0避坑指南:依赖、systemd与自启

麒麟V10 ARM离线部署MySQL 8.0避坑指南:依赖、systemd与自启

1. 为什么ARM架构的离线部署值得单独写一篇避坑指南在x86服务器上装MySQL,绝大多数时候就是一条yum install mysql-server或者下载个rpm包rpm -ivh就完事了。但一旦环境换成银河麒麟V10 SP3 Lance版本的ARM服务器镜像,事情就完全不一样了。我最近刚在一个…

2026/9/19 6:51:03 阅读更多 →
基于LangGraph的智能资讯日报Agent:自动采集、摘要与推送

基于LangGraph的智能资讯日报Agent:自动采集、摘要与推送

我每天早晨最早做的事情之一,是花四十分钟快速扫一遍行业资讯。这个习惯坚持了快两年,直到最近终于忍无可忍——信息来源实在太多了,今天想读的东西没读完,明天又堆上来,光“筛选哪些值得读”这个动作,每天…

2026/9/19 6:51:03 阅读更多 →
Bilibili-Evolved「隐藏首页顶部横幅」组件源码解析:样式机制、多版本兼容与暗色模式适配

Bilibili-Evolved「隐藏首页顶部横幅」组件源码解析:样式机制、多版本兼容与暗色模式适配

Bilibili-Evolved「隐藏首页顶部横幅」组件源码解析:样式机制、多版本兼容与暗色模式适配 【免费下载链接】Bilibili-Evolved 强大的哔哩哔哩增强脚本 项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved 本文以 Bilibili-Evolved 增强脚本仓库中…

2026/9/19 6:51:03 阅读更多 →
Google ADK Kotlin 智能体开发实战:工具、会话与多Agent编排

Google ADK Kotlin 智能体开发实战:工具、会话与多Agent编排

1. 为什么 ADK 要专门支持 Kotlin:先搞清楚这东西到底解决什么问题Kotlin 后端圈子里最近有件挺值得琢磨的事——Google 把自家的 Agent Development Kit(ADK)搬到了 JVM 生态上,而 Kotlin 因为和 Java 的无缝互操作,等…

2026/9/19 6:50:02 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介:面向机器学习、深度学习与数据建模学习者的一份完整研究文献,聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本,系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程,展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型,在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志,发现loss从凌晨两点就开始往上爬,一路从0.8涨到1.35,整整六个小时没人发现。那六个小时的训练不仅白跑,还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/19 3:59:36 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/19 3:53:08 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/19 4:02:43 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →