小程序上传图片加水印

小程序上传图片加水印思路:1.点击图片上传2.加水印3.传给后台html<canvasclass=’canvas’canvas-id=”firstCanvas”></canvas>css.canvas{border:2rpxsolidpink;background:pink;width:100%;height:100%;//position:fixed;left:100%;想隐藏画布单又想执行画布方法,用这个css;用display会不执行

大家好,又见面了,我是你们的朋友全栈君。

思路:
1.点击图片上传
2.加水印
3.传给后台
html

<canvas class='canvas' canvas-id="firstCanvas"></canvas>

css

.canvas{ 
   
  border: 2rpx solid pink;
  background: pink;
  width: 100%;
  height: 100%;
  //position:fixed;left:100%; 想隐藏画布单又想执行画布方法,用这个css;用display会不执行画布
}

js

//点击方法上传
  chooseImg: function () { 
   
    var that = this;
    wx.showActionSheet({ 
   
      itemList: ['手机拍摄', '图片上传'],
      success: function (res) { 
   
        //if (res.tapIndex == 0) { 
   
          wx.chooseImage({ 
   
            count: 3, // 默认9
            sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
            sourceType: ['camera'], // 可以指定来源是相册还是相机,默认二者都有
            success: function (res) { 
   
              // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
              var tempFilePaths = res.tempFilePaths;//
              for (let item of tempFilePaths) { 
   
                //that.uploadimg(item);//这是直接上传原图
              }
              if (that.data.imgList.length != 0) { 
   
                that.setData({ 
   
                  imgList: that.data.imgList.concat(res.tempFilePaths)
                })
              } else { 
   
                that.setData({ 
   
                  imgList: res.tempFilePaths
                })
              }
              that.watermark();//调方法加水印
            }
          })
      },
    })
  },
  //加水印
	watermark:function() { 
   
    let that = this
    console.log(that.data.imgList,11111)//上传的图片
		//获取图片详细信息
		for (let item of that.data.imgList) { 
   
			wx.getImageInfo({ 
   
				src: item,
				success: (ress) => { 
   
					console.log("获取图片详情", item)
          let ctx = wx.createCanvasContext('firstCanvas')
					that.setData({ 
   
						canvasHeight: ress.height,
						canvasWidth: ress.width
          })
					//将图片src放到cancas内,宽高为图片大小
					ctx.drawImage(item, 0, 0, 56, 56)
					//将声明的时间放入canvas
					ctx.setFontSize(17) //注意:设置文字大小必须放在填充文字之前,否则不生效
					ctx.setFillStyle('grey')
					ctx.fillText("水印", 0, 30)
          			ctx.strokeText("水印", 0, 30)
					ctx.draw(false, function () { 
   
					wx.canvasToTempFilePath({ 
   
						canvasId: 'firstCanvas',
						success: (res) => { 
   
                			that.uploadimg(res.tempFilePath);//上传图片,加了水印的图片
							},
							fail: (e) => { 
   
								console.log(e)
							}
						})
					})
				}
			})
		}
  },
  //上传图片
	 uploadimg(localUrl) { 
   
    let that = this;
    wx.showLoading({ 
   
      title: "正在上传图片",
      mask: true
    })
    var tempFilePaths = [];
    tempFilePaths.push(localUrl)
    //这是公司封装的上传方法,就是ajax上传而已
    ygPost.uploadFile(tempFilePaths, function (res) { 
   
      wx.hideLoading();
      if (res) { 
   
        wx.showToast({ 
   
          title: '图片上传成功',
          icon: 'success',
          duration: 1000
        })
        let arr = []
        arr.push(res)
        that.setData({ 
   
          uploadList: that.data.uploadList.concat(arr)//加了水印的图片合集
        })
        console.log(that.data.uploadList, 1111)
        wx.hideLoading();
      }
    })
  },
  //测试end

注意事项:
1.如果在画图完成后,有对应操作时,必须在draw的callback后执行,比如图片预览、改变画布大小等
ctx.draw(false, function() {

console.log(‘后续操作’);

})
2.draw完成后的图片预览
wx.canvasToTempFilePath({

x: 0,
y: 0,
width: width,
height: height,
canvasId: canvasId,
fileType: ‘png’,
success: function(res) {

wx.previewImage({

urls: [res.tempFilePath],
})
}
}, ctx)

大概思路
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148950.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • springcloud gateway作用_gateway网关路由配置

    springcloud gateway作用_gateway网关路由配置Gateway服务网关在SpringCloud中网关的实现包括两种:①gateway②zuulzuul是基于servlet的实现,属于阻塞式编程,而springcloudgateway则是基于spring5中提供的webflux,属于响应式编程的实现,具备更好的性能.gateway快速入门1创建新的module,引入SpringCloudGetaway的依赖和nacos的服务发现依赖 <!–网关依赖–><dependency> <

    2022年10月9日
    0
  • C# 多线程 Parallel.ForEach 和 ForEach 效率问题研究及理解

    C# 多线程 Parallel.ForEach 和 ForEach 效率问题研究及理解最近要做一个大数据dataTable循环操作,开始发现运用foreach,进行大数据循环,并做了一些逻辑处理。在循环中耗费的时间过长。后来换成使用Parallel.ForEach来进行循环。一开始认为, 数据比较大时,Parallel.ForEach肯定比 ForEach效率高,后来发现,其实并不是这样。我用了1000万次循环测试:{CSDN:CODE:2601125}

    2022年7月19日
    22
  • springboot实现文件上传到数据库_javaweb将数据写入数据库

    springboot实现文件上传到数据库_javaweb将数据写入数据库一、添加pom依赖<!–excel解析包–><!–https://mvnrepository.com/artifact/org.apache.poi/poi–&g

    2022年8月16日
    8
  • menuconfig 图形化配置

    menuconfig 图形化配置  uboot或Linux内核可以通过输入“makemenuconfig”来打开图形化配置界面,menuconfig是一套图形化的配置工具,需要ncurses库支持。ncurses库提供了一系列的API函数供调用者生成基于文本的图形界面  menuconfig重点会用到两个文件:.config和Kconfig,.config文件保存着uboot或Linux内核的配置项,使用menuconfig配置完uboot或Linux内核以后肯定要更新.config

    2022年5月10日
    42
  • java前端好学还是后端好学,一篇文章帮你解答

    java前端好学还是后端好学,一篇文章帮你解答蚂蚁金服一面:下午杭州的电话,问有没有空,果断有空,虽然感觉略显紧张,有点懵逼。面试的题目:HashMap和Hashtable的区别实现一个保证迭代顺序的HashMap说一说排序算法,稳定性,复杂度说一说GC可以保证的实习时长职业规划整体来说,一面的基础性问题比较多,所以博主基本都答出来了,准备过还是有些用处的。所以一面完了感觉还不错,接着第二天下午就二面了。蚂蚁金服二面二面是我最慌的面试,因为二面是最关键的,是最大的主管面试,所以非常关键,整体来说,二面的节奏非常快,和一面完全

    2022年7月9日
    16
  • 正则表达式匹配字符串_正则不包含某个字符串

    正则表达式匹配字符串_正则不包含某个字符串正则表达式介绍简单的模式字符匹配方括号[]反斜杠\特殊字符重复的事情元字符*元字符+元字符?元字符{m,n}正则表达式(Regularexpressions也称为REs,或regexes或regexpatterns),本质上是一个微小的且高度专业化的编程语言。它被嵌入到Python中,并通过re模块提供给程序猿使用。使用正则表达式,你需要指定一些…

    2022年8月21日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号