思路:将两张图片绘制为一张

目标:输入的文字,绘制到图片上,简单实现图片水印

效果:输入的文字1: ‘你猜猜’ + 图片2 = 图片3(不要看清除水印的按钮,本人垃圾 没实现)

选择图片

html  

<input type="file" id="uploadFile" class="clip" accept="image/*" @change="chooseImg">

js

    // 上传图片
chooseImg(event) {
var file = event.target.files[0];
var reader = new FileReader();
reader.readAsDataURL(file);
let _this = this;
reader.onload = function() {
_this.imgsrc = reader.result;
};
_this.imgsrc = file;
}

将文字生成图片

html

<input type="text" placeholder="请输入你要添加的水印文字" class="water-text" v-model="text" @change="conformText()">

js

    //生成水印文字 canvas文字你可以设置为你喜欢的样式
conformText() {
var canvas = document.createElement('canvas') //准备空画布
var ctx = canvas.getContext("2d")
ctx.font = "20px Georgia" //canvas字体
ctx.fillText(this.text, 10, 50)
var gradient = ctx.createLinearGradient(0, 0, canvas.width, 0)
gradient.addColorStop("0", "magenta")
gradient.addColorStop("0.5", "blue")
gradient.addColorStop("1.0", "red")
ctx.fillStyle = gradient
this.imgTextUrl = canvas.toDataURL("image/png")
}

合成图片

html

      <img id="imgsrc" :src="imgsrc" :width="size">
<img id="imgTextUrl" :src="imgTextUrl" :width="size">
<img id="imgUploadUrl" :src="imgUploadUrl" @click="downLoad()">
<div class="conform" @click="confirmImg()">合成图片</div>

js

  // 合成图片
confirmImg(url) {
var canvasAll = document.createElement('canvas')
const size = 180
canvasAll.width = this.size
canvasAll.height = this.size
var context = canvasAll.getContext('2d') // 这是上传图像
var imgUpload = new Image();
var img1 = document.getElementById('imgsrc')
var img2 = document.getElementById('imgTextUrl')
const that = this
imgUpload.onload = function() {
// 绘制
context.drawImage(img1, 0, 0, img1.width, img1.height);
// 再次绘制
context.drawImage(img2, 0, 130, img2.width, img2.height);
// 回调
that.imgUploadUrl = canvasAll.toDataURL('image/png')
}
imgUpload.src = url;
}

点击合成后的图片下载

js

    downLoad() {
var a = document.createElement('a');
a.href = this.imgUploadUrl //将画布内的信息导出为png图片数据
a.download = '水印图片'; //设定下载名称 如果不设置a.download 浏览器会尝试打开这张图片 而图片会下载失败
a.click(); //点击触发下载
}

文字水印可以加个drag 进行优化,拖拽调整位置,有时间我加上

以上就是图片合成的核心代码 很粗糙 但是我目前的思路就是这了

关于去除水印,我是这样想的:

第一种:

1: 点击图片(水印部分)获取当前点击点的色值

2: 将该点颜色替换为目标颜色(目标颜色可以自己手动设置、可以在页面加色卡 自定义选取,有点类似于ps)

第二种:

1: 点击图片(水印部分)获取当前点击点的色值

2: 选取图片内要替换颜色的区域

3: 将区域内同色值的点全部替换为目标颜色

我使用第一种方法时,遇到的问题是第2步中,替换颜色的时候,图片上没有办法添加颜色,鼠标点击的时候那个点的颜色会随着鼠标移动到下一个点走

跪求有这方面经验的大佬指点迷津啊

