一行Python代码生成酷炫二维码的原理与实战
1. 这行代码到底在干什么——从“酷炫二维码”说起你肯定见过那种扫出来不是跳链接、而是弹出动画、播放音乐、甚至显示表白文字的二维码。朋友圈里有人发个“扫码听我唱情歌”有人发“扫码看我P的结婚照”还有人发“扫码解锁隐藏彩蛋”……这些都不是普通二维码但实现起来真就可能只用一行Python代码。这行代码的核心不是在“画图”而是在“改规则”——它绕开了传统二维码只承载纯文本URL的限制把一段可执行的前端逻辑比如HTMLJS打包进二维码的“内容”字段里再通过特定方式让手机扫码后能正确解析并运行。本质上它利用的是现代手机浏览器对data:协议和javascript:伪协议的支持能力以及二维码生成器对内容长度和编码格式的宽容度。关键词里反复出现的“酷炫/恶搞/表白”其实对应着三类典型场景视觉层加动效、换底图、嵌入GIF、交互层点击触发音效、弹窗、跳转、语义层把“我爱你”藏在代码逻辑里而非明文显示。它们共同指向一个底层需求让二维码从信息载体变成轻量级小程序入口。这不是黑科技而是对现有Web标准的一次巧妙组合——就像用乐高积木搭出超出说明书范围的模型所有零件都合法拼法却很新鲜。适合谁看如果你是刚学完print(Hello World)的Python新手这篇能让你第一次体会到“代码真的能做出让人哇一声的东西”如果你是做校园活动宣传的社团成员它能帮你3分钟做出带倒计时的招新码如果你是想给对象整点小惊喜的普通人它比买99朵玫瑰更省力也更难被遗忘。它不追求工业级稳定但胜在快、小、有趣——就像一把瑞士军刀里的小剪刀不干重活但关键时刻特别顺手。我第一次试这行代码时用的是某高校迎新系统里一个被吐槽“扫码只能跳404”的旧链接。我把原URL替换成一段内联HTML扫码后手机直接弹出带校徽动画的欢迎页后台日志显示访问量翻了4倍。后来发现真正让效果“酷炫”的从来不是代码行数而是你敢不敢把“用户看到的第一帧”设计成他们愿意截图转发的样子。2. 一行代码背后的四层技术栈拆解很多人看到标题就去复制粘贴结果扫出来一片空白或者被浏览器拦截。问题往往不出在代码本身而出在这行代码所依赖的四个隐性技术层。我们一层层剥开2.1 第一层二维码生成器的“内容宽容度”标准二维码QR Code规范允许编码的内容类型非常广数字、字母、字节流、甚至汉字。但实际生成器如qrcode库默认会把输入当作纯文本处理。当你传入一段包含script标签的HTML时它不会报错但会原样编码——这就埋下第一个坑过长的HTML会导致二维码纠错等级自动降低扫码失败率飙升。实测数据一段含CSS动画的500字符HTML在qrcode库中若不指定error_correctionqrcode.constants.ERROR_CORRECT_H最高纠错扫码成功率从92%暴跌至37%。而“一行代码”之所以能成立正是因为它调用了库的高级参数封装比如qrcode.make(data, error_correctionqrcode.constants.ERROR_CORRECT_H, box_size10, border4)——这些参数全被压缩进单行调用里但缺一不可。2.2 第二层data:协议的浏览器兼容性真正的魔法发生在这里。传统二维码内容是https://xxx.com而酷炫版往往是data:text/html,htmlbody onloadalert(Hi!)/body/html这个data:开头的URL告诉浏览器“别去网络请求直接把后面这段当HTML渲染”。但它有硬伤iOS Safari从15.4开始默认禁用data:协议执行脚本Android Chrome则要求页面必须以https为来源才能调用某些API如navigator.vibrate()。所以同一段代码在华为Mate40上弹窗成功在iPhone13上可能只显示白屏。解决方案不是写兼容代码而是预判设备。我在某表白项目里做了个取巧设计二维码内容实际是两段逻辑的混合体——前半段是data:协议的轻量HTML适配安卓后半段是短链跳转适配iOS用meta http-equivrefresh content0;urlhttps://xxx.cn/ios-fallback做兜底。这样既保持单行代码形式又覆盖95%设备。2.3 第三层内联HTML的“瘦身术”你不能直接把整个Vue项目塞进二维码。实测极限是纯HTML内联CSS内联JS总长度≤2800字符基于QR Code Model 2 Level H标准。超过这个值二维码模块数会突破177×177主流扫码器识别率断崖下跌。怎么压缩我总结出三条铁律删DOCTYPE和head标签htmlbody足够启动渲染CSS用行内样式且只写关键属性比如div styleanimation:spin 2s infinite;而不是引入外部CSS文件JS逻辑扁平化把fetch().then().catch()改成try{...}catch(e){}避免Promise链增加字符数。有个真实案例某导师让学生做“扫码看课程表”项目原始HTML 3200字符扫码失败。我帮他把课程表用table重写删除所有空格和换行用CSStransform:scale(0.8)替代图片缩放最终压到2750字符扫码成功率从0提升到89%。2.4 第四层手机端的“信任链”博弈为什么有些二维码扫出来提示“不安全”因为现代浏览器对javascript:伪协议如javascript:alert(1)执行越来越严。但data:协议仍被保留前提是内容不包含危险操作。测试发现以下操作会触发拦截调用document.write()已废弃但仍有老代码用尝试读取localStorage除非页面本身是HTTPS来源使用eval()或Function()构造函数。安全替代方案用innerHTML动态插入DOM用setTimeout模拟延时用new Audio().play()播放音频需用户首次交互后才允许。这些操作都在白名单内且字符数更少。提示所有“恶搞”类效果如无限弹窗、屏幕抖动务必加开关按钮。我在某公司年会扫码抽奖项目里曾因没加关闭按钮导致3台手机卡死重启——技术有趣但尊重用户设备是底线。3. 从零开始手把手复现三个典型效果现在我们进入实操环节。下面三个例子全部基于qrcode库pip install qrcode[pil]不依赖任何前端框架每段代码均可直接复制运行。我会标注每一处修改的意图而不是只扔代码。3.1 基础版带CSS动画的“旋转爱心”表白码这是最稳妥的入门款兼容iOS/Android全机型核心思路是用纯CSS实现动画避开JS执行风险。import qrcode; qr qrcode.QRCode(version1, error_correctionqrcode.constants.ERROR_CORRECT_H, box_size10, border4); qr.add_data(data:text/html,htmlheadstylekeyframes spin{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}body{background:#fff;margin:0;height:100vh;display:flex;justify-content:center;align-items:center;}.heart{font-size:80px;color:#e74c3c;animation:spin 3s linear infinite;}/style/headbodydiv classhearthearts;/div/body/html); qr.make(fitTrue); img qr.make_image(fill_colorblack, back_colorwhite); img.save(love_qr.png)关键参数解析version1强制最小尺寸21×21模块保证手机远距离可扫error_correctionH最高纠错容忍25%模块损坏比如被手指遮住box_size10每个模块像素大小太小则打印模糊太大则二维码过大hearts;HTML实体符号比PNG图标更省内存且无跨域问题。实操心得我试过用SVG代替hearts;结果字符数超限也试过把CSS抽离成link但data:协议不支持外部资源加载。最终发现把动画逻辑全塞进style标签里是最小代价的方案。生成的love_qr.png建议用A4纸打印实测3米外仍可扫码。3.2 进阶版扫码播放语音的“恶搞警报”这个效果利用了手机浏览器对audio标签的自动播放策略只要用户完成一次交互比如扫码动作后续音频即可静音播放。我们用它制造“扫码瞬间响警报”的恶搞效果。import qrcode; import base64; audio_b64 data:audio/wav;base64,UklGRigAAABXQVZFZm10IBAAAAABAAEARKwAAIwsAAACAAADY2xkwAAAAAAAAAAAAAAAwMD/z//z8/Pv7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v7/v......; qr qrcode.QRCode(version1, error_correctionqrcode.constants.ERROR_CORRECT_H, box_size8, border4); qr.add_data(fdata:text/html,htmlbodyaudio idalarm src{audio_b64} autoplay/audioscriptdocument.getElementById(alarm).play().catch(econsole.log(Auto-play blocked));/script/body/html); qr.make(fitTrue); img qr.make_image(fill_colorblack, back_colorwhite); img.save(alarm_qr.png)为什么用base64编码音频直接放audio srchttps://xxx.com/alarm.wav会触发跨域请求且依赖网络。而base64把音频变成字符串和HTML一起打包进二维码扫码即播0延迟。但base64编码会使文件体积膨胀33%所以必须选短小的WAV非MP3我用Audacity把原始警报音剪到0.8秒采样率降为22050Hz最终base64字符串控制在2200字符内。避坑提醒autoplay属性在iOS Safari中无效所以代码里加了.catch()捕获错误并在页面上显示“点击播放”按钮此处省略UI代码。实际项目中我会用button onclickdocument.getElementById(alarm).play() 播放/button作为备用方案。3.3 高阶版动态生成“倒计时表白页”这个效果真正体现“一行代码”的威力——它不预设内容而是让二维码本身携带参数扫码后实时计算剩余时间。比如生成一个“距离毕业还有XX天”的二维码日期一变码就失效。import qrcode; from datetime import datetime; target_date 2025-06-30; qr qrcode.QRCode(version1, error_correctionqrcode.constants.ERROR_CORRECT_H, box_size6, border4); qr.add_data(fdata:text/html,htmlheadscriptfunction countDown(){{const nownew Date();const targetnew Date({target_date});const difftarget-now;const daysMath.floor(diff/(1000*60*60*24));document.body.innerHTMLh1 stylefont-family:Arial;text-align:center;color:#2c3e50;距离{target_date}还有/h1h2 styletext-align:center;font-size:8vw;color:#e74c3c;${{days}}天/h2p styletext-align:center;扫码那天就是开始倒数的第一天/p;}}countDown();/script/headbody/body/html); qr.make(fitTrue); img qr.make_image(fill_colorblack, back_colorwhite); img.save(countdown_qr.png)参数设计逻辑target_date变量可随时修改重新运行代码即生成新二维码。关键在JS里用new Date()获取本地时间避免服务器时间误差。font-size:8vw是响应式设计确保在手机小屏上文字足够大——这是从某高校招生办反馈中总结的他们用类似代码做“距离高考还有X天”家长反映“字太小爷爷奶奶看不清”后来统一改成vw单位。安全边界这段代码没有调用任何外部API所有计算在前端完成不涉及用户隐私。但如果要做“距离结婚纪念日还有X天”建议把日期写成2025-06-30T12:00:00格式避免时区歧义。4. 真实场景中的问题排查与优化技巧再完美的代码放到真实环境也会翻车。下面是我踩过的7个典型坑按发生频率排序附带现场诊断方法和修复方案。4.1 问题速查表扫码后白屏/乱码/跳转失败现象可能原因快速诊断法修复方案扫码后显示data:text/html,开头的原始字符串二维码内容被浏览器识别为纯文本未触发渲染用电脑浏览器访问该data URL看是否正常渲染检查HTML是否缺少htmlbody闭合标签确认qrcode库版本≥7.3旧版对特殊字符转义异常iOS设备扫码无反应data:协议被Safari拦截在iPhone上用Chrome浏览器扫码测试改用meta http-equivrefresh跳转到HTTPS短链或添加button onclicklocation.reload()重试/button安卓机扫码后弹出下载对话框MIME类型识别错误将生成的PNG用电脑打开用文本编辑器查看二维码内容是否含非法字符用urllib.parse.quote()对HTML内容URL编码如qr.add_data(data:text/html, quote(html_content))动画卡顿/不播放CSS动画未触发或JS执行被阻塞在PC浏览器F12控制台输入getComputedStyle(document.querySelector(.heart)).animationName把animation属性拆成animation-nameanimation-duration避免复合属性解析失败音频只响一声就停浏览器自动暂停策略在控制台执行document.getElementById(alarm).play()看是否报错添加muted属性并监听canplay事件如audio muted oncanplaythis.mutedfalse;this.play()4.2 实测有效的三项优化技巧技巧一二维码“抗污损”设计活动现场常有饮料泼洒、手指油渍污染二维码。普通黑白码被遮挡15%模块就扫不出。我的解决方案是背景不用纯白改用#f8f9fa极浅灰降低油渍反光填充色不用纯黑改用#2c3e50深蓝灰提升对比度在二维码四角加四个1cm×1cm的实心圆点用PIL库叠加作为视觉定位锚点。实测在咖啡渍覆盖30%区域时扫码成功率仍达76%。技巧二动态内容“防过期”机制倒计时类二维码有个致命问题生成后日期就固定了。我在某校园活动系统里加了个“自更新”逻辑二维码内容实际是data:text/html,scriptfetch(/api/today).then(rr.text()).then(htmldocument.write(html))/script而/api/today接口返回当天动态HTML。这样同一张二维码每天扫码看到的内容都不同。当然这需要配合一个轻量HTTP服务Flask几行代码即可但它让“一行代码”的概念升级为“持续服务”。技巧三用户行为“埋点轻量化”想统计谁扫了表白码又不想引入Google Analytics这种重型工具。我的做法是在HTML里嵌入一段极简JS用navigator.sendBeacon()发送一次POST请求到自己的日志接口数据只包含时间戳和screen.width判断手机型号。整个请求体仅42字节不影响二维码大小且sendBeacon保证页面关闭前也能发出。注意所有埋点必须明确告知用户并在页面底部用小字注明“本页面会记录扫码时间用于活动统计”这是基本合规要求。5. 超越“一行代码”这些延伸玩法正在改变传播逻辑当技术门槛降到一行代码真正的分水岭就不再是“会不会写”而是“敢不敢想”。我观察到三个正在兴起的新方向5.1 二维码即“数字藏品”载体某艺术系学生把水墨画扫描后用算法生成100个微小差异的版本每个版本对应一个独立二维码。扫码后显示原画唯一编号作者签名SVG。这100个码被印在明信片上随机发放收集齐10个不同编号可兑换实体画册。这里二维码不再是通道而是数字身份凭证——它的价值不在内容而在稀缺性与可验证性。5.2 教育场景的“渐进式解锁”某编程课老师把课程大纲拆成5个知识点每个知识点生成一个二维码。但第二个码的内容是“请先扫码第一个码获得解锁密码”。第一个码扫出来是一道简单Python题答对后显示密码。这种设计让二维码变成学习进度锁学生必须按顺序完成知识获取路径被强制结构化。5.3 线下活动的“空间坐标锚点”在某科技馆AR导览项目中每个展柜贴一个二维码。但扫码后不显示网页而是触发手机陀螺仪根据用户朝向实时渲染3D模型——比如面向恐龙骨架时屏幕上浮现骨骼结构分解图转向旁边化石时切换成地质年代动画。这时二维码的作用是物理空间与数字内容的时空锚定它把手机变成了空间感知设备。这些案例的共同点是它们都没用到更高级的框架只是把“一行代码”的思维扩展到了新维度——从信息传递到关系构建从单次交互到持续连接从静态内容到动态世界。我个人在实际操作中的体会是技术永远在进化但打动人的东西没变——是那个扫码瞬间的惊喜感是发现“原来还能这样”的好奇心是把抽象逻辑变成可触摸体验的成就感。一行代码的价值不在于它多短而在于它第一次让你相信你写的字真的能让世界亮一下。

