Merge remote-tracking branch 'origin/main'

# Conflicts:
#	.gitignore
This commit is contained in:
夏犀麟 2026-09-10 14:15:51 +08:00
commit 363caaedd7
4 changed files with 50 additions and 1 deletions

View File

@ -0,0 +1,8 @@
# 2026-08-31 工作日志
## tool.xpcool.com · 新增「图片转 ICO」工具e65da3a已提交未推送
- 新增 `src/utils/ico.ts`:纯前端零依赖实现 ICO 编码——PNG 编码CRC32/Adler32、自适应行滤波、zlib stored 兜底、调色板位深 1/2/4/8、中位切分量化、32bpp BMP DIBbottom-up BGRA + AND 遮罩、ICO 容器封装;体积控制=编码方式(auto: ≥128 用 PNG)+量化+超限自动降级(先量化→再从大到小删尺寸)。
- 新增 `src/views/image-to-ico/ImageToIcoView.vue`:多尺寸勾选/预设/自定义、填充方式(cover/contain/stretch)、编码方式、量化、体积上限、预览网格、ICO+单尺寸 PNG 下载、历史记录。
- 注册 `src/router/tools.ts`path `image-to-ico`,图标 FileImageIcon更新 README 路由表与特性行。
- 验证vue-tsc 通过esbuild 打包后 Node 跑 8 项二进制自测全过Pillow 独立解码 6 尺寸全过vite build 成功46sImageToIcoView chunk 18.5kB)。
- 关键坑:① PNG 位深<8 时滤波行距必须用 raw.length/height 推导不能用 width×bpp ICO 目录项 256 0 表示 非交互环境 git push 无凭据会失败需用户本地推送

View File

