vue + canvas 图片加水印
思路:将两张图片绘制为一张
目标:输入的文字,绘制到图片上,简单实现图片水印
效果:输入的文字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 图片加水印的更多相关文章
- 使用 ImageEnView 给图片加水印,及建缩略图
摘要: 使用 ImageEnView 给图片加水印,及建缩略图 {Power by hzqghost@21cn.com}unit CutWater; interface uses Math,imag ...
- 火车头dede采集接口,图片加水印,远程图片本地化,远程无后缀的无图片本地化
<?php /* [LocoySpider] (C)2005-2010 Lewell Inc. 火车采集器 DedeCMS 5.7 UTF8 文章发布接口 Update content: 图片加 ...
- thinkphp 3.2.3整合ueditor 1.4,给上传的图片加水印
今天分享一下thinkphp 3.2.3整合ueditor 1.4,给上传的图片加水印.博主是新手,在这里卡住了很久(>_<) thinkphp 3.2.3整合ueditor 1.4 下载 ...
- PHPThumb处理图片,生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转
[强烈推荐]下载地址(github.com/masterexploder/PHPThumb). 注意这个类库有一个重名的叫phpThumb,只是大小写的差别,所以查找文档的时候千万注意. 在网站建设过 ...
- php 分享两种给图片加水印的方法
本文章向码农们介绍 php 给图片加水印的两种方法,感兴趣的码农可以参考一下本文章的源代码. 方法一:PHP最简单的加水印方法 <?php // http://www.manongjc.com ...
- Java图片处理(二)图片加水印
图片加水印,是通过图片重叠绘制实现的.实现代码如下: public static void press(String pressImg, String pressText, String target ...
- PHP给图片加水印
<?php /** *图片加水印 *@param $srcImg 原图 *@param $waterImg 水印图片 *@param $savepath 保存路径 *@param $savena ...
- 如何用node.js批量给图片加水印
上一篇我们讲了如何用node.js给图片加水印,但是只是给某一张图片加,并没有涉及到批量处理.这一篇,我们学习如果批量进行图片加水印处理. 一.准备工作: 首先,你要阅读完这篇文章:http://ww ...
- php对图片加水印--将图片先缩小,再在上面加水印
方法: /** * 图片加水印(适用于png/jpg/gif格式) * * @author flynetcn * * @param $srcImg 原图片 * @param $water ...
随机推荐
- IDEA中打war 包
把war 放入tomcat 的 webapps 目录下,重启tomcat即可自动解压war包跑起来 (最好是,解压完成后,关闭tomcat,把war包拷贝出去,再启动,不然每次启动tomcat都会自动 ...
- linux命令系列-mv(移动-重命名)
#常用命令选项 默认覆盖 -n 不覆盖 -i 交互 -f 不交互直接覆盖 -u 只移动新的文件 -v 显示详细信息 #移动覆盖3个文件到/tmp目录 mv a.txt b.txt c.txt /tmp ...
- redis 初识与安装
一.redis介绍 redis是一个key-value存储系统.和Memcached类似,它支持存储的values类型相对更多,包括字符串.列表.哈希散列表.集合,有序集合. 这些数据类型都支持pus ...
- Redis第一篇章 Hello Word!
1.找到redis目录 2.在新建一个文件夹(myredis) 3.将redis.conf 进行复制到myredis 文件夹里面 4.启动redis redis-server /home/dc2-us ...
- 新闻网大数据实时分析可视化系统项目——3、Hadoop2.X分布式集群部署
(一)hadoop2.x版本下载及安装 Hadoop 版本选择目前主要基于三个厂商(国外)如下所示: 1.基于Apache厂商的最原始的hadoop版本, 所有发行版均基于这个版本进行改进. 2.基于 ...
- ROS学习笔记8-rqt_console和roslaunch
本教程来自于:http://wiki.ros.org/ROS/Tutorials/UsingRqtconsoleRoslaunch rqt_console 和 rqt_logger_level 是ro ...
- ajax 'Content-Type': 'multipart/form-data' ->文件上传
'Content-Type': 'multipart/form-data' :指定传输数据为二进制数据,例如图片.mp3.文件
- 「NOIP2009」靶形数独
传送门 Luogu 解题思路 这题其实挺简单的. 首先要熟悉数独,我们应该要优先搜索限制条件多的行,也就是可能方案少的行,显然这样可以剪枝,然后再发挥一下dfs的基本功就可以了. 细节注意事项 爆搜题 ...
- BSD socket编程学习
1.socket简介 BSD是实现TCP/IP协议通信的软件系统,socket是应用编程接口,为app提供使用TCP/IP协议通信的接口. 网络层IP提供点到点服务(IP地址标识),传输层TCP和UD ...
- Codeforces Round #624 (Div. 3)(题解)
Codeforces Round #624 (Div.3) 题目地址:https://codeforces.ml/contest/1311 B题:WeirdSort 题意:给出含有n个元素的数组a,和 ...