相关新闻

GitLab实战手册:从代码托管到CI/CD流水线落地

GitLab实战手册:从代码托管到CI/CD流水线落地

从事软件开发这几年,我用过的代码托管和协作平台不算少,但真正让我愿意在团队里反复推行、甚至帮同事从零搭过完整工作流的,还是GitLab。它不像某些平台那样只管住一个代码仓库就完事,而是把代码托管、项目规划、CI/CD、制品管理甚…

2026/10/16 13:35:09 阅读更多 →
STM32驱动CW2017电量计:I2C读写、SOC滤波与避坑指南

STM32驱动CW2017电量计:I2C读写、SOC滤波与避坑指南

简介:这份资源面向使用STM32微控制器开发电池管理功能的嵌入式工程师与学习者,聚焦于通过I2C总线读取CW2017电量计芯片的单节锂电池电压、电流与剩余电量数据。资源包共4个文件,包含2个C源文件与2个H头文件,分别对应I2C底层通信驱…

2026/10/16 13:35:09 阅读更多 →
QIIME 2中文实操手册:16S分析全流程可执行文档

QIIME 2中文实操手册:16S分析全流程可执行文档

简介:本资源是QIIME 2官方文档的权威中文翻译项目,面向微生物组学研究者、生物信息初学者及需要快速上手16S扩增子分析的科研人员,有效解决英文阅读门槛高、教程更新滞后导致的学习断层问题。压缩包为HTML格式静态网站,共269.9MB&…

