uniapp实现上传图片添加日期和地点水印,修复多张图片同时上传,显示相同图片问题

这篇具有很好参考价值的文章主要介绍了uniapp实现上传图片添加日期和地点水印,修复多张图片同时上传,显示相同图片问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

整体实现流程:首先调用uni.chooseImage方法,配置count、sizeType、sourceType参数,分别代表选择的图片个数、original 原图,compressed 压缩图,默认二者都有、是从相册还是拍照。

然后在成功的回调中拿到上传的所有图片并存储。然后就是添加水印,调用uni-getImageInfo拿图片信息,然后使用canvas进行水印添加。在成功的回调中进行图片上传(uni-uploadFile)即回显。代码如下:

imgCount就是限制上传个数,当我们同时使用拍照和相册上传,会出现当上传一张拍照图片,再从相册上传这个如果不做imgCount--操作上传的个数会出现问题。也有其他实现形式哦。

如果我们在成功的回调中拿到所有图片,直接在success中循环调用添加水印方法。例如选择了两张图片就会出现上传的两张图片一摸一样。所以我没有在success中直接遍历。 

/**选择图片*/
  selectPicture() {
    uni.chooseImage({
      count: this.imgCount,
      sizeType: ['compressed'], // 压缩图片
      sourceType: ['camera', 'album'], // 拍照或相册上传图片
      success: (res: any) => {
        this.imgCount-- // 这里主要为了限制选择的图片,解决图片先拍照上传,后有进行相册选择
        // 每次清空数组
        this.photoArr.length = 0

        // 存储上传的图片
        this.photoArr.push(...res.tempFiles.map((item: any) => item.path)) 
        // 添加水印
        this.callAddWaterMart()
      }
    })
  }

 这个callback方法就是为了在上传并添加水印后在给第二张图片添加。代码中也有注释,我就不多说了 

 // 调用添加水印的函数
  callAddWaterMart() {
    // 这个是真正的添加水印方法,传入回调是为了解决同时上传多张,会显示相同的图片。
    this.getInfoImage(() => {
      if (this.photoIndex < this.photoArr.length - 1) {
        this.photoIndex++
        this.callAddWaterMart()
      }
    })
  }

// 这里为了方便写到一个函数里
getInfoImage(callback: any) {
    // 小程序没有document,只能在页面中建一个canvas,然后在成功时给他隐藏。
    this.flag = false
    // 这个函数是可以拿到图片的一些信息,宽高等
    uni.getImageInfo({
       // 初始化photoIndex=0,拿到第一张图片,并添加水印
      src: this.photoArr[this.photoIndex],
      success: res => {
        // // 设置画布高度和宽度
        this.canvasWidth = `${res.width}px`
        this.canvasHeight = `${res.height}px`
        //获取当前时间
        let roleNameInfo = date(new Date(), 'long') + '\n' + this.from.data.address
        var ctx = uni.createCanvasContext('imgId')
        ctx.drawImage(this.photoArr[this.photoIndex], 0, 0, res.width, res.height)
        // 为图片添加水印
        ctx.setFontSize(30) //水印字体大小
        ctx.setFillStyle('red') //水印颜色
        // 水印位置
        ctx.fillText(roleNameInfo, 60, res.height - 60)
        // 开始绘制添加水印的图片并显示在页面中
        ctx.draw(false, result => {
          setTimeout(() => {
            //把当前画布指定区域的内容导出生成指定大小的图片,并返回文件路径。在自定义组件下,第二个参数传入自定义组件实例,以操作组件内 <canvas> 组件。
            // 这里主要为了拿到路径
            uni.canvasToTempFilePath({
              canvasId: 'imgId',
              // 设置输出的图片的宽度高度,会加快输出图片时间
              destWidth: res.width,
              destHeight: res.height,
              fileType: 'jpg', //jpg为了压缩
              quality: 0.8, //图片的质量
              success: res => {
                console.log('res', res)
                this.flag = true


                /** 添加上传进度和图片路径 */
                this.currentImgList.push({
                  path: res.tempFilePath,
                  uploadPercent: 0
                })
                // 上传图片
                this.uploadfile(res.tempFilePath)
                // 给所有的图片添加水印
                callback()
              },
              fail: err => {
                uni.hideLoading()
                // this.$u.toast('上传错误')
              }
            })
          }, 500)
        })
      },
      fail: err => {
        console.log(err)
      }
    })
  }

