“随手工具”的起点很简单:有时需要一张一寸证件照,有时需要把手机里的几张照片整理成 PDF。事情都不大,但每次临时找工具,要么下载软件,要么注册账号,折腾一圈,处理文件反而成了最省事的一步。

于是想,能不能自己做一个微信小程序,把这些零散的需求放在一起。

刚开始列功能时,想得挺多。扫描文件、证件照、图片压缩、OCR、身份证排版、长图拼接……越列越觉得都能用上。但真开始做,才发现每个小功能后面都有一串细节。最后决定先留下两个:证件照制作和图片转 PDF。其他的以后再说。

能跑起来,和能用,是两回事

证件照最先遇到的问题,是换背景。

开始尝试调用云端的人像服务,还想复用另一个“轻松报修”小程序的云环境。结果在权限、共享环境和接口调用之间来回折腾。开发者工具里看着没问题,拿到手机上又报错;这个问题解决了,下一个问题才露出来。

后来改成本地处理,又碰上模型加载失败。好不容易不报错了,生成的照片头顶还留着一块原背景,脖子两侧也没处理干净,衣服上甚至出现了蓝色的缺口。

那张图让我很直观地意识到:程序执行成功,只能说明流程走完了,不能说明结果能交给用户。

之后继续调整边缘,头发和脖子周围的残留才慢慢减少。红底的颜色也重新检查过。证件照看起来只是裁个尺寸、换个底色,真正费时间的,往往就是这些容易被一句话带过的地方。

图片变成 PDF,也不只是换个格式

一开始,图片转 PDF 的思路很直接:选照片,排好顺序,生成文件。

但手机拍的文件常常是歪的,旁边有桌面,纸张还会因为拍摄角度变成梯形。直接塞进 PDF,得到的只是“装在 PDF 里的照片”,看着还是乱。

所以又加了文件轮廓调整、透视校正、增强、灰度和黑白效果。页面横版还是竖版,也改为根据处理后的文件比例来安排。

这些功能做出来后,还得继续在手机上用。比如“调整文件轮廓”的入口,有一次点了好多下才弹出来;按钮的右边还超出了边界。电脑上不觉得明显,手指一上去,问题就很实在。

后来也补上了合并生成和分别生成的选项。几张照片,有时是一份文件的几页,有时是几份互不相关的材料,不能替用户默认成同一种情况。

生成成功之后,还得让人知道怎么保存。否则屏幕上说“完成了”,用户却不知道文件去了哪里,这件事就还没做完。

发布前,才发现还有另一段路

功能逐渐能用了,就开始准备发布。

第一次审核没通过,反馈涉及深度合成服务类目。之后重新整理了功能名称和说明,把一些不必要的“智能”“AI”字样去掉,尽量直接说清楚它能做什么:换底色、调整尺寸、整理图片、生成 PDF。

接着又收到图片内容安全方面的反馈,需要接入微信的内容安全接口。

这一步又绕了一圈。最初以为必须给“随手工具”单独买一个云环境,后来才把两件事分清楚:微信的接口是一回事,放在哪里调用它是另一回事。

最后的做法,是复用已有的共享云环境,用“随手工具”自己的凭证直接调用微信接口。测试图标返回了检测通过,临时文件也删除了。再从小程序里选图,经过检测,成功生成 PDF,这条流程才算实际走通。

第一次云端测试用了大约五秒。我当时就觉得,一张照片还好,如果九张都这么等,用户恐怕没什么耐心。多图处理的等待时间,也成了后面需要继续优化的地方。

期间还想找一张违规图片测试拦截效果,手上却没有合适的样本。生成了一张带辱骂文字的图片,又发现它并不能可靠地验证图片审核。这件事也提醒我,正常调用成功、拦截逻辑正确和识别效果如何,是不同的问题,不能混在一起下结论。

先把小事做好

做这款小程序,最深的感受是:功能可以写得很短,细节却省不掉。

“一寸证件照”后面有边缘、颜色、尺寸和保存;“图片转 PDF”后面有轮廓、形变、排序、方向和文件去向。还有权限被拒绝怎么办,图片太大怎么办,手机上报错时,用户能不能看懂提示。

现在,“随手工具”先放这两个入口。首页没有塞满还没做好的功能,图标也尽量做成一个工具箱的意思,给以后留点空间。

最后在首页底部加了一行小字:

由 閑雲 制作。

做的时候想过不少功能,做到这里,反而更愿意慢一点。先让人顺利做出一张照片,保存好一份 PDF。等这些小事做稳了,再往里面添新的工具。