挫败感太强了,肝了5个夜晚终于实现水印相机

305 阅读4分钟

嗨,大家好,我是投资亏损100万,不得不下班搞副业的程序员

2024年12月30号的那天晚上,我突然灵感一现,过两天就元旦了,好多人会拍照啊,水印相机这个功能开发完正好可以推广!于是当天夜晚我就开始干!谁让我曾经是第一名小蝌蚪呢,每次做大事前我都这样给自己打气!建议你们也试试。

我先整理了一下这个水印相机需要实现的功能有哪些?

  • 点击相机时调出拍照同时有水印,水印当中必须有时间,地点
  • 有水印模板列表,用户可以预览并选择不同的模板
  • 保存用户的选择习惯,比如用户上次选择了模板a,那当用户下一次再进来的时候,默认模板就是模板a

第一个版本的目标是实现两个模板,然后慢慢丰富模板就行了!

我给大家看一下基础的第一个版本的设计:

394de2925aaca05bdf8df8df7da8330.png

点击水印弹出不同的水印模板,可以供用户选择;点击拍照就保存带水印的照片;点击切换就是切换前置或者后置摄像头! 看起来也是很简单的,功能上也没有什么特别复杂的地方,我就开始动手干了!

功能一:首先在实现调起相机,同时在相机上显示水印

<camera> 水印模板 </camera> 就是这么简单!

功能二:实现相机反转

这个通过使用device-position属性来控制,它有两个值:backfront 通过改变属性值实现的相机反转!

功能三:实现模板

然后我开始写模板,然后就遇到了问题:我模板怎么写?这可难不倒曾经是第一名小蝌蚪的我,我框框一顿写,写完我就发现了一点问题,就是我点击水印的时候弹出的模板选择框 然后在相机里面还需要再写一遍!并且代码量是成倍的增长,那作为励志成为一名优秀程序员的我,怎么可以容忍这种情况出现,既然选择的水印模板和我相机水印一样,那我单独提取出组件啊,这样两边能保持完全一致!

3afaa6c2e323927c6d89e88a16584c8.png

写着写着我就发现,写起来还是太慢,因为在模板那里不仅仅是水印 还得搞一个背景!我开始耍起了小聪明!我在网上找了一个在线编辑的网站,编辑两下 然后截图当模板!聪明反被聪明误,小聪明还是使不得,我要稍微改一下 还得改图! 我还是老老实实写代码吧!这一通操作完 已经过去了4个小时了,到了晚上12点了!有点困 我搞了杯茶叶喝!

功能四:保存图片并实现图片上的水印

这个应该也不难吧!我通过小程序拿到拍照的临时文件,我画到canvas上面,然后模板的内容再绘制上去,嗯哼,奈何我已经好几年没碰canvas了,上次碰还是写创作者平台做图片编辑器的时候!这个时候我想到了cursor爸爸!我叫了一声爸爸,告诉他我要实现的需求!然后他吭哧吭哧一顿输出,我点了一下accept, 艾玛 完事 我可以赶在元旦前上线啦!我一运行,然后再拍照 卧槽 这是个啥玩意!我就开始一点一点看,一边看一边查 这个方法什么意思,这个参数都表示什么!哎,太难了!这个时候我又开始动小聪明了,我给需求稍微改一下,各位你们就说你们在公司是不是经常这么干吧?实现困难就改需求,哈哈哈哈!我这个需求改的很妙,我拍完照增加一个展示确认的页面,为啥呢?当然是为用户好,增加一个确认的过程,用户知道拍的水印相片什么样,不想要的可以重拍(其实是我想到了html2canvas),嗯我给这个页面通过html2canvas实现就可以了啊!结果我就查小程序可不可以用html2canvas,嗯 虽然不能直接用,但是又很多平替的,我就开始看啊,看出来pdd的味道了 真的是降维啊!我用了下,发现巨难用,嗯还是用自己画比较好!我又开始自己用canvas画!画完已经2点了,我再一试,比cursor爸爸效果还差,我想算了,元旦当天再上线吧!

然后后边的几天我一直再调canvas 一个一个的调,调了4天!就这么一个模板调了4天 我哭了!先上线吧。各位这个名叫“漂亮首图”的小程序 我还要不要干下去,快哭了!