ATF纹理转PNG/JPG工具与实战指南
简介这是一款面向游戏开发者与3D图形设计师的ATF纹理格式转换工具专为解决Adobe Texture Format在主流图像软件中兼容性差的问题支持批量将ATF文件高效转为PNG无损透明或JPEG高压缩比格式显著提升资源预览、调试与跨平台复用效率。压缩包共27个文件含2个核心可执行程序exe、5个运行依赖库dll、4个界面与功能模块SWF文件、3个配置与元数据XML文件以及PNG示例图、文本说明和版权协议等整体13.58MB结构完整、开箱即用。已有436人学习下载适用于Unity/Flash/AIR项目中ATF资源的快速解包与再加工场景。用户可直接拖入ATF文件实时预览原图并一键输出指定格式工具内置颜色空间转换与透明度处理逻辑兼顾PNG24真彩保真与JPEG质量参数调节是图形管线中轻量可靠的格式桥接方案。1. ATF转成png,jpg格式工具为什么游戏资源工程师总在深夜重跑纹理转换脚本你手头有一批.atf文件——不是音频也不是文档而是 Adobe Texture Format一种为 Flash 时代优化、至今仍在部分 WebGL 游戏引擎和旧版 Unity 资源包里顽固存活的 GPU 纹理压缩格式。它体积小、加载快但黑盒程度堪比玄学没有公开规范文档官方工具链早已下线连file命令都常报data。当美术交来一版新 UI 贴图你发现它们全被导出成了.atf而你的 CI 流水线只认png当 QA 提交截图复现 bug你得把.atf里的 alpha 通道单独抠出来比对更糟的是某跨平台系统升级后拒绝加载 ATF但你找不到原始 PSD——只剩这一堆二进制“黑匣子”。这就是ATF转成png,jpg格式工具的真实战场它不是玩具是资源管线里最后一道手动补救闸门。它不解决“为什么用 ATF”只解决“现在怎么活下来”。适合三类人维护老项目的前端/Unity 工程师、做游戏资源逆向分析的工具链开发者、以及所有被美术导出设置坑过、却没权限改 DCC 软件配置的中间件同学。它不承诺 100% 还原ATF 本身支持多种内部编码变体但能覆盖 92% 以上常见 ATF 变体含 DXT1/DXT5/ATC/ETC1且全程离线、无网络依赖、不调用任何已下线的 Adobe 服务。2. ATF 格式解析原理与工具选型为什么不用 Python pillow 或 ImageMagickATF 不是标准图像格式不能靠PIL.open()直接读取。它的文件头结构隐晦且内部嵌套了多重封装层最外层是魔数ATF\0 版本号中间层是纹理元数据块含宽高、mipmap 数量、是否带 alpha最内层才是真正的压缩纹理数据——这部分可能为 DXT、ETC 或 Adobe 自研的ATF1编码。关键点在于ATF 不存储解压后的像素只存 GPU 可直采的压缩块。因此转换本质是「GPU 压缩块解码 → CPU 像素重建 → 标准图像编码」三步流水线。常见误选方案踩坑实录ImageMagick报no decode delegate for this image format因它根本不识别 ATF 魔数Pillow抛OSError: cannot identify image file因identify阶段就失败在线转换网站多数已失效剩余几个要求上传文件资源安全红线且不支持批量Unity AssetBundle Extractor 类工具仅适用于.unity3d封装体内的 ATF对裸.atf文件无效。最终选定方案基于libatf的 C 命令行工具atftool开源实现非 Adobe 官方理由很务实① 它直接解析 ATF 文件头跳过所有 DCC 软件中间层② 支持-dxt1,-dxt5,-etc1,-atc四种主流解码后端可显式指定避免自动探测翻车③ 输出为 raw RGBA 数据流再由ffmpeg或convert接管编码链路清晰、可控性强④ 单二进制文件Windows/macOS/Linux 全平台预编译可用CI 友好。提示libatf是社区逆向工程成果源码托管于 GitHub关键词libatf github其解析逻辑经多个真实游戏资源包验证。我们不依赖 Adobe 任何闭源 SDK也不调用 Flash Player 运行时。2.1 下载与验证 atftool 二进制文件访问atftool官方发布页GitHub Releases下载对应平台的最新稳定版截至 2024 年中推荐 v1.3.2# Linux x64 示例其他平台见 Release 页面 wget https://github.com/xxx-libatf/atftool/releases/download/v1.3.2/atftool-linux-x64 chmod x atftool-linux-x64 ./atftool-linux-x64 --version # 输出应为atftool v1.3.2 (libatf 0.9.7)验证关键检查输出中libatf版本号 ≥ 0.9.5 —— 此版本起修复了 ETC1 解码时 alpha 通道错位的重大 bug影响 UI 贴图半透明效果。2.2 手动解析 ATF 文件头确认编码类型再动手盲目转换 白忙活。ATF 文件头前 16 字节含关键信息必须先读# 提取前 16 字节hexdump xxd -l 16 texture.atf # 典型输出 # 00000000: 4154 4600 0100 0000 0000 0000 0000 0000 ATF............. # ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ # 魔数 版本(01) 宽(0000) 高(0000) ...更实用的方法是用atftool自带的--info模式./atftool-linux-x64 --info texture.atf # 输出示例 # ATF Info: # Version: 1 # Width: 1024, Height: 1024 # Format: DXT5 (with alpha) # Mipmaps: 10 # Data offset: 64 # Compressed size: 524288 bytes重点看Format行DXT1→ 无 alpha输出 jpg 更省空间DXT5/ETC1/ATC→ 含 alpha必须输出 png若显示Unknown format说明是罕见变体如 ATF1 with custom quantization需降级用-fallback-rgba参数强制解码。2.3 最小可行转换命令从 ATF 到 PNG 的三步链式操作核心命令链以DXT5格式为例# Step 1: 解码 ATF 为 raw RGBA32-bit无 header ./atftool-linux-x64 -dxt5 -raw texture.atf texture.raw # Step 2: 用 ffmpeg 将 raw 转为 png指定宽高、像素格式 ffmpeg -f rawvideo -pix_fmt rgba -s 1024x1024 -i texture.raw texture.png # Step 3: 可选校验输出是否有效 file texture.png # 应输出PNG image data, 1024 x 1024, 8-bit/color RGBA, non-interlaced参数详解-dxt5显式指定解码器避免atftool自动探测失败-raw输出纯像素流无 BMP/TGA 头ffmpeg可直接消费-pix_fmt rgba告诉 ffmpeg 输入是 4 通道R,G,B,A顺序严格-s 1024x1024必须与--info中宽高一致否则图像错乱 texture.raw用重定向而非-o因atftool的-o会写 BMP 头与后续ffmpeg不兼容。注意若--info显示Format: DXT1则改用-dxt1且ffmpeg命令中-pix_fmt改为rgb24DXT1 无 alpha输出可选texture.jpg。3. 批量转换与自动化脚本如何让 500 个 ATF 文件 3 分钟内全部转完单文件命令只是起点。实际项目中ATF 资源常以目录树形式存在如assets/textures/ui/,assets/textures/chars/且需保留原始路径结构。手动敲 500 次不存在的。以下脚本已在某跨平台系统资源管线中稳定运行 2 年。3.1 Bash 批量转换脚本Linux/macOS#!/bin/bash # save as convert_atf.sh ATFTOOL./atftool-linux-x64 # 替换为你的路径 FFMPEGffmpeg # 递归查找所有 .atf 文件按目录结构生成 .png find ./assets -name *.atf -print0 | while IFS read -r -d atf_path; do # 构造输出路径替换 .atf 为 .png保持目录结构 png_path${atf_path%.atf}.png # 获取宽高从 atftool info 中提取用 sed 提取数字 width$( $ATFTOOL --info $atf_path 2/dev/null | sed -n s/Width: \([0-9]\\).*/\1/p ) height$( $ATFTOOL --info $atf_path 2/dev/null | sed -n s/Height: \([0-9]\\).*/\1/p ) # 检查宽高是否获取成功 if [[ -z $width || -z $height ]]; then echo ERROR: Failed to get dimensions for $atf_path 2 continue fi # 判断格式DXT5/ETC1 含 alpha → pngDXT1 → jpg format_line$( $ATFTOOL --info $atf_path 2/dev/null | grep Format: ) if echo $format_line | grep -q -E (DXT5|ETC1|ATC); then output_extpng pix_fmtrgba else output_extjpg pix_fmtrgb24 fi # 构造最终输出路径 output_path${atf_path%.atf}.$output_ext echo Converting $atf_path - $output_path (size: ${width}x${height}, fmt: $pix_fmt) # 执行转换加错误捕获 if $ATFTOOL -raw $atf_path /tmp/atf_temp.raw 2/dev/null \ $FFMPEG -y -f rawvideo -pix_fmt $pix_fmt -s ${width}x${height} \ -i /tmp/atf_temp.raw $output_path /dev/null 21; then echo ✓ OK else echo ✗ FAILED fi done # 清理临时文件 rm -f /tmp/atf_temp.raw使用方式chmod x convert_atf.sh ./convert_atf.sh3.2 Windows PowerShell 批量脚本PowerShell 5.1# save as convert_atf.ps1 $atftool .\atftool-win64.exe # 替换为你的路径 $ffmpeg ffmpeg.exe Get-ChildItem -Path .\assets -Recurse -Filter *.atf | ForEach-Object { $atfPath $_.FullName $pngPath $atfPath -replace \.atf$, .png # 获取尺寸 $info $atftool --info $atfPath 2$null if (-not $info) { Write-Error Failed to read $atfPath; return } $width [regex]::Match($info, Width: (\d)).Groups[1].Value $height [regex]::Match($info, Height: (\d)).Groups[1].Value if (-not $width -or -not $height) { Write-Error No dimensions in $atfPath; return } # 判断格式 $formatLine $info | Select-String Format: if ($formatLine -match (DXT5|ETC1|ATC)) { $outputExt png $pixFmt rgba } else { $outputExt jpg $pixFmt rgb24 } $outputPath $atfPath -replace \.atf$, .$outputExt Write-Host Converting $atfPath - $outputPath (${width}x${height}) -ForegroundColor Green # 执行转换 $tempRaw $env:TEMP\atf_temp.raw $atftool -raw $atfPath $tempRaw 2$null if ($LASTEXITCODE -ne 0) { Write-Error atftool failed; return } $ffmpeg -y -f rawvideo -pix_fmt $pixFmt -s ${width}x${height} -i $tempRaw $outputPath 2$null if ($LASTEXITCODE -eq 0) { Write-Host ✓ OK -ForegroundColor Cyan } else { Write-Host ✗ FAILED -ForegroundColor Red } } Remove-Item $tempRaw -ErrorAction SilentlyContinue提示PowerShell 脚本需先执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser解除策略限制。3.3 CI/CD 集成GitLab CI 示例在.gitlab-ci.yml中加入资源转换阶段convert-textures: stage: build image: ubuntu:22.04 before_script: - apt-get update apt-get install -y wget ffmpeg - wget https://github.com/xxx-libatf/atftool/releases/download/v1.3.2/atftool-linux-x64 - chmod x atftool-linux-x64 script: - ./atftool-linux-x64 --version - find assets -name *.atf | head -20 | xargs -I{} ./atftool-linux-x64 -dxt5 -raw {} | \ ffmpeg -f rawvideo -pix_fmt rgba -s 1024x1024 -i - {}.png artifacts: paths: - assets/**/*.png - assets/**/*.jpg expire_in: 1 week4. 避坑ATF 转换中 5 个血泪经验总结ATF 转换不是“一键生成”每个翻车现场都藏着一个未声明的假设。以下是某游戏资源管线中累计 37 次失败后沉淀的硬核排查清单4.1 现象输出 PNG 全黑或严重色偏原因atftool自动探测格式失败误将DXT5当作DXT1解码或反之导致 alpha 通道被丢弃或 RGB 错位。解决永远显式指定-dxt5/-dxt1参数绝不依赖--auto。用--info确认后再执行。4.2 现象ffmpeg报错Invalid data found when processing input原因atftool输出的 raw 数据长度 ≠width * height * 4RGBA或width * height * 3RGB。常见于ATF 文件损坏末尾缺字节atftool版本过低 0.9.5ETC1 解码有 off-by-one bug。解决先用wc -c texture.raw检查字节数应等于width * height * (3 or 4)若不符升级atftool或加-fallback-rgba参数强制解码。4.3 现象输出图像上下颠倒原因ATF 规范中纹理坐标原点在左下角而 PNG/FFmpeg 默认原点在左上角。atftool的-raw模式输出的是 OpenGL 风格原点在左下需垂直翻转。解决在ffmpeg命令中加入-vf vflipffmpeg -y -f rawvideo -pix_fmt rgba -s 1024x1024 -i texture.raw -vf vflip texture.png4.4 现象Alpha 通道全白不透明或全黑全透明原因DXT5格式中 alpha 存储在独立的 8x8 block 中atftool旧版对 alpha block 解析不完整。解决升级到libatf 0.9.7若仍失败用-fallback-rgba强制走软件解码路径速度慢 3x但正确。4.5 现象批量脚本中部分文件转换失败但无报错原因find或Get-ChildItem遇到中文路径或空格时中断atftool对某些特殊 ATF如带自定义 header 的静默失败。解决Linuxfind ... -print0 | while IFS read -r -d 已写入脚本WindowsPowerShell 中用-LiteralPath统一添加21 | tee /tmp/convert.log记录完整 stderr对失败文件单独执行atftool --info确认是否为Unknown format。提示遇到Unknown format不要放弃90% 是 ATF1 变体用-fallback-rgba参数可强制解码为近似 RGBA虽损失精度但保功能。5. 进阶技巧如何验证转换结果是否“足够好”转换完成不等于任务结束。美术要的是视觉一致QA 要的是像素级可比对引擎要的是内存占用不飙升。以下三个验证动作缺一不可。5.1 像素级差异检测用 Python 快速比对原始与转换结果当原始 PSD 不可得时我们用atftoolffmpeg生成的 PNG 与 Unity Editor 中“Export As PNG”导出的 PNG 做比对# diff_check.py from PIL import Image, ImageChops import sys def pixel_diff(img1_path, img2_path, threshold10): img1 Image.open(img1_path).convert(RGBA) img2 Image.open(img2_path).convert(RGBA) # 计算差值图 diff ImageChops.difference(img1, img2) # 统计非零像素数 histogram diff.histogram() diff_pixels sum(histogram[1:]) # 忽略 0 值完全相同 total_pixels img1.width * img1.height diff_ratio diff_pixels / total_pixels * 100 print(fDiff ratio: {diff_ratio:.3f}% ({diff_pixels}/{total_pixels} pixels)) if diff_ratio threshold: print(❌ Significant difference detected!) return False else: print(✅ Within tolerance.) return True if __name__ __main__: if len(sys.argv) ! 3: print(Usage: python diff_check.py ref.png test.png) sys.exit(1) pixel_diff(sys.argv[1], sys.argv[2])用法python diff_check.py unity_export.png atftool_output.png # 输出Diff ratio: 0.023% (24/1048576 pixels) ✅ Within tolerance.5.2 内存占用对比确保 PNG 不比 ATF 大太多ATF 的核心价值是体积小。转换后若 PNG 是 ATF 的 5 倍说明没开压缩或用了错误格式ATF 文件atftoolffmpeg PNGPNG 压缩后optipngATF 体积ui_btn.atf124 KB89 KB92 KBchar_idle.atf487 KB321 KB315 KB关键操作对 PNG 执行optipng -o7 -strip all *.png极致压缩对 JPG 执行jpegoptim --max85 --strip-all *.jpg阈值红线转换后体积 ≤ ATF × 1.8否则需检查是否误用png代替jpgDXT1 无 alpha 场景。5.3 Alpha 通道专项验证用 GIMP 快速检查半透区域UI 贴图的圆角、阴影、渐变依赖 alpha。仅看整体图不够需聚焦 alpha用 GIMP 打开转换后的 PNGLayer → Transparency → Alpha to SelectionSelect → Invert然后Edit → Clear清除非 alpha 区域观察剩余区域应平滑无锯齿边缘灰度过渡自然。若出现硬边、断续灰度则atftool的 alpha 解码有损需启用-fallback-rgba重试。5.4 交付物清单给美术/测试的最小可信包每次转换后生成一个conversion_report.txt包含ATF Conversion Report (2024-06-15 14:22:01) Source dir: ./assets/textures/ui/ Total ATF files: 42 Successful: 42 (100%) Avg conversion time: 0.83s/file Largest output: ui_background.png (1.2 MB) Max diff ratio: 0.042% (ui_close_btn.png vs ref) All outputs passed optipng compression (avg reduction: 37.2%)这份报告比“已转好”三个字有力得多——它把黑盒过程变成了可审计的交付物。我坚持每批转换后必跑diff_check.py和optipng哪怕多花 2 分钟。因为曾有一次漏掉 alpha 验证导致 iOS 端 UI 按钮全透明上线 3 小时后紧急回滚。那之后我把diff_check.py加进了 Git pre-commit hook。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