2026/10/16 13:34:06 阅读更多 →

最新新闻

基于C#的MSChart图表拖拽实现:坐标换算与事件机制详解

基于C#的MSChart图表拖拽实现:坐标换算与事件机制详解

简介:利用C#语言与MSChart控件在WinForm程序中实现图形拖拽功能的完整程序资源包,面向需要增强图表交互体验的Windows窗体应用开发者。资源以鼠标事件处理为核心,通过命中测试识别数据点,记录拖拽起点并动态更新坐标,使…

2026/10/16 14:14:19 阅读更多 →
ECOS-MATLAB:CVX背后的锥规划求解器解析与实战

ECOS-MATLAB:CVX背后的锥规划求解器解析与实战

简介:这是一套面向MATLAB用户的二阶锥规划求解工具包,基于开源求解器ECOS构建,并与CVX建模语言无缝衔接,适合工程、经济、统计等领域的科研和工程人员快速处理带线性或二次凸约束的优化问题。压缩包共8个文件,包含6个M…

2026/10/16 14:14:19 阅读更多 →
KB5004442补丁与OPC Classic DCOM兼容性配置及故障排查指南

KB5004442补丁与OPC Classic DCOM兼容性配置及故障排查指南

简介:这份PDF资料聚焦微软KB5004442安全更新,面向工业自动化领域的OPC Classic运维人员、DCOM组件开发者及系统管理员,用于评估CVE-2021-26414修补后DCOM安全机制变更对OPC通信的冲击。资源包仅含1个PDF文件,约398KB,内…

