微信小程序“小鱼照片翻新”上线了

2024-09-04 | 39浏览 | 0评论 | 标签:小程序 小鱼照片翻新 老照片修复

一、背景

家人/同学群经常会发一些怀旧照片,大家都在唏嘘曾经的时光,我的关注点却在那模糊不堪的画质上:要是有个工具能将这些发黄的老照片变清晰,岂不是一件美事?

于是在网上搜索关键词“照片翻新”、“老照片修复”等等,搜索结果不少。果然是能想到的点子,一定有人先做了。我把PC端、小程序、APP端排名靠前的都下载来试了,表现不一,总的来说能达到一定的效果,不过几乎都有次数或是广告限制,要恰饭嘛无可厚非。作为程序员,能自己解决的事,何必花钱,于是利用休息时间,开发了这个微信小程序,取名“小鱼照片翻新”。小程序上线后已经更新了三版,完成度已经达到预期的80%,我觉得可以拿出来亮个相了。

小鱼照片翻新小程序码

(另外还有个基于electron的本地版,完全依赖本地电脑性能,速度普遍提升1~3倍,适合大批量照片处理,以后有机会再单独写一篇介绍)

二、功能特色

1、老旧照片翻新

核心功能,老照片翻新修复。

小鱼照片翻新小程序

2、批量处理

选择图片上传后,无需一直等待,可继续上传,或是做其它事,程序会按提交顺序依次执行,修复完后将通过状态栏的红点提醒,或在“历史”列表页显示修复结果。

小鱼照片翻新小程序

3、历史记录

在“历史”页面可查看自己所有翻新的照片,照片文件将在服务器保留3个月,后期将根据服务器剩余容量情况进行清除。建议每次将翻新后的照片及时保存到手机本地相册,以防过期。

小鱼照片翻新小程序

4、支持分享

在照片详情页中进行分享时,可将翻新后的照片分享到好友/朋友圈,他人可以从分享的链接查看该照片。

小鱼照片翻新小程序

5、长辈模式

为了照顾视力不佳的人群,小程序全站实现了两种大小的显示模式,即“长辈模式”,开启后图文都将放大两倍,方便观看。

小鱼照片翻新小程序

6、其它功能

隐私保护:上传的照片除本人主动分享外,其它人均无法查看。

图片机器人审核:为了防止上传违法违规图片,后台引入了七牛云图片审核机器人,非法照片将被拒绝,登录账号也有封禁机制。

一键快速登录:依赖微信生态实现一键登录,不需要获取手机号,也不用填写账号密码即可登录使用。

三、开发过程

技术构成

前端(小程序端):uniapp + vite + vue3 + ts + sass + vuex等
后端:Node + express + mysql + python等
服务器:腾讯轻量云(2C4G4M)+ 宝塔 + Linux + pm2

技术难点

安卓/iOS图片格式兼容问题:选择照片后(uni.chooseImage),如果用户选择上传原图,在“微信开发者工具”中表现为图片自身的格式(heic/heif/jpg/png都有可能),而在安卓设备上则被转化为png,在iOS设备上被转化为jpg,手上没有鸿蒙设备,没法测试。
简而言之,后端拿到的照片,格式千奇百怪,体积不一,需要进行格式处理,以及大小的压缩。

我的做法是:如果前端生成的是heic/heif,因为其优秀的压缩画质比,直接传给后端进行转化; 如果是jpg或png,超过一定的阙值,则使用canvas按比例压缩长宽,使用uni.compressImage压缩画质。

照片修复:修复技术依赖开源项目BasicSR,此项目使用python开发,在服务端安装好所需python依赖包后,通过Node.js直调py脚本。

长辈模式:类似于切换主题,主要通过在根节点上设置不同的class类名实现。

一键登录:可参考微信授权登录文档,大体是小程序端通过wx.login拿到一个code,传给后端,后端调用微信code2Session拿到openid作为用户唯一凭证完成绑定并入库,顺便签发接口token给前端完成后续鉴权动作。

算力问题:测试过小程序在本地电脑上修复一张照片大概需要25+秒时间(我的低配台式机:AMD速龙3+集显),放到腾讯轻量云(2C4G),CPU直接拉满100%,平均用时45+秒,算力是一大瓶颈。试过一些大厂出的修复软件,几乎不超过8秒就出结果,在硬件速度上真是没法比。已经对代码进行了不少优化,比如在前端就开始压缩照片、及时abort无效请求、后端采用排队任务每次最多执行1张照片、后端二次压缩照片等等,速度和本地运行依旧差距甚远。目前除了再升级服务器硬件,暂时没有更好的办法。

四、上线过程

目前小程序审核日渐趋紧,特别是个人小程序,能选择的种类实属有限,好在之前有过不少公司及个人小程序审核和上线经验。只要按照微信要求,将接口域名备案、小程序备案、小程序认证、隐私协议、小程序内容这些准备工作做好,个人小程序审核时间也是挺快。本小程序所有审核大概花了一周时间就完成了。

需要注意的是,小程序如涉及用户隐私、用户内容产出的,该提示的提示、该审核的审核,这些都是最容易被拒的原因。

五、结尾

这个小程序从构思到上线,陆陆续续折腾了几周休息时间。期间测试过不同照片,效果能达到我预期的70%吧,供大家娱乐。如果你觉得有用,也欢迎分享给你的家人好友。如何有什么建议和疑问,欢迎在下面留言交流。

(本篇完。有疑问欢迎留言探讨)

留言:

*

* (方便回复通知)

打赏
编辑代码 运行结果
退出