精华内容
下载资源
问答
  • 需求: 微信小程序,上传图片,成功后图片水印,既图片的网络地址也有水印。 上传图片使用uni-app的uni.chooseImage()方法,水印是用canvas。 未知问题: 小程序模拟器上,上传第一张图片没问题,再次上传第二张...

    原博主点击查看

    需求: 微信小程序,上传图片,成功后图片有水印,既图片的网络地址也有水印。
    上传图片使用uni-app的uni.chooseImage()方法,水印是用canvas。

    以下代码可以直接使用:(注意:如果遇到canvas无效或者图片不显示问题:可能就是你在自定义组件内使用canvas,但是没有传递第二个参数this导致的,详见已知问题和解决办法)

    <template>
      <view class="content">
        <view v-for="(photo,index) in photoData" :key="index" class="photo">
          <image :src="photo" @click="previewPhoto(photo,photoData)"></image>
          <view class="closeA" @tap="deletePhoto(index)">&times;</view>
        </view>
        <view class="btnAddPhoto" @click="btnAddPhoto">+</view>
        <!-- 获取有水印的图片过程 必须使canvas显示 获取完成后在隐藏掉canvas 配合canvas样式定位 使其错位 -->
        <!-- canvas的隐藏 在小程序中 使用 v-if或display:none 都不生效   使用hidden属性 true隐藏 false显示 -->
        <canvas :style="{width:canvasWidth,height:canvasHeight}" canvas-id="myCanvas" :hidden='flagC'></canvas>
      </view>
    </template>
    
    <script>
    export default {
      data() {
        return {
          flagC: false,
          photoData: [],
          photoArray: [],
          canvasWidth: '',
          canvasHeight: '',
          photoIndex: 0
        }
      },
      onLoad() {
      },
      methods: {
        // 添加图片事件
        btnAddPhoto() {
          this.photoIndex = 0;
          let ctx = uni.createCanvasContext('myCanvas');
          uni.chooseImage({
            count: 6,
            sourceType: ['album', 'camera'],
            success: res => {
              this.photoArray = res.tempFilePaths;
              uni.showLoading({
                title: "图片加载中..."
              })
              this.callAddWaterMart();
            }
          })
        },
    
        // 调用添加水印的函数
        callAddWaterMart() {
          this.addWaterMark(() => {
            if (this.photoIndex < this.photoArray.length - 1) {
              this.photoIndex++;
              this.callAddWaterMart()
            } else {
              uni.hideLoading()
            }
          })
        },
    
        // 添加水印
        addWaterMark(callback) {
          this.flagC = false
          uni.getImageInfo({
            // 注意此时的地址是正常的图片地址 以下是给图片添加水印返回新的url地址
            src: this.photoArray[this.photoIndex],
            success: res => {
              this.canvasWidth = `${res.width}px`;
              this.canvasHeight = `${res.height}px`;
              var ctx = uni.createCanvasContext('myCanvas');
              // 在自定义组件内 需要传递第二参数 this canvas才生效
              // var ctx = uni.createCanvasContext('myCanvas', this);
              ctx.clearRect(0, 0, res.width, res.height);
              ctx.beginPath();
              ctx.drawImage(this.photoArray[this.photoIndex], 0, 0, res.width, res.height);
    
              // 为图片添加水印
              ctx.translate(res.width / 2, res.height / 2);
              ctx.rotate(45 * Math.PI / 180);
    
    		  //这部分是水印的大小位置和数量
              let horizontal = res.width / 4;
              let vertical = res.height / 3;
              let fonstsize = res.width / 30;
              for (let i = 0; i <= 2; i++) {
                for (let j = 0; j <= 2; j++) {
                  ctx.beginPath();
                  ctx.setFontSize(fonstsize);
                  ctx.setFillStyle("rgba(255,255,255,0.3)");
                  // ctx.fillText("-仅供保险投保使用-", i * horizontal - res.width / 2, j * vertical - res.height / 2);
                  ctx.fillText("--仅供保险投保使用--", (i * horizontal - res.width / 2) * 2, j * vertical - res.height / 2, fonstsize*15*2);
                }
              }
    
              // 开始绘制添加水印的图片并显示在页面中
              ctx.draw(false, () => {
                setTimeout(() => {
                  console.log("asdf");
                  uni.canvasToTempFilePath({
                    canvasId: "myCanvas",
                    success: res => {
                      // 注意此时的地址是加了水印的图片地址(直接url输入浏览器也可以查看包含水印)
                      console.log(123,res.tempFilePath)
                      this.flagC = true
                      this.photoData.push(res.tempFilePath);
                      callback();
                    }
                  })
                // 在自定义组件内 需要传递第二参数 this canvas才生效
               // }, this)
                }, 500)
              });
            }
          })
        },
    
        // 预览图片
        previewPhoto(url, list) {
          uni.previewImage({
            current: url,
            urls: list.map(item => item)
          })
        },
    
        // 删除图片
        deletePhoto(index) {
          this.photoArray.splice(index, 1);
          this.photoData.splice(index, 1);
          console.log(this.photoArray)
        }
      }
    }
    </script>
    
    <style>
    .content {
      padding: 20upx;
    }
    .photo,
    .photo image {
      display: inline-block;
      width: 220upx;
      height: 220upx;
    }
    .btnAddPhoto {
      width: 220upx;
      height: 220upx;
      border: dashed 1px #aaa;
      display: flex;
      justify-content: center;
      align-items: center;
      font-size: 50upx;
    }
    canvas {
      border: solid 1px gray;
      position: absolute;
      left: 5000upx;
    }
    </style>
    
    

    未知问题: 小程序模拟器上,上传第一张图片没问题,再次上传第二张图片,会发现第二张图片显示出来的是两张图片的叠加图;但是在真机使用时候,却不会出现也不影响(故没有处理,猜测解决方案:可以再每次上传图片处理水印时候,使用不同的canvas元素,不要使用同一个去做水印);

    已知问题:
    1.若canvas图片渲染不出来,也就是uni.createCanvasContext()方法无效
    2.或ctx.draw()无效,
    3.或uni.canvasToTempFilePath()接口总是失败;
    4.或拿不到图片的tempFilePath;以上问题都是一个原因导致

    (查看uni-app文档或者微信小程序canvas文档可知原因:是在自定义组件或者公共组件内,必须传递第二个参数this)。

    解决办法就是: createCanvasContext和canvasToTempFilePath两个地方的方法需要传递第二参数this

    var ctx = uni.createCanvasContext('myCanvas', this);
    
    uni.canvasToTempFilePath({获取图片的内容代码 详见下面}, this)
    

    截图是uni-app的文档:在这里插入图片描述
    在这里插入图片描述

    微信小程序工具 操作上传一张图:
    在这里插入图片描述

    未知问题演示:上传第二张图:(叠加图片问题只会在小程序模拟器中出现,在实际真机使用中不会影响)

    在这里插入图片描述

    展开全文
  • 不少摄影爱好者的优质照片有了新的发表平台,图片的增加繁荣了自媒体平台,但同时也出现了不少剽窃他人图片的现象,原来只发原片的摄影爱好者,纷纷开始在自己的图片上打上水印,今天小编给大家介绍一款加水印的软件...

    随着自媒体的迅速发展,不少摄影爱好者的优质照片有了新的发表平台,图片的增加繁荣了自媒体平台,但同时也出现了不少剽窃他人图片的现象,原来只发原片的摄影爱好者,纷纷开始在自己的图片上打上水印,今天小编给大家介绍一款加水印的软件,具体步骤如下:

     

    步骤一:我们在浏览器上搜索“水印云”,点击“立即体验”。

     

    QQ截图20201218142520.png

     

    步骤二:注册一个账号并登录,点击“图片加水印”;

     

    QQ截图20210120151714.png

     

    步骤三:点击“添加文件”,并本地上传图片;

     

    QQ截图20210120153034.png

     

     

     

    步骤四:选择右上角“添加图片水印”,并上传要添加的水印,如图所示;

     

     

    QQ截图20210120153436.png

     

    水印大小可以根据视觉效果来进行调节,调节好字号之后点击“开始加水印”, 水印加好之后点击“下载文件”即可保存到本地电脑。

    QQ截图20210120153734.png

    效果图如下:

    QQ截图20210120154341.png

     

    展开全文
  • 这是一款远程图片保存插件,基于PHP+MYSQL架构,插件启用以后,可以保存网络图片到本地,插件支持同时添加图片水印,此款插件的图片水印,仅对网络图片有效,本地图片无效,本地上传图片添加水印,请另外安装水印...

    这是一款远程图片保存插件,基于PHP+MYSQL架构,插件启用以后,可以保存网络图片到本地,插件支持同时添加图片水印,此款插件的图片水印,仅对网络图片有效,本地图片无效,本地上传图片添加水印,请另外安装水印插件;

    本款插件支持程序本,ZBlogphp1.5.2.1935(Zero),插件使用以前,首先上传图片水印,支持PNG或JPG格式图片,其它格式暂不支持,若要添加透明图片水印,请上传PNG格式图片;此外,图片水印位置随机,并非指选项里的九个位置,而是图片的整个区域。

    演示站点账号

    演示站点地址http://www.28hl.cc/0001/zblog/

    演示后台登录地址http://www.28hl.cc/0001/zblog/zb_system/login.php

    演示后台管理员admin,演示后台密码admin123

    演示站点环境:zblogphp1.5.1.1740(Zero);windows2008;IIS7.5;PHP 5.3.29;mysql5.1

    演示操作说明:登录zblog管理后台,在插件管理里,启用保存远程图片(带水印)2.8插件

    安装使用说明

    首先下载安装ZBlog博客程序,官方下载地址https://www.zblogcn.com/,安装成功以后,登录管理后台,打开插件管理,上传安装此款插件,安装成功以后,若只保存网络图片到本地,启用插件即可,若要同时添加图片水印,管理插件操作,上传图片水印,然后开启水印,选择水印位置,就可以添加水印了。

    041cb90dbc5d1961fd75ae7364895d43.png

    资源下载此资源下载价格为50金币,请先登录

    客服 QQ:1070539660

    邮件客服:315#wayu.cn(#替换@)

    下载价格:50 金币请先登录

    下载说明:客服 QQ:1070539660

    邮件客服:315#wayu.cn(#替换@)

    展开全文
  • 那么问题就来了,如何给图片添加水印呢?今天我们就一起来学习学习以下这种方法,在线添加!在线给图片(照片/身份证/证件照)加水印,通过这个在线工具可以给你的个人证件加上水印,防止身份证复印件被盗用,拒绝...

    有时候,我们需要办理各种证件,办理时都需要出示身份证复印件及原件,那么为了防止“有心人”盗用我们的证件,在复印身份证的时候建议大家都给此复印件添加水印会比较好,比如加上:办理***证件+日期。

    那么问题就来了,如何给图片添加水印呢?今天我们就一起来学习学习以下这种方法,在线添加!在线给图片(照片/身份证/证件照)加水印,通过这个在线工具可以给你的个人证件加上水印,防止身份证复印件被盗用,拒绝上传保证个人信息安全!

    首先,我们需要将身份证/证件照拍照下来,或者扫面件也可以,然后再将图片上传到在线网站进行处理,下面是详细的操作步骤,希望能帮到大家!

    操作步骤:

    第一步:在浏览器上搜索“水印云”或者网址“http://www.shuiyinyun.com/”,点击“立即体验”。

    在这里插入图片描述

    步骤二:注册一个账号并登录,点击“图片加水印”;

    在这里插入图片描述

    步骤三:点击“添加文件”,并本地上传图片;

    在这里插入图片描述

    步骤四:选择右上角“添加文字水印”输入框输入“办理驾驶证使用+日期”,如图所示;

    在这里插入图片描述

    水印大小可以根据视觉效果来进行调节,调节好字号之后点击“开始加水印”,水印加好之后点击“下载文件”即可保存到本地电脑。

    在这里插入图片描述

    处理好的效果图如下:

    在这里插入图片描述

    展开全文
  • 图片加水印

    2018-05-18 15:17:47
    一个给图片添加 水印文字的简单demo,添加文字后, 可以保存到系统相册,简单易操作。
  • 图片添加水印

    2017-03-07 15:37:48
    图片添加水印,图片批量添加水印 批量加水印的小工具 方便简捷快速 可编辑可预览
  • 首先让我们来了解PHP图片加水印的原理。 通过判断文件类型建立图形,然后把其复制到原建立的图形上,填充并建立rectangle,以备写入imagestring()或是在原已经定好的图像程序当中判断水印类型:一是字符串,另是增加...
  • 易语言图片加水印源码,图片加水印,位图水印
  • php图片添加水印

    2018-11-30 11:45:46
    php图片添加水印代码,可以自定义图片水印位置,可以直接调用
  • java 给图片加水印(水印位置与角度可定义)添加水印图片方法重载 添加水印图片方法 import javax.imageio.ImageIO; import javax.swing.*;... * 给图片添加水印、可设置水印图片位置与旋转角 ...
  • .NET图片加水印

    2018-07-24 10:41:17
    .NET图片加水印,可在指定位置增加水印,直接使用,可操作图片类型:jpeg,gif,png,bmp,tiff
  • python实现图片加水印

    2020-12-02 16:37:30
    由于公司业务需求,使用python+PIL+opencv等模块实现对图片加水印以及图片缩放比例后加水印,并生成图片base64格式图片,代码里注释很详细,都可以看懂。 图片路径修改成本地图片位置,直接就可以运行。
  • 可经批量给图片加水印 方便,快捷,易操作
  • java 图片添加水印

    2018-07-16 15:54:39
    java 图片添加水印 图片叠加文字类 图片生成方法,如果需要在已有的图片叠加文字
  • 简单容易用的图片加水印工具,功能很好,简单易用!
  • 目的:给一些图片加上水印。(学习视频推荐:css视频教程)图片水印展示区域样式.watermark-image {position: relative;width: 300px;height: 300px;background: url('https://timgsa.baidu.com/timg?image&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,495
精华内容 12,998
关键字:

图片添加水印