微信小程序:图片裁剪、缩放、涂鸦、添加文字、拼长图、拼相框、表情包制作。便捷的图片编辑工具。

图片编辑小程序--HiPhoto

全能、便捷的图片编辑工具。实现了图片裁剪、添加文字、涂鸦、拼长图、拼相框等图片编辑功能,另外还有一个简易的表情包制作功能。

主界面

使用代码

下载并安装微信开发者工具,使用微信号扫码登录开发者工具。

打开微信开发者工具,点击“小程序项目”按钮,输入小程序 AppID,项目目录选择下载的代码目录,点击确定创建小程序项目。

功能实现

一、图片裁剪

裁剪界面由image组件和裁剪框组成。image组件用来显示用户载入的图片;裁剪框在用户点击裁剪框按钮后浮动显示在图片上,裁剪框的遮罩效果通过背景颜色透明以及盒阴影(box-shadow)实现。

在image组件上检测触摸事件,通过事件对象判断触摸点数,单点触摸时通过获取手指移动距离实现图片的自由拖动,两点触摸时,通过获取两点之间的距离计算图片缩放比例,实现图片自由缩放。

在裁剪框上检测触摸事件,通过获取手指移动距离实现裁剪框自由拖动;监测裁剪框右下圆点的触摸事件,通过获取手指移动距离计算裁剪框宽、高的增减,实现裁剪框的自由缩放功能。

用户裁剪完成(点击右上角√按钮后),根据保存的裁剪框宽、高以及图片缩放比例计算图片真实裁剪区域,根据计算好的区域将图片画在隐藏canvas上,得到裁剪后的图片。

裁剪界面

二、添加文字

添加文字界面由image组件、text组件和input组件构成。image组件用来显示用户载入的图片。input组件使用绝对定位隐藏在界面之外(left:-9999px)。text组件用来动态演示用户对文字大小、颜色、样式的调整,当用户点击添加按钮后,text组件弹出。在text组件上监测tap事件,用户点击text组件时,使input组件获得焦点从而调出键盘。在text组件上绑定触摸事件,实现text组件的自由拖动。在input组件上绑定input事件,将text组件的内容与用户输入绑定。

用户添加文字完成(点击右上角√按钮后),根据保存的text组件定位,文字大小、颜色、样式。将文字写在隐藏canvas上(先画原图片,再写文字),得到添加文字后的图片。

添加文字界面

三、涂鸦功能

涂鸦界面由canvas组件和image组件构成。在canvas上监测touchmove事件连续画线(ctx.moveTo,ctx.lineTo)实现涂鸦功能。线宽、颜色可以由用户在下方工具栏设置。

由于canvas组件在小程序中层级最高,因此采用动态调整canvas高度的方法显示底部工具菜单栏,即调出和隐藏工具栏时,动态改变canvas的高度。

为了实现橡皮擦和清除功能(不破坏原图),采用将canvas组件覆盖在image组件上,image组件加载涂鸦前的原图,这样使用橡皮檫时擦掉的区域会显示原图。涂鸦完成后(返回主菜单),先保存canvas得到涂鸦图片,然后在隐藏canvas上先绘制涂鸦前的原图,再绘制涂鸦效果图。就能得到完整的涂鸦后的图片了。

涂鸦界面

四、拼长图

拼长图界面由image组件构成。用户从系统相册选择图片时,将图片的临时路径保存到数组中,而image组件使用列表渲染(wx:for)将数组中的图片全部载入界面,实现拼接的演示效果。在image上绑定longtap事件,长按一张图片后,弹出删除该图片的确认框,确认后在数组中删除该图片的路径,实现删除的演示效果。

保存时,将数组中的图片依次画在隐藏canvas上,所有图片宽度保持一致,高度按图片比例缩放,每张图片的定位由图片的宽高、缩放比计算得到。这样就实现的拼长图的功能。

五、拼相框

拼相框界面由两个image组件和包裹它们的view组件构成。相框为部分区域透明的图片,加载相框的image组件覆盖在加载照片的组件之上,照片就会透过透明区域显示出来。在view组件上监测触摸事件,实现照片的自由拖动和缩放。相框保存宽度全显,而照片能够动态调整,就能实现拼相框的效果了。

保存时,根据照片和相框图片的缩放比例和定位关系,在隐藏canvas中先画照片,再画相框,就就能实现拼相框功能。

拼相框界面

六、表情包制作

表情包素材保存在腾讯云存储,进入选择界面后根据链接加载显示缩略图,image使用懒加载,加快素材的渲染。用户选择一个表情素材后,使用wx.downloadFile下载该图片并保存为临时路径。之后的处理实现与添加文字功能相似。

七、保存图片

小程序的所有图片保存都使用隐藏的canvas组件(left:-9999px)完成,根据图片的定位、缩放比、裁剪以及添加的文字的效果等数据在隐藏canvas上作图,并导出临时路径以便进一步处理。

为了保证图片的质量(图片画在canvas上后像素不降低),隐藏canvas的宽高等于图片的实际宽高。即在画布上调用drawImage之前,使用wx.getImageInfo获取需要画的图片的真实宽高,进而调整隐藏canvas的宽高。

用户点击保存按钮后,进入图片预览界面(wx.previewImage),长按图片可选择保存本地相册或者发送给微信朋友。

推荐阅读:

智能垃圾分类,物品(垃圾)回收小程序源码

开源租房小程序代码解析

