当前位置: 首页 > news >正文

JS 实现前端给图片加水印 及 叠加图片

效果展示(图片来自网络)

代码可在vue项目中运行

如只需要叠加图片则只需要1-2处的代码

只需要水印可以把1-2去掉

<!--叠加图片组件--> <template> <div> <div @click="exportImage"> 叠加图片 </div> <div>原始图 <img :src="baseImgOrginal" alt="基础背景图" /> </div> <div>叠加图 <img :src="overlayImgOrginal" alt="叠加图" /> </div> </div> </template> <script setup> import { ref, reactive } from "vue" //基础背景图 const baseImgOrginal = ref( "https://img0.baidu.com/it/u=1886241991,1074114300&fm=253&fmt=auto&app=138&f=JPEG?w=247&h=439" ) //叠加图 const overlayImgOrginal = ref( "https://img0.baidu.com/it/u=2689048786,1779443774&fm=253&fmt=auto&app=138&f=JPEG?w=664&h=500" ) const imageData = reactive({ baseImgImages: null, overlayImgImages: null, }) // 图片加载工具函数 const loadImage = (url) => new Promise((resolve, reject) => { const img = new Image() img.crossOrigin = "Anonymous" img.onload = () => resolve(img) img.onerror = reject img.src = url }) // 图片加载方法 const loadImages = async () => { try { const [baseImg, overlayImg] = await Promise.all([ loadImage(baseImgOrginal.value), loadImage(overlayImgOrginal.value), ]) imageData.baseImgImages = baseImg imageData.overlayImgImages = overlayImg } catch (error) { console.error("图片加载失败:", error) } } // 日期格式化工具 const getFormattedDate = () => { const today = new Date() return `${today.getFullYear()}年${today.getMonth() + 1 }月${today.getDate()}日` } // 水印绘制方法 const drawWatermark = (ctx, canvas, x, y, fillText) => { const fontSize = Math.max(12, canvas.width * 0.015) ctx.font = `bold ${fontSize}px Arial` ctx.fillStyle = "black" ctx.textAlign = "left" const textX = canvas.width / x const textY = canvas.height * y ctx.shadowColor = "rgba(0, 0, 0, 0.5)" ctx.shadowBlur = 2 ctx.fillText(fillText, textX, textY) ctx.shadowColor = "transparent" } // 导出图片 const exportImage = async () => { await loadImages() if (!imageData.baseImgImages || !imageData.overlayImgImages) { alert("请先加载图片") return } // 创建画布 const exportCanvas = document.createElement("canvas") const exportCtx = exportCanvas.getContext("2d") // 设置画布尺寸 exportCanvas.width = imageData.baseImgImages.width exportCanvas.height = imageData.baseImgImages.height // 绘制背景图 exportCtx.drawImage(imageData.baseImgImages, 0, 0) // 开始叠加图片 1 // 计算叠加图位置和尺寸 const overlayHeight = Math.max(12, exportCanvas.width * 0.1) // 根据需要调整 const overlayWidth = (overlayHeight * imageData.overlayImgImages.width) / imageData.overlayImgImages.height const posX = imageData.baseImgImages.width * 0.38 - overlayWidth / 2 // 根据需要调整叠加的位置 const posY = imageData.baseImgImages.height * 0.533 - overlayHeight / 2 // 根据需要调整叠加的位置 // 绘制叠加图 exportCtx.drawImage( imageData.overlayImgImages, posX, posY, overlayWidth, overlayHeight ) // 叠加图片结束 2 // 添加动态日期水印 3 drawWatermark(exportCtx, exportCanvas, 5, 0.357, getFormattedDate()) // 根据需要调整叠加的位置 //动态水印结束 4 // 创建下载链接 const link = document.createElement("a") link.href = exportCanvas.toDataURL("image/png") link.download = `合成图片_${getFormattedDate()}.png` link.click() } </script> <style></style>
http://www.jsqmd.com/news/488971/

相关文章:

  • Torch-TensorRT 相关
  • Android11系统定制实战:如何彻底禁用下拉状态栏(附完整代码修改)
  • 开源渗透测试项目
  • 图片变视频神器Wan2.2-I2V-A14B体验:480P高清流畅,效果惊艳
  • Phi-4-reasoning-vision-15B应用场景:政务办事截图自动分类与材料完整性校验
  • 避开这些坑!亚太杯数学建模A题灌溉系统布线规划实战指南
  • 百川2-13B-Chat WebUI v1.0 入门必看:输入框支持Markdown语法与代码块自动渲染
  • Linux系列七:linux常用命令二
  • 安卓手机抓包神器VNET实战:5分钟搞定京东wskey提取(附青龙面板自动转换教程)
  • vLLM私有化部署实战:从零构建企业级LLM推理服务
  • 2026年口碑好的倒伏照明灯公司推荐:车载自动倒伏照明灯/应急救援倒伏照明灯/野外勘测倒伏照明灯公司精选 - 品牌宣传支持者
  • 习题2.1 简单计算器
  • 数据取证双雄:Passware Kit Forensic 与 ElcomSoft 密码恢复工具的场景化选型指南
  • 模块化嵌入式时钟系统:多源授时与可插拔硬件架构
  • HY-Motion 1.0快速入门:3步搞定3D动作生成,效果惊艳
  • EcomGPT-7B电商知识图谱:Neo4j图数据库集成方案
  • 习题2.2 数组循环左移
  • Web安全攻防实战01:巧用文件包含漏洞获取flag.php
  • Unity中Animator动画结束监听的3种高效实现方案对比
  • 从零到一:基于Easytier构建去中心化虚拟局域网的实战指南
  • RepeatModeler 2.0.7 安装与使用--生信工具75
  • CV论文Ablation Study表格Latex高效排版技巧
  • 基于TI TMS320F28P550的雨滴传感器模块驱动移植与ADC/GPIO应用实战
  • mPLUG VQA效果实测:中英文混合提问的识别与响应能力
  • web渗透-SSRF漏洞深度解析与Discuz!论坛实战攻防
  • jetson orin nano 手把手刷机指南:NVME
  • 零成本搭建家庭Linux服务器:樱花frp+SSH避坑指南(含端口冲突解决)
  • 可视化微调神器Llama Factory:10分钟让大模型听懂你的话
  • 激光除锈机厂家推荐:嘉乐激光-2026专业激光洗模机源头厂家,工业清洗优选品牌 - 栗子测评
  • 大模型工具使用能力评测新标杆:T-Eval基准全面解析(附实战案例)