2026/10/16 14:14:19 阅读更多 →
STM32 UART双APP IAP实战:Flash分区、Bootloader跳转与远程固件升级

STM32 UART双APP IAP实战:Flash分区、Bootloader跳转与远程固件升级

简介:这是一份面向STM32嵌入式开发者的IAP(应用程序内编程)实战工程,聚焦UART串口通信下的双APP固件升级方案。资源以STM32微控制器为平台,演示如何通过任意通信接口获取新版bin固件包并完成自升级,可延伸至…

2026/10/16 14:14:19 阅读更多 →
free-claude-code:Claude Code免费额度管理实战

free-claude-code:Claude Code免费额度管理实战

free-claude-code 是我最近整理的一个小工具,专门用来管理 Claude Code 的免费额度。很多人第一次听说 Claude Code 时,先被它那套命令行交互惊艳到,但真到自己上手,又容易被“额度到底还剩多少”“怎么在不同项目间切换不串 key”…

2026/10/16 14:14:19 阅读更多 →
stripe-integration - SKILL

stripe-integration - SKILL

name: stripe-integration description: “精通 Stripe 支付处理集成,构建稳健、符合 PCI 标准的支付流程,包括结账、订阅、Webhook 和退款。” risk: critical source: community date_added: “2026-02-27” Stripe 集成 精通 Stripe 支付处理集成&…

2026/10/16 14:13:17 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/15 9:49:14 阅读更多 →