@ -0,0 +1,13 @@
# 2026-09-01 工作日志
## tool.xpcool.com · 图片转 ICO 下载增强
- `buildIco` 新增 `singles` 字段:每个尺寸单独封装的 ICO Blob直接复用合成包内已编码条目数据只多包 6+16 字节头,零额外编码成本)。
- 页面结果区预览格新增「ICO」按钮与 PNG 并列)逐尺寸下载;尺寸 >1 时显示「打包下载 ZIP」按钮用 jszip 打包所有单尺寸 ICO`{base}_{size}x{size}.ico` → `{base}_ico.zip`)。
- vue-tsc 与 vite build 均通过ImageToIcoView chunk 19.57 kB
- 坑:托管 node 版本目录由 `22.22.2` 变为 `22.22.2-2``~/.workbuddy/binaries/node/bin/pnpm` wrapper 里的硬编码路径失效exit 127已修正后续若再报 "No such file or directory" 先查该 wrapper。
2026-09-01 | CHG | 图片转 ICO 下载增强(逐尺寸 singles + ZIP 打包),已提交 00013ee用户约定以后只 commit 不 push推送由用户自行完成
2026-09-01 | CHG | 全站接入 TDesign ImageViewer 图片预览:共享 AppImageViewer + useImageViewer覆盖 9 处(上传缩略图/Base64/裁剪/ICO/OCR/二维码/压缩/代码图/占位图vue-tsc+build 通过,已提交
2026-09-01 | CHG | 用户约定AI 不方便验证的(浏览器交互体验/视觉/下载弹窗等)直接交用户手动验证,勿反复折腾自动化

View File

@ -61,5 +61,6 @@
- 本地 pnpm 修复2026-08-27 升级为 wrapper 方案):根因=本环境 MSYS 路径转换故障,把 `/c/...` 参数转成 `E:\c\...`(多 `E:\c\` 前缀)致 corepack shim 与 node 都找不到 pnpm.js。**已建持久 wrapper**`~/.workbuddy/binaries/node/bin/pnpm`(内容:`export NODE_OPTIONS=--experimental-sqlite; exec "<托管node.exe>" "C:/Users/ybtdevxxl/.workbuddy/binaries/node/workspace/node_modules/pnpm/bin/pnpm.cjs" "$@"`,关键=给 node 传 Windows 风格路径 `C:/...` 规避 MSYS 转换)。**提交/构建前需 `PATH="~/.workbuddy/binaries/node/bin:$PATH"` 前置**pre-commit 钩子(lefthook oxlint/oxfmt/eslint/stylelint/checkType)即可正常运行;否则钩子崩 → 只能 --no-verify。已验证 pnpm 11.16.0 + `pnpm exec oxlint` 1.79.0。
## 日常同步习惯(建议)
- 每次工作结束:在各改动项目 `git add + commit + push`,本工作空间同样提交(规则/日志变化时)。
- 每次工作结束:在各改动项目 `git add + commit`,本工作空间同样提交(规则/日志变化时)。**只 commit、不要 push**2026-09-01 用户明确推送由用户自行完成AI 无需代为 push避免凭据交互失败
- **验证分工2026-09-01 用户明确)**AI 能做的验证(类型检查、构建、单元/二进制测试、自动化冒烟)照做;**AI 不方便验证的部分(真实浏览器交互体验、视觉效果、下载弹窗等)直接交给用户手动验证**,不要反复折腾自动化工具。
- 换设备开工前:先 `git pull` 各仓库,保证规则与记录最新。

27
CentOS.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAnS+AKdM3gbfaPWw/FEPtlIXfvUOjouemOeSbfQ5wqUe8U6Dg
wW9ocNQM5EkXKRzbThugh2S9dz2eIfocweX2M0cK0ipxLs/73/PQQE1f8M/w1Yxx
TRBDyESDULRgI1d76jxirDkLqT+PzpgmWxHxzXs05bq41ozI9/7AQiCElXVGIQ4N
dkLrt3Tg0xBOOOqjeLgVpRtLJE/bQIiqyXiM6l/vvtXwVcbj2G6AWPtl/L7Easzy
k4vBZUmS0ECRQuLi/6btRSm+ewlQ/Bh2dVeVDi2XtOjyv2t2KkOrHDhmRnSdvS8N
YcE5OQvhumw8foKKwXpOinU7hZBzO3UJrB4yywIDAQABAoIBAB1D/M7MvqbuPjn1
b4EsbI2cp12rvEnWa4KX58NO7vb1nkDL0UzymzV2pbfTS/ahostWJXtP7F7JICof
UT9gu4gsj/01XcFjg/fcg0eVoGlLrgF0lpvMjXI6H2DlVIj//thLyeta66rlZLcI
aQvHuYeSivTC4StBJyHVUqJ9P3I8CtF6CPMJS0XOH9GfYd57uplks7jD8PncKpr3
3Pa+ZLc8ViGw+3hYYNUGt6F3o/ZaaSjhIlvsozq8LYbcQX/xG1iL5N15G8RtqWvR
pw/EvBIn1J/uZf/UgGRTGJciM8b1/JYd9VVFUmGhDmexD1yhrPB0Vyll3McAUEr/
zyHfBJECgYEAxyY+CpiJ3KL+fGmNRQP2Xh81zswWMRR7MQNQlzSjHN4/tEgZjAKZ
d8MOvdX1IfzxFGcOPuqMC82/OeUHSLlgOjQBGzyAmLGm5W369SZG4G5B5KGkjky9
pvULw0ntoy+vj2+D9KpN94KtPKHSnm6b40Awev3HCBbLjfasfcHaXUcCgYEAyg6O
1n3WomvroyXuNpxaVnInfj8d0mXTUAAoLMlsbBxiasClioXeYt1d0Nu+cQXWgmsr
xc6ITtghOzBrwQsHeo/+/520UzKMjS0fVTh+r91PjHoMazLjg5P5vjvjuvdYrow4
Qz0UhH5H0Vk67szeWuy40crtmWuOp9ppa3HLMF0CgYBZQ0Plve91LL3CiBEhESCZ
mYWltoZv401Ab8rsq1Q9OUT2iqagwf2F17FA16jzXgu06GhTPRAerk77JTP5ndWK
4Qpp6dl+F4rGJWCqB0kXiXQRhX5bpfwP3KA0HWvdjB81vHc58CfYPANoPORJzSwk
VP4l8qAGeSkt7ZXtHDnDOwKBgQC9eYlYegibprgA9cC8VUIhbkq6iFVexz2w93S1
Cu0xNCzWDnEtxPsVmqAvCuE6+058XiNeCp6n0OTYrD9fdwg8Vmu5KBnBKtXCTV3k
fGXQZKgEAy9CFyZibJD1YxPab7gpdjQMWWq0E/ckyZgJ9vNMME/f63uDMulDXf0d
VEhFwQKBgGtuwIagkUKNBMlZzl78T05VoIRtxi/vJ3FGXd53dz+XC2KY6vXGC9B4
8effUKJxZiCKokL2QF6RmkZSpjmy4Nu/mLHv+yDWN/gNJTFZT5aWGeeqSrmRx67J
uSB5chPWm7vIhNlIyRgQJTqKDiLtKyt9ET7bqoc+C12kX4b2oUNZ
-----END RSA PRIVATE KEY-----