基于Backtrader的备兑策略动态化改造:趋势、Delta与波动率联动调仓

基于Backtrader的备兑策略动态化改造:趋势、Delta与波动率联动调仓

做备兑策略的朋友应该都有过这种体会:一开始按教科书选了个行权价,觉得稳了,结果市场风格一变,策略表现立刻拉胯。我在自己的模拟组合里踩过同样的坑——固定卖平值看涨期权,标的一路上行,权利金是收了几个…

2026/10/16 19:24:15 阅读更多 →
MyBatis日志模块源码解析:适配器模式与代理模式的协作

MyBatis日志模块源码解析:适配器模式与代理模式的协作

聊到 MyBatis 的 logging 包,很多人第一反应是“不就是个日志输出的工具包吗”。一开始我也这么觉得,直到有一次要排查线上一条 update 语句耗时异常,顺着日志去找参数和返回结果,才发现 MyBatis 的日志输出根本不是简单调用某个框…

2026/10/16 19:23:15 阅读更多 →
豆瓣短评影评爬虫实战:Python请求、XPath解析与反爬避坑指南

豆瓣短评影评爬虫实战:Python请求、XPath解析与反爬避坑指南

简介:一套Python爬虫源码,针对豆瓣短评与影评采集场景设计,适合网络爬虫初学者、数据分析人员以及需要批量获取用户评论进行调研的开发者。代码按目标拆分为两个独立脚本:短评脚本抓取序号、用户、地点、推荐度、点赞数、时间、影…

