image-format-detector-yashu

v2026.09.24

判断用户输入的图片文件路径对应的真实格式(JPG/PNG/WebP),通过读取文件头魔数识别,不依赖文件扩展名。激活条件:用户消息须包含以下关键词之一:`判断图片格式`、`识别图片类型`、`图片格式检测`、`检测图片是jpg还是png`、`检测图片是png还是webp`。

GitHub
安装命令
npx skhub add steelan9199/image-format-detector-yashu
Markdown
SKILL.md

图片格式检测器

功能概述

判断用户输入的文件路径对应的图片真实格式,支持 JPG/JPEG、PNG、WebP 三种格式。通过读取文件头(魔数/Magic Number)识别,不依赖文件扩展名,可检测出扩展名与实际格式不符的情况。

环境说明

  • 本 Skill 无需脚本,直接通过系统命令读取文件头字节判断格式
  • 本 Skill 运行命令时采用条件执行(前一条成功才执行下一条),跨平台规则如下:
    • bash/zsh(Linux/macOS):cmd1 && cmd2
    • PowerShell 5(Windows):cmd1; if ($?) { cmd2 }(PowerShell 5 不支持 &&)
    • PowerShell 7+:&& 和 ; if ($?) { cmd2 } 均可,为最大兼容性推荐 ; if ($?) { cmd2 }
    • 禁止单 &:在 bash 中 & 表示后台执行,语义完全不同
    • 示例(bash/zsh):test -f "$path" && xxd -l 12 -p "$path"
    • 示例(PowerShell 5):Test-Path "$path"; if ($?) { [System.IO.File]::ReadAllBytes("$path")[0..11] }

文件头魔数对照表

格式偏移魔数(十六进制)说明
JPG0FF D8 FF前 3 字节
PNG089 50 4E 47 0D 0A 1A 0A前 8 字节(即 ‰PNG\r\n\x1A\n)
WebP052 49 46 46 + 4字节长度 + 57 45 42 50前4字节为 RIFF,偏移 8-11 为 WEBP

执行步骤

| 步骤 | 执行动作 | 具体命令/操作 | | ---- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ---------- | --------------------------------------------------------------------------- | | 1 | 接收文件路径 | 从用户消息中提取图片文件的绝对路径,记为 <文件路径> | | 2 | 验证文件存在 | Windows PowerShell:运行 Test-Path "<文件路径>",返回 True 即存在<br>Linux/macOS bash:运行 test -f "<文件路径>" && echo "exists" | | 3 | 读取文件头12字节 | Windows PowerShell:运行 $bytes = [System.IO.File]::ReadAllBytes("<文件路径>")[0..11]; $hex = ($bytes | ForEach-Object { $\_.ToString("X2") }) -join " "; Write-Output $hex<br>Linux/macOS bash:运行 xxd -l 12 -p "<文件路径>" | tr -d '\n' | sed 's/\(..\)/\1 /g'<br>说明:读取前 12 字节足以覆盖所有三种格式的魔数判断 | | 4 | 判断格式 | 将读取的十六进制字符串(统一转为大写)与【文件头魔数对照表】比对,按以下优先级判断:<br>• 以 FF D8 FF 开头 -> 判定为 JPG/JPEG<br>• 以 89 50 4E 47 开头 -> 判定为 PNG<br>• 以 52 49 46 46 开头,且偏移 8-11 字节为 57 45 42 50 -> 判定为 WebP<br>• 以上均不匹配 -> 判定为 未知格式 | | 5 | 提取扩展名 | 从 <文件路径> 中提取文件扩展名(最后一个 . 之后的部分,转小写),用于与真实格式比对 | | 6 | 输出结果 | 按【输出格式】输出判断结果 |

输出格式

判断完成后,输出以下结构化信息:

图片格式检测结果:
- 文件路径:{用户输入的路径}
- 文件扩展名:{从路径提取的扩展名,如 .jpg / .png / .webp / 无扩展名}
- 真实格式:{JPG / PNG / WebP / 未知格式}
- 扩展名是否匹配:{是 / 否}

若扩展名与真实格式不符(如 .jpg 文件实际为 PNG),需在结果后追加提示:

⚠️ 注意:该文件的扩展名(.jpg)与真实格式(PNG)不符,建议修正扩展名或使用支持该格式的工具打开。

错误处理

错误场景错误表现处理方式
文件不存在Test-Path 返回 False中断执行,提示用户"文件路径不存在,请确认路径是否正确"
路径无权限读取文件头报错"拒绝访问"中断执行,提示用户"没有读取该文件的权限,请检查文件权限设置"
文件过小文件字节数少于 12读取实际可用字节数进行判断;若不足 3 字节则判定为"未知格式"
未知格式文件头不匹配任何已知魔数输出"未知格式",并附上读取到的文件头十六进制值供用户参考
路径含空格命令解析错误路径须用双引号包裹(PowerShell 和 bash 均适用双引号,bash 中避免用单引号以支持变量展开)
命令不可用Linux/macOS 下 xxd 未安装回退使用 od -A x -t x1 -N 12 "<文件路径>" 命令读取文件头
发现
标签

此技能尚未发布标签。

版本
最新版本元数据

版本

v2026.09.24

发布时间

2026年9月24日

分类

未分类

许可证

未指定

源路径

skills/image-format-detector-yashu

默认分支

main

最新提交

03b646a

Tree SHA

e79e9ee