vue + canvas 图片加水印的更多相关文章

  1. 使用 ImageEnView 给图片加水印,及建缩略图

    摘要: 使用 ImageEnView 给图片加水印,及建缩略图 {Power by hzqghost@21cn.com}unit CutWater; interface uses  Math,imag ...

  2. 火车头dede采集接口,图片加水印,远程图片本地化,远程无后缀的无图片本地化

    <?php /* [LocoySpider] (C)2005-2010 Lewell Inc. 火车采集器 DedeCMS 5.7 UTF8 文章发布接口 Update content: 图片加 ...

  3. thinkphp 3.2.3整合ueditor 1.4,给上传的图片加水印

    今天分享一下thinkphp 3.2.3整合ueditor 1.4,给上传的图片加水印.博主是新手,在这里卡住了很久(>_<) thinkphp 3.2.3整合ueditor 1.4 下载 ...

  4. PHPThumb处理图片,生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转

    [强烈推荐]下载地址(github.com/masterexploder/PHPThumb). 注意这个类库有一个重名的叫phpThumb,只是大小写的差别,所以查找文档的时候千万注意. 在网站建设过 ...

  5. php 分享两种给图片加水印的方法

    本文章向码农们介绍 php 给图片加水印的两种方法,感兴趣的码农可以参考一下本文章的源代码. 方法一:PHP最简单的加水印方法 <?php // http://www.manongjc.com ...

  6. Java图片处理(二)图片加水印

    图片加水印,是通过图片重叠绘制实现的.实现代码如下: public static void press(String pressImg, String pressText, String target ...

  7. PHP给图片加水印

    <?php /** *图片加水印 *@param $srcImg 原图 *@param $waterImg 水印图片 *@param $savepath 保存路径 *@param $savena ...

  8. 如何用node.js批量给图片加水印

    上一篇我们讲了如何用node.js给图片加水印,但是只是给某一张图片加,并没有涉及到批量处理.这一篇,我们学习如果批量进行图片加水印处理. 一.准备工作: 首先,你要阅读完这篇文章:http://ww ...

  9. php对图片加水印--将图片先缩小,再在上面加水印

    方法: /**  * 图片加水印(适用于png/jpg/gif格式)  *  * @author flynetcn  *  * @param $srcImg  原图片  * @param $water ...

随机推荐

  1. 代码审计变成CTF

    0x01 代码审计中的信息收集 一个cms代码量确实不少,通读代码耗时长,效果也不一定好.而一个功能点如果之前出过漏洞,特别是多次出现漏洞的地方,证明开发者对这个漏洞的理解不充分,很容易再次绕过补丁. ...

  2. 聚合数据实名认证接口-java方法

    只需要填入购买的APPKEY,然后直接调用方法JuheDemo.info(user_name, anchor_card);传入姓名和身份证号,根据获取的返回参数进行拆分,如res=1说明正确. //进 ...

  3. Community Cloud零基础学习(二)信誉等级设置 & Global Search设定

    当我们创建了Community以后,我们需要对他进行定制页面来使community用户更好的使用.此篇主要描述两点,信誉等级设定以及Global Search 设定.其他的内容后期再慢慢描述. 一. ...

  4. 清除编译缓存DerivedDate

    当多次重构工程造成代码没有错误却编译失败时,可以尝试删除DerivedData目录.DerivedData目录是Xcode的编译缓存,路径是~/Library/Developer/Xcode/Deri ...

  5. Django 3.0 中连接mysql 8.0,可以不使用pymysql ,升级Mysqlclient即可

    python 中,连接mysql一般都推荐用pymysql ,而且在django中,网上的教程都是这么连接mysql的. import pymysql pymysql.install_as_MySQL ...

  6. 图解Mybatis框架原理及使用

    1.前言 努力学习完ssm框架之后,终于也成功的把三大框架的使用以及配置文件细节忘得一干二净.为了努力捡起来以及方便今后的复习,决定写一篇博客记录一下. 本博客的所有分析都是在持久层接口以及接口中的方 ...

  7. PHP 附录 : 用户注册与登录完整代码

    login.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...

  8. C# 自定义控件容器,设计时可添加控件

    本分步指南介绍在将 UserControl 放在 Windows 窗体上之后,如何将 UserControl 对象用作设计时控件容器.可能会有这样的情况:您想将一个控件拖到 UserControl 中 ...

  9. Python中的*可变参数与**关键字参数

    1.定义了一个需要两个参数的函数 def print_str(first, second): print first print second if __name__ == "__main_ ...

  10. 吴裕雄--天生自然JAVAIO操作学习笔记:字符编码与对象序列化

    public class CharSetDemo01{ public static void main(String args[]){ System.out.println("系统默认编码: ...