微信小程序开发的天气预报源码

觉得文章不错,点下在看

点击阅读原文演示/本地下载demo源码

↓↓↓↓

canvas节点无法导出图片_开源小程序,练手必备,仿“美图秀秀”处理图片。相关推荐

  1. 视频教程-微信小程序系统教程python版[3/3阶段]_微信小程序支付-手游开发

    微信小程序系统教程python版[3/3阶段]_微信小程序支付 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试 ...

  2. 微信小程序练手项目-音乐播放器

    微信小程序练手项目-音乐播放器 该项目只适合练手,大佬请绕道 项目展示图: 项目介绍 微信小程序音乐播放器 页面: 音乐推荐.播放器.播放列表 功能: 播放.暂停.上一首.下一首.跳转播放列表.实时进 ...

  3. 小程序 const moment = require('moment')_开源小程序精选

    我最近在做二人对战模式答题,体验了不少小程序,找到一个开源的,现推荐给大家 小程序代码地址 微信小程序云开发实现的单词PK小程序,支持好友对战.随机匹配.人机模式,完整代码 ~ UI可以披靡市场上所有 ...

  4. 仿美图秀秀的图片剪切

    先贴上美图秀秀原作的效果图,右边是我仿的效果图. 刚一眼打量过去,吸引我们的就是那四个大点.就从它开始吧,目前看来这个大点是一个图片,当点击下去的时候有加亮的效果,可能这又是一张图片.我们先不要考虑这 ...

  5. canvas节点无法导出图片_uniapp canvas绘制图片后无法canvasToTempFilePath导出

    后续补充:锅应该来自MIUI升级,因为我将之前打包的App安装后,依旧有这个问题(之前测试的时候是不存在的)... 但是但是,依旧请官方看看小米到底给你们挖了什么坑,解决此问题... 小米 webvi ...

  6. 小程序向java后台发送图片_微信小程序在后台如何将二进制流转换成图片

    我在前端请求了小程序码返回的是一堆乱码, java不太熟网上找了一个方法可以将二进制流和图片互转,但是从微信小程序码接口获取的数据用这个方法无法获取正确的图片,不知道哪里有问题: 有没有只在前端就能获 ...

  7. 小程序文章怎么导出来_微信小程序点餐怎么申请,怎么建立微信点单小程序

    微信点餐小程序/微信点餐商家版/微信点餐系统/微信点餐平台/点击上方"蓝字"关注我们我 怎么做微信小程序点餐 我们先要申请一个微信公众号,如果您有营业执照可以注册认证一个服务号 申 ...

  8. 小程序文章怎么导出来_微店小程序—小程序怎么搜索微信店铺

    微店小程序/微店铺/下单/下单助手/微商城 就在新零售时代到来之时,智慧门店备受广大商家的关注,因为它可以有效实现引流客户进店消费. 为了帮助商家在微信内快速开店,方便商家和用户之间沟通,点击下方图片 ...

  9. 微信小程序怎么在wxml中插入多个图片_兰州小程序开发流程费用推荐品牌_便企网...

    兰州小程序开发流程费用推荐品牌,有人说既然开发文档这么详细那直接跟着开发文档来学习就可以轻松入门,你有这份自信是非常好的,也希望你有很强的学习能力,但对于很多的普通人新手来说(当然也包括我),做作品的 ...

最新文章

  1. ASP.NETMVC View页面 序列化 c# Model 为 Json字符串
  2. JMM如何解决顺序一致性问题-JMM层面的内存屏障
  3. 大屏设计的视觉统一_视觉设计中的统一
  4. xcode windows版安装使用教程
  5. ARX中实现实体的偏移
  6. 直播笔记 | Unity中路径的疑难杂症剖析
  7. 避免将属性的可见属性层次结构用作用户定义的层次结构中的级别
  8. 科大讯飞回应“同传造假”:承认转写人类同传,沟通不足造成误解
  9. Linux中,根目录下文件夹的含义
  10. 【Java_基础】java中static与final关键字的区别
  11. 1537 学生干部虚基类
  12. 分仓软件是什么?资管分仓的作用
  13. 【ecshop二次开发】ecshop截取中文字符串的方法
  14. 解决大多数pip install出现Could not install packages due to an EnvironmentError错误
  15. m3u8格式转MP4(ffmpeg方法)
  16. Python 爬取朋友圈最新方法!!(文末赠书)
  17. 长 三 角 制 造 - 香 港 服 务
  18. signature=5a522a8356f9906b0b775bdada02a4c6,阜阳境内车辆违章信息公示(4月3—4月23)
  19. 喜报:虎博科技与国信证券成功续约
  20. SpringApplication.run(MyApplication.class, args)运行流程源码分析

热门文章

  1. select case when与IF的用法
  2. DirectInfo.GetFiles 排序
  3. Android学习记录--Switch开关按钮的应用
  4. JetBrains发布Toolbox 采用新的订阅模式
  5. .NET简谈自定义事务资源管理器
  6. Redis普通分布式锁
  7. 链表去重 保留第一个元素
  8. 大连理工大学计算机科学世界排名,喜忧参半!2021年5月ESI世界大学排行榜,21个学科排名数据分析!...
  9. mysql fetch field_PHP mysql_fetch_field() 函数
  10. 360解压电脑版安装包_鲁大师电脑版2020下载-鲁大师pc版安装包exe下载v6.1020.3005.1020 官方最新版...