chore: sync local changes to Gitea
100
BLOG.md
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
# [萌芽妙妙工具]RandBG API:一个零成本、可自托管的随机背景图片API
|
||||||
|
|
||||||
|
> **开源地址**: [github.com/shumengya/randbg-api](https://github.com/shumengya/randbg-api)
|
||||||
|
> **开源协议**: [MIT License](https://github.com/shumengya/randbg-api/blob/main/LICENSE)
|
||||||
|
> **在线体验**: [randbg.smyhub.com](https://randbg.smyhub.com)
|
||||||
|
> **作者**: *树萌芽*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 前言
|
||||||
|
|
||||||
|
平时写博客、做落地页,总需要随机背景图。用别人的服务怕挂、怕限速;自己搭又嫌重。我想要一个**够轻、够快、够便宜**的方案——最好不用维护服务器,直接部署就能跑。
|
||||||
|
|
||||||
|
Cloudflare Workers 的 Free Tier 每月 10 万次请求,对个人项目完全够用。问题是:图片放哪儿?
|
||||||
|
|
||||||
|
直接把图片塞进 Worker 脚本?不行,Worker 有 4 MiB 体积限制,几十张图直接撑爆。
|
||||||
|
|
||||||
|
所以我把架构拆成两层:Worker 只跑 API 逻辑,图片和前端页面全部走 **Workers Static Assets**。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 项目架构
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────┐ ┌──────────────────┐ ┌──────────────┐
|
||||||
|
│ 用户请求 │────▶│ Cloudflare Worker│────▶│ Static Assets│
|
||||||
|
│ │ │ /api/random │ │ WebP 图片 │
|
||||||
|
└─────────────┘ └──────────────────┘ └──────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
**Worker 端**:不到 200 行 JS,只做三件事——读 `manifest.json`、识别设备、302 或 JSON 响应。
|
||||||
|
|
||||||
|
**静态端**:`public/` 目录下放 `index.html`、`manifest.json`、编号 WebP 图片。`wrangler deploy` 一次把前后端一起发布。
|
||||||
|
|
||||||
|
这样做的好处很直接:
|
||||||
|
- Worker 脚本极小,冷启动几乎无感
|
||||||
|
- 图片走 Cloudflare CDN,全球缓存
|
||||||
|
- 不涉及数据库,无状态,不存在宕机
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 核心功能
|
||||||
|
|
||||||
|
### 设备识别
|
||||||
|
|
||||||
|
根据 `User-Agent` 和 `Sec-CH-UA-Mobile` 自动判断移动端/桌面端,返回对应方向的图片。你也可以手动指定:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl https://randbg.smyhub.com/api/random?mode=mobile
|
||||||
|
```
|
||||||
|
|
||||||
|
### 响应格式
|
||||||
|
|
||||||
|
默认 `302 Redirect` 直接跳转到图片地址,浏览器里一行就能用:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<img src="https://randbg.smyhub.com/api/random" />
|
||||||
|
```
|
||||||
|
|
||||||
|
加上 `?format=json` 返回元数据,方便前端自己控制加载逻辑:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"variant": "desktop",
|
||||||
|
"folder": "desketop-image",
|
||||||
|
"filename": "7.webp",
|
||||||
|
"url": "https://randbg.smyhub.com/desketop-image/7.webp",
|
||||||
|
"count": 19
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 构建流程
|
||||||
|
|
||||||
|
写了个 `build.py`,功能单一但够用:
|
||||||
|
|
||||||
|
1. 扫描 `mobile-image/` 和 `desketop-image/` 目录
|
||||||
|
2. 用 Pillow 把原图转为编号 WebP(`1.webp`、`2.webp`...)
|
||||||
|
3. 输出到 `public/` 并生成 `manifest.json`
|
||||||
|
4. 如果已有 WebP 且没有原图,自动保留,不会误删
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 build.py
|
||||||
|
npm run deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 部署
|
||||||
|
|
||||||
|
整个部署流程是:
|
||||||
|
|
||||||
|
1. 把原图扔进 `mobile-image/` 和 `desketop-image/`
|
||||||
|
2. `python3 build.py` 转 WebP
|
||||||
|
3. `npm run deploy` 推到 Cloudflare
|
||||||
|
|
||||||
|
从改图到上线,本地测试用 `npm run dev`,本地 8787 端口就能跑。没有 Docker,没有数据库,没有环境变量要填。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
如果你也需要一个零成本、不用维护的随机背景服务,可以直接 Fork 用。代码量很小,改起来不费劲。
|
||||||
390
Typora_Hook_Log.txt
Normal file
@@ -0,0 +1,390 @@
|
|||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync 重定向 D:\WindowsApp\Typora\resources\app\atom.compiled.dist.jsc --> D:\WindowsApp\Typora\resources\app.bak\atom.compiled.dist.jsc
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.openSync D:\WindowsApp\Typora\resources\app.bak\atom.compiled.dist.jsc
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\hjson\lib\hjson.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\util\assign.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\fs\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\node_modules\universalify\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\graceful-fs\graceful-fs.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\graceful-fs\polyfills.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\graceful-fs\legacy-streams.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\graceful-fs\clone.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\copy\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\copy\copy.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\copy\ncp.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\util\utimes.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\mkdirs\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\mkdirs\mkdirs.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\mkdirs\win32.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\mkdirs\mkdirs-sync.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\path-exists\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\copy-sync\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\copy-sync\copy-sync.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\copy-sync\copy-file-sync.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\util\buffer.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\remove\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\remove\rimraf.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\json\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\json\jsonfile.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\node_modules\jsonfile\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\json\output-json-sync.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\json\output-json.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\move\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\move-sync\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\empty\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\ensure\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\ensure\file.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\ensure\link.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\ensure\symlink.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\ensure\symlink-paths.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\ensure\symlink-type.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-extra\lib\output\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\electron-fetch\lib\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\electron-fetch\node_modules\encoding\lib\encoding.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\iconv-lite\lib\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\iconv-lite\node_modules\safer-buffer\safer.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\iconv-lite\lib\bom-handling.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\iconv-lite\lib\streams.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync C:\Users\smy\AppData\Roaming\Typora/conf/conf.user.json
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\lib\fs-plus.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\underscore-plus\lib\underscore-plus.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\underscore\underscore-node.cjs
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\underscore\underscore-node-f.cjs
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\async\lib\async.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\mkdirp\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\rimraf\rimraf.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\glob\glob.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\fs.realpath\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\fs.realpath\old.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\minimatch\minimatch.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\brace-expansion\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\concat-map\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\balanced-match\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\inherits\inherits.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\path-is-absolute\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\glob\sync.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\glob\common.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\inflight\inflight.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\wrappy\wrappy.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\fs-plus\node_modules\once\once.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.statSync d:\windowsapp\typora\typora.exe
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.statSync D:\WINDOWSAPP\TYPORA\TYPORA.EXE
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:10] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/typora.log
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\lowdb\lib\main.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\lowdb\node_modules\lodash\lodash.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\lowdb\node_modules\is-promise\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\lowdb\adapters\FileSync.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\lowdb\adapters\Base.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\lowdb\adapters\_stringify.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync C:\Users\smy\AppData\Roaming\Typora\profile.data
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync C:\Users\smy\AppData\Roaming\Typora\history.data
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\native-reg\lib\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFile D:\WindowsApp\Typora\resources\locales\zh-Hans.lproj\Panel.json
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFile D:\WindowsApp\Typora\resources\locales\zh-Hans.lproj\Panel.json
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.statSync D:\SmyProjects\CloudFlare\CloudFlare Workers\randbg-api\BLOG.md
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFile D:\WindowsApp\Typora\resources\locales\zh-Hans.lproj\Menu.json
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\electron-progressbar\source\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFileSync D:\WindowsApp\Typora\resources\node_modules.asar\electron-progressbar\node_modules\extend\index.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFile D:\WindowsApp\Typora\resources\locales\zh-Hans.lproj\Menu.json
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.readFile C:\Users\smy\AppData\Roaming\Typora\typora-dictionaries/user-dict.json
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Local\Temp\Typora
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook/Promises] 程序试图 fs.promises.readFile 重定向 D:\WindowsApp\Typora\resources\app/package.json --> D:\WindowsApp\Typora\resources\app.bak\package.json
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook/Promises] 程序试图 fs.promises.readFile 重定向 D:\WindowsApp\Typora\resources\app/launch.dist.js --> D:\WindowsApp\Typora\resources\app.bak\launch.dist.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook/Promises] 程序试图 fs.promises.readFile 重定向 D:\WindowsApp\Typora\resources\app/../page-dist/license.html --> D:\WindowsApp\Typora\resources\app.bak\../page-dist/license.html
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook/Promises] 程序试图 fs.promises.readFile 重定向 D:\WindowsApp\Typora\resources\app/../page-dist/static/js/LicenseIndex.180dd4c7.5b58fa97.js --> D:\WindowsApp\Typora\resources\app.bak\../page-dist/static/js/LicenseIndex.180dd4c7.5b58fa97.js
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:11] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:41] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\draftsRecover
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:58] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:02:58] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:02] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:02] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:05] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:05] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:07] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:07] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:08] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:08] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:09] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:09] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:11] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:11] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:12] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:12] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:45] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:45] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:46] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:46] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:47] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:47] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:49] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:49] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:51] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:51] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:52] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:52] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:54] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:03:54] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:01] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:01] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:09] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:09] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:21] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:21] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:26] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:26] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:29] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:29] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:31] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:31] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:34] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:34] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:35] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:35] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:36] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:36] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:43] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:43] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:45] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:45] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:50] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:50] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:53] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:53] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:54] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:54] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:55] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:04:55] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:05:09] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:05:09] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:05:12] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:05:12] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:05:14] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:05:14] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:06:50] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:06:50] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:07:28] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:07:28] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:07:30] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:07:30] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:07:37] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:07:37] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:07:39] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:07:39] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:07:42] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:07:42] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:07:52] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:07:52] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:08:01] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:08:01] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:08:07] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:08:07] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:08:09] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:08:09] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:08:11] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:08:11] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:08:12] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:08:12] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:08:14] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:08:14] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:08:23] [Log] [🛡️ fsHook] 程序试图 fs.stat C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:08:23] [Log] [🛡️ fsHook] 程序试图 fs.open C:\Users\smy\AppData\Roaming\Typora/backups/sum
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:11:00] [Log] [🛡️ fsHook] 程序试图 fs.statSync C:\Users\smy\AppData\Roaming\Typora\backups
|
||||||
|
------------------
|
||||||
|
[2026/6/6 21:11:00] [Log] [🛡️ fsHook] 程序试图 fs.statSync C:\Users\smy\AppData\Roaming\Typora/typora.log
|
||||||
|
------------------
|
||||||
91
optimize_webp.py
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Re-compress existing .webp images with optimized parameters to reduce file size.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
python optimize_webp.py
|
||||||
|
|
||||||
|
Backups originals to a .bak/ folder before overwriting.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
from PIL import Image
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
BASE_DIR = Path(__file__).resolve().parent
|
||||||
|
PUBLIC_DIR = BASE_DIR / "public"
|
||||||
|
|
||||||
|
# Directories to optimize
|
||||||
|
TARGET_DIRS = [
|
||||||
|
PUBLIC_DIR / "mobile-image",
|
||||||
|
PUBLIC_DIR / "desketop-image",
|
||||||
|
]
|
||||||
|
|
||||||
|
# Compression parameters
|
||||||
|
QUALITY = 80
|
||||||
|
METHOD = 6
|
||||||
|
|
||||||
|
|
||||||
|
def optimize_webp(src_path: Path, backup_dir: Path) -> tuple[int, int]:
|
||||||
|
"""Re-encode a single WebP image with optimized quality settings.
|
||||||
|
Returns (original_size, new_size) in bytes.
|
||||||
|
"""
|
||||||
|
original_size = src_path.stat().st_size
|
||||||
|
backup_path = backup_dir / src_path.name
|
||||||
|
|
||||||
|
# Backup original
|
||||||
|
shutil.copy2(src_path, backup_path)
|
||||||
|
|
||||||
|
# Re-encode
|
||||||
|
img = Image.open(src_path)
|
||||||
|
# For RGB/RGBA, keep as-is; for other modes, convert to RGBA
|
||||||
|
if img.mode not in ("RGB", "RGBA"):
|
||||||
|
img = img.convert("RGBA")
|
||||||
|
img.save(src_path, format="WEBP", quality=QUALITY, method=METHOD)
|
||||||
|
|
||||||
|
new_size = src_path.stat().st_size
|
||||||
|
return original_size, new_size
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
total_original = 0
|
||||||
|
total_new = 0
|
||||||
|
total_files = 0
|
||||||
|
|
||||||
|
for target_dir in TARGET_DIRS:
|
||||||
|
if not target_dir.exists():
|
||||||
|
print(f"Skip: {target_dir} not found")
|
||||||
|
continue
|
||||||
|
|
||||||
|
backup_dir = target_dir.parent / (target_dir.name + ".bak")
|
||||||
|
backup_dir.mkdir(exist_ok=True)
|
||||||
|
|
||||||
|
print(f"\n[DIR] Optimizing: {target_dir}")
|
||||||
|
print("-" * 50)
|
||||||
|
|
||||||
|
for webp_file in sorted(target_dir.glob("*.webp"), key=lambda p: p.name.lower()):
|
||||||
|
original_size, new_size = optimize_webp(webp_file, backup_dir)
|
||||||
|
total_original += original_size
|
||||||
|
total_new += new_size
|
||||||
|
total_files += 1
|
||||||
|
|
||||||
|
reduction = original_size - new_size
|
||||||
|
pct = (reduction / original_size) * 100 if original_size else 0
|
||||||
|
status = "OK" if new_size < original_size else "WARN"
|
||||||
|
print(
|
||||||
|
f" [{status}] {webp_file.name:20s} "
|
||||||
|
f"{original_size/1024:8.1f} KB -> {new_size/1024:8.1f} KB "
|
||||||
|
f"(-{reduction/1024:8.1f} KB, {pct:5.1f}%)"
|
||||||
|
)
|
||||||
|
|
||||||
|
print("\n" + "=" * 60)
|
||||||
|
print(f" Total files: {total_files}")
|
||||||
|
print(f" Original size: {total_original/1024/1024:.2f} MB")
|
||||||
|
print(f" New size: {total_new/1024/1024:.2f} MB")
|
||||||
|
print(f" Saved: {(total_original - total_new)/1024/1024:.2f} MB ({(total_original - total_new)/total_original*100:.1f}%)")
|
||||||
|
print("=" * 60)
|
||||||
|
print(f"\nBackups saved to: {PUBLIC_DIR}/mobile-image.bak/ and desketop-image.bak/")
|
||||||
|
print("If quality is not acceptable, restore from backup folders.")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
BIN
public/desketop-image.bak/1.webp
Normal file
|
After Width: | Height: | Size: 918 KiB |
BIN
public/desketop-image.bak/10.webp
Normal file
|
After Width: | Height: | Size: 340 KiB |
BIN
public/desketop-image.bak/11.webp
Normal file
|
After Width: | Height: | Size: 647 KiB |
BIN
public/desketop-image.bak/12.webp
Normal file
|
After Width: | Height: | Size: 229 KiB |
BIN
public/desketop-image.bak/13.webp
Normal file
|
After Width: | Height: | Size: 268 KiB |
BIN
public/desketop-image.bak/14.webp
Normal file
|
After Width: | Height: | Size: 2.2 MiB |
BIN
public/desketop-image.bak/15.webp
Normal file
|
After Width: | Height: | Size: 1.0 MiB |
BIN
public/desketop-image.bak/16.webp
Normal file
|
After Width: | Height: | Size: 258 KiB |
BIN
public/desketop-image.bak/17.webp
Normal file
|
After Width: | Height: | Size: 707 KiB |
BIN
public/desketop-image.bak/18.webp
Normal file
|
After Width: | Height: | Size: 609 KiB |
BIN
public/desketop-image.bak/19.webp
Normal file
|
After Width: | Height: | Size: 324 KiB |
BIN
public/desketop-image.bak/2.webp
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
public/desketop-image.bak/3.webp
Normal file
|
After Width: | Height: | Size: 513 KiB |
BIN
public/desketop-image.bak/4.webp
Normal file
|
After Width: | Height: | Size: 918 KiB |
BIN
public/desketop-image.bak/5.webp
Normal file
|
After Width: | Height: | Size: 545 KiB |
BIN
public/desketop-image.bak/6.webp
Normal file
|
After Width: | Height: | Size: 207 KiB |
BIN
public/desketop-image.bak/7.webp
Normal file
|
After Width: | Height: | Size: 608 KiB |
BIN
public/desketop-image.bak/8.webp
Normal file
|
After Width: | Height: | Size: 595 KiB |
BIN
public/desketop-image.bak/9.webp
Normal file
|
After Width: | Height: | Size: 338 KiB |
|
Before Width: | Height: | Size: 918 KiB After Width: | Height: | Size: 514 KiB |
|
Before Width: | Height: | Size: 340 KiB After Width: | Height: | Size: 179 KiB |
|
Before Width: | Height: | Size: 647 KiB After Width: | Height: | Size: 362 KiB |
|
Before Width: | Height: | Size: 229 KiB After Width: | Height: | Size: 109 KiB |
|
Before Width: | Height: | Size: 268 KiB After Width: | Height: | Size: 134 KiB |
|
Before Width: | Height: | Size: 2.2 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 598 KiB |
|
Before Width: | Height: | Size: 258 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 707 KiB After Width: | Height: | Size: 386 KiB |
|
Before Width: | Height: | Size: 609 KiB After Width: | Height: | Size: 344 KiB |
|
Before Width: | Height: | Size: 324 KiB After Width: | Height: | Size: 162 KiB |
|
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 563 KiB |
|
Before Width: | Height: | Size: 513 KiB After Width: | Height: | Size: 259 KiB |
|
Before Width: | Height: | Size: 918 KiB After Width: | Height: | Size: 502 KiB |
|
Before Width: | Height: | Size: 545 KiB After Width: | Height: | Size: 276 KiB |
|
Before Width: | Height: | Size: 207 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 608 KiB After Width: | Height: | Size: 343 KiB |
|
Before Width: | Height: | Size: 595 KiB After Width: | Height: | Size: 309 KiB |
|
Before Width: | Height: | Size: 338 KiB After Width: | Height: | Size: 170 KiB |
BIN
public/mobile-image.bak/1.webp
Normal file
|
After Width: | Height: | Size: 158 KiB |
BIN
public/mobile-image.bak/2.webp
Normal file
|
After Width: | Height: | Size: 161 KiB |
BIN
public/mobile-image.bak/3.webp
Normal file
|
After Width: | Height: | Size: 218 KiB |
BIN
public/mobile-image.bak/4.webp
Normal file
|
After Width: | Height: | Size: 148 KiB |
BIN
public/mobile-image.bak/5.webp
Normal file
|
After Width: | Height: | Size: 177 KiB |
BIN
public/mobile-image.bak/6.webp
Normal file
|
After Width: | Height: | Size: 157 KiB |
|
Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 161 KiB After Width: | Height: | Size: 84 KiB |
|
Before Width: | Height: | Size: 218 KiB After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 148 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 177 KiB After Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 157 KiB After Width: | Height: | Size: 81 KiB |