uploadFile我就不说了,每个公司都不一样的路径,看文档就可以了。这里只提示思路,代码大家自行实现。文章来源地址https://www.toymoban.com/news/detail-519872.html

到了这里,关于uniapp实现上传图片添加日期和地点水印,修复多张图片同时上传,显示相同图片问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用JavaScript给图片添加图片水印的前端实现方法

    当涉及图片处理时,JavaScript是一种强大的工具。在本篇博客中,我们将学习如何使用JavaScript来给图片添加水印,并将其封装成一个函数,以便在需要的时候重复使用。 在开始之前,确保你已经准备好了以下内容:         1.一张待添加水印的图片。         2.水印图片。

    2024年03月15日
    浏览(63)
  • uniapp+uView 实现自定义水印相机,拍完照片给图片加水印,从相册选择图片加水印功能

    样式图如上所示 页面分为取景框和拍照完成后预览,本功能设计到,公共上传组件,相机也页面,获取定位地址,页面中如何用该上传组件 UI实现 取景界面分为上下两个部分,上部分为camera取景框组件,下部分为操作区域。 取景框组件上的关闭和水印,以及拍完照片后的略

    2024年04月14日
    浏览(126)
  • 基于Java和Spring:实现图片压缩、WebP格式转换与水印添加

    大多数公司通常会拥有面向企业端(B端)和消费者端(C端)的应用,如淘宝IOS/Android端和PC端。对于C端产品而言,往往具备访问量大、数据量庞大的特点,例如类似淘宝的商品详情页,其中包含大量且尺寸较大的图片。在这种前提下,为了确保良好的用户体验,需要在保证图

    2024年03月24日
    浏览(54)
  • uniapp - 微信小程序实现腾讯地图位置标点展示,将指定地点进行标记选点并以一个图片图标展示出来(详细示例源码,一键复制开箱即用)

    在uniapp微信小程序平台端开发,简单快速的实现在地图上进行位置标点功能,使用腾讯地图并进行标点创建和设置(可以自定义标记点的图片)。 你只需要复制代码,改个标记图标和位置即可。

    2024年02月08日
    浏览(59)
  • uniapp中的uni-file-picker组件上传多张图片到服务器,可添加,预览,删除图片

    前言:在uniapp官方文档中的uni-file-picker组件可实现图片上传功能,官方文档:uniapp官网 中的案例不能完全满足需求,官网中默认的是上传到自带的服务空间 以下是代码: view代码: :auto-upload=\\\"false\\\"加上这个取消自动上传 methods方法 选择图片 上传图片 删除图片 上传事例: 参

    2024年02月11日
    浏览(62)
  • 给图片添加图片水印

            react + antd 4.x(此版本没有watermark水印),需要将后端传递的图片添加图片水印 1、水印添加问题 2、水印添加完成后显示问题         将watermark水印图片和img需要添加水印的图片同时创建了,以至于在img创建成功后watermark有可能还没有创建成功,导致没有进入

    2024年02月21日
    浏览(59)
  • uniapp水印相机(水印照片,图片加水印)

    在实际开发的项目中,我们有时候会遇到相机拍照上传照片的时候需要带有水印的功能。下面整理了我在自己的项目中做的水印相机(完整源码)功能实战分享给大家。 水印中内容包含如下(实际包含的内容根据你的实际需求而定,这里只是以我的项目需求为例): 具体日期时间

    2024年02月03日
    浏览(40)
  • uniapp实现图片和视频上传

    模板部分 js部分 使用 效果展示

    2024年02月03日
    浏览(37)
  • uniapp实现自定义上传图片

    在正式自定义上传前我们先将静态页面搭建好。 样式代码: 通过uniapp的uni.chooseImage从本地相册选择图片或使用相机拍照。 在data中定义一个响应式数据来接收我们选择的图片,然后通过v-for渲染到我们的页面,达到缩略图的效果。 代码: 效果: 最初我们定义了只能选择九张

    2024年02月12日
    浏览(30)
  • Python操作Word水印:添加文字或图片水印

    在Word文档中,可以添加半透明的图形或文字作为水印,以保护文档的原创性,防止未经授权的复制或使用。除了提供安全功能外,水印还可以展示文档创作者的信息、附加的文档信息,或者仅用于文档的装饰。本文将介绍如何使用 Spire.Doc for Python 在程序中的轻松 添加文字和

    2024年02月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包