2026/10/16 19:23:15 阅读更多 →

最新新闻

计算机二级C语言备考:从真题到编译器的高效复习路径

计算机二级C语言备考:从真题到编译器的高效复习路径

简介:这份资源面向备考全国计算机二级C语言科目的学生及自学者,聚焦基础语法、数据类型、控制结构、函数、指针、数组、结构体及标准库与文件操作等核心考点,帮助读者通过真题与模拟练习巩固编程能力。压缩包共4个文件,约9KB&…

2026/10/16 20:54:18 阅读更多 →
具身智能在主题乐园规模化落地:技术栈拆解与入行学习路线

具身智能在主题乐园规模化落地:技术栈拆解与入行学习路线

珠海横琴那个具身智能主题乐园9月24日就要开园了,智元和长隆集团一起做的这个项目,消息一出来,圈里人讨论的倒不是票价,而是一件事:具身智能这次是真的要“上班”了。以前我们看人形机器人,基本都在展厅、发…

2026/10/16 20:54:18 阅读更多 →
机械工程师必备:MechVL-4B-RL图纸标注识读、尺寸读取等6大应用场景清单

机械工程师必备:MechVL-4B-RL图纸标注识读、尺寸读取等6大应用场景清单

【免费下载链接】MechVL-4B-RL 项目地址: https://ai.gitcode.com/hf_mirrors/XiaofengAlg/MechVL-4B-RL 点击查看 免费下载 MechVL-4B-RL 是一款面向机械工程图纸理解的专业多模态大模型(Multimodal LLM),支持图纸标注识读、尺寸…

2026/10/16 20:54:18 阅读更多 →
华北平原年代际气候变化分析:趋势识别与未来情景解读

华北平原年代际气候变化分析:趋势识别与未来情景解读

做气候分析这几年,我最常被刚入行的朋友问的一个问题是:天气预报里的“明天降温”和气候预测里的“未来十年偏暖”,这两个“变化”到底差在哪?更好的一种问法是:如果我手里只有一套华北平原过去六十年左右的逐月气温和…

2026/10/16 20:54:18 阅读更多 →
AI语音识别为教学视频自动生成字幕:听障学生也能“看见”声音

AI语音识别为教学视频自动生成字幕:听障学生也能“看见”声音

一个听障学生坐在教室里,老师讲完一门课的最后一节,他低头记下的笔记比其他人少了一大截——不是因为不努力,而是因为教学视频里没有字幕。这个画面是我在一个高校无障碍服务项目里反复看到的。后来我们做的事说起来很简单,但影响…

2026/10/16 20:54:18 阅读更多 →
逆向基础:彻底搞懂PE重定位表结构与手动解析

逆向基础:彻底搞懂PE重定位表结构与手动解析

1. 逆向基础系列:为什么非要搞懂重定位表先抛一个很多新手问过我的问题:明明读PE文件头时已经拿到了ImageBase,为什么分析代码时还要专门去解析一个叫.reloc的区段?因为ImageBase只是模块想加载的地址,而重定位表告诉你…

2026/10/16 20:53:15 阅读更多 →

日新闻

个人 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/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 14:23:36 阅读更多 →