H5## 标题

图片加水印

   </div>
</body>
<script>function blobToImg(blob) {return new Promise((resolve, reject) => {let reader = new FileReader()reader.addEventListener('load', () => {let img = new Image()img.src = reader.resultimg.addEventListener('load', () => resolve(img))})console.log(blob)reader.readAsDataURL(blob)})}function imgToCanvas(img) {let canvas = document.createElement('canvas')canvas.width = img.widthcanvas.height = img.heightlet ctx = canvas.getContext('2d')ctx.drawImage(img, 0, 0)return canvas}function watermark(canvas, text) {return new Promise((resolve, reject) => {let ctx = canvas.getContext('2d')// 设置填充字号和字体,样式ctx.font = "24px 宋体"ctx.fillStyle = "#FFF"// 设置右对齐ctx.textAlign = 'right'// 在指定位置绘制文字,这里指定距离右下角20坐标的地方let chr = text.split("")let temp = ""let row = []console.log(chr)for (let a = 0; a<chr.length;a++){if( ctx.measureText(temp).width < 220 && ctx.measureText(temp+(chr[a])).width <= 220){//220水印宽度temp += chr[a];}else{row.push(temp);temp = chr[a];}console.log(temp,chr[a])}row.push(temp)console.log(row)for(let b=0;b<row.length;b++){ctx.fillText(row[b], canvas.width - 20, (canvas.height - 150)+(b+1)*30)//每行字体y坐标间隔30}// ctx.fillText(row[b], canvas.width - 20, canvas.height - 20)canvas.toBlob(blob => resolve(blob))})}function imgWatermark(dom, text) {let input = document.createElement('input')input.setAttribute('type', 'file')input.setAttribute('accept', 'image/*')input.onchange = async () => {console.log(input.files[0])let img = await blobToImg(input.files[0])let canvas = imgToCanvas(img)let blob = await watermark(canvas, text)let newImage = await blobToImg(blob)dom.appendChild(newImage)}dom.appendChild(input)}let dom = document.querySelector('#container')console.log(dom)imgWatermark(dom, '            16:302022/06/22 星期三我在这里')
</script>

uniapp

var that = this;
uni.chooseImage({
count:1, //默认9
sizeType: [‘original’, ‘compressed’], //可以指定是原图还是压缩图,默认二者都有
sourceType: [‘album’, ‘camera’], //从相册选择
success: (res) => {
uni.getImageInfo({
src:res.tempFilePaths[0],
success: (ress) => {
console.log(ress)
that.w = ress.width / 3 + ‘px’; //3可修改
that.h = ress.height / 3 + ‘px’; //3可修改
let ctx = uni.createCanvasContext(‘firstCanvas’,that); /** 创建画布 */
setTimeout(()=>{//此处加延迟 可以避免图片的不完整
//将图片src放到cancas内,宽高为图片大小
ctx.drawImage(res.tempFilePaths[0], 0, 0, ress.width /3, ress.height/3) //与上面宽高一致
ctx.setFontSize(12) //字号
ctx.setFillStyle(‘#fff’); //颜色
that.nowTime= moment().format(“YYYY/M/D hh:mm:ss “);
that.weekText=that.getWeek ()
//多行水印 通过循环添加水印或者直接单行水印写多个
let text =that.nowTime+that.weekText+’ ‘+uni.getStorageSync(‘USER’).name+’ '+‘南京市’
let chr = text.split(””)
let temp = “”
let row = []
for (let a = 0; a < chr.length; a++) {
if (ctx.measureText(temp).width < 120 && ctx.measureText(temp +(chr[a])).width <= 120) {
temp += chr[a];
} else {
row.push(temp);
temp = chr[a];
}
}
row.push(temp)
for (let b = 0; b < row.length; b++) {
ctx.fillText(row[b],ress.width / 3 * 0.5, (ress.height / 3 * 0.4) + (b + 1) * 15) //0.5 数值越大越靠右 0.4数值越大越往下
}
//单行添加水印
ctx.fillText(text,ress.width / 3 * 0.5, (ress.height / 3 * 0.4) + (b + 1) * 15) //0.5 数值越大越靠右 0.4数值越大越往下
ctx.draw(false, () => {
uni.canvasToTempFilePath({
canvasId: ‘firstCanvas’,
success: (res1) => {
that.src=res1.tempFilePath//加过水印的图片
},
fail(err) {
console.log(err)
}
},that);
});
},500)
}
})
},
fail: function(err) {
console.log(err)
}
});

H5\uniapp图片添加水印相关推荐

  1. uni-app图片加水印;小程序图片添加水印;使用canvas上传图片加水印

    原博主:点击查看 需求: 微信小程序,上传图片,成功后图片有水印,既图片的网络地址也有水印. 上传图片使用uni-app的uni.chooseImage()方法,水印是用canvas. 以下代码可以直 ...

  2. uniapp制作水印相机给图片添加水印并且保存图片至本地

    uniapp保存文件的三种方式 文件主要分为两大类: 1.代码包文件:代码包文件指的是在项目目录中添加的文件. 2.本地文件:通过调用接口本地产生,或通过网络下载下来,存储到本地的文件. 其中本地文件 ...

  3. uni 根目录路径_如何解决uniapp图片路径错误问题

    uniapp图片路径错误的解决办法:1.在根目录"manifest.json"中配置h5下的"publicPath":2.在h5配置中运行的基础路径进行配置即可 ...

  4. uniapp 图片上传与展示

    项目场景: uniapp 图片 上传 阿里 OSS 对象存储 需求描述: H5移动端开发中需要用户上传图片头像.身份证件等需求时.需要将图片上传至阿里oss中存储,并且下载到当前页面进行展示. 解决方 ...

  5. uniapp vue 添加水印模板

    在默认文件先新建components文件夹 创建vue 文件 'wm-watermark.vue' <template><!-- 水印 --><view class=&q ...

  6. 小程序使用 canvas 给图片添加水印

    小程序使用 canvas 给图片添加水印 操作 canvas 相关的 api 使用的是微信最新提供的 (一路过来踩了好多坑-) 浅用微信小程序 canvas 给图片添加简单水印, 废话不多说, 先上效 ...

  7. vue上传图片加水印;js上传图片添加水印;vue给图片添加水印;canvas图片添加水印;canvas画布导出图片

    uni-app微信小程序图片加水印,点击看这篇 需求场景: 要求上传图片,并给图片添加水印.传给后端的也是有水印的图片. 逻辑步骤: 通过input上传图片,拿到图片的信息和base64,将图片绘制到 ...

  8. 分享几个用 Python 给图片添加水印的方法,简单实用

    作者 |俊欣 来源 |关于数据分析与可视化 今天来分享几种可以给图片添加水印的方法,都是十分的简单实用,大家在看了之后也可以私底下去自己试试,有些方法需要的代码量就比较少,有些方法需要的代码量就稍微多 ...

  9. php 怎么支持中文图片显示,给图片添加水印(支持中文)并生成缩略图_php

    // **************************************** // // 功能:给图片添加水印(支持中文)并生成缩略图 // 参数: $srcFile 图片文件名 // $d ...

最新文章

  1. linux日常笔记3
  2. SA 分析专家认证名单出炉!这一期学员太牛了
  3. contourf参数 python_Python机器学习(六)
  4. web 网页按比例显示图片 js
  5. adf4350配置_配置MySQL以进行ADF开发
  6. (一)Neo4j在Centos7虚拟机上的安装
  7. 第七章:在Spark集群上使用文件中的数据加载成为graph并进行操作(2)
  8. codeproject的文章【一】
  9. 微信emoji表情web显示
  10. Matlab如何滤出高音,基于Matlab滤波器及均衡器设计
  11. 图解机器学习算法(3) | KNN算法及其应用(机器学习通关指南·完结)
  12. 生命在于答疑——git推送本地到库鉴权失败
  13. city机器人 东京diver_东京一日游路线推荐
  14. Linux Puppet基础知识
  15. Python10行代码实现模拟百度搜索
  16. 数据结构荣誉课-第一次实验-解题报告
  17. IPv6安装和配置方法,IPv6资源汇总
  18. 程序员公众号编辑工具
  19. Cocos2dx 之 cocosbuilder的使用
  20. 关于video++,jsrun,有道笔记等的感想

热门文章

  1. 被多次定义,第一次再次定义
  2. SQL25 获取员工其当前的薪水比其manager当前薪水还高的相关信息
  3. SpringMVC整合mybatis(终结版)
  4. java:定义USB接口
  5. 初探 MacBook Pro 刘海屏
  6. 公告:博客新皮肤上线啦
  7. 香帅的北大金融学课笔记15 -- 大师投资智慧
  8. 怎么加入到开源社区,开心做开源
  9. 安卓中Paint类和Canvas类的方法汇总
  10. 分布式任务调度平台XXL-JOB测试报告