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

前端实现两张图片合成,图片换背景,简单p图程序

前言

最近在自己做一个图文工具网站,图片背景替换功能,后台通过opencv的AI算法抠出了图片主元素,现在需要把抠出来的元素换一个背景色,或者合成到一张背景图片中,如何操作呢?
在这里插入图片描述
在这里插入图片描述

实现方式Demo

我考虑的是使用Canvas的绘图功能,建立一个Canvas对象,先将背景图片绘制上去,然后在把图片绘制上去。我的项目中是直接绘制颜色纯色的颜色块,不过原理是一样的。
代码Demo如下:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><metaname="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"/><meta http-equiv="X-UA-Compatible" content="ie=edge" /><title>图片合成-demo</title></head><body><div><img id="cute_cat" src="./image.png" alt="猫猫"  crossorigin="anonymous"/><img id="bgImg" src="./bg.jpg" alt="背景"  crossorigin="anonymous"/><img id="cute_cat_bgImg" alt="合成图片"  crossorigin="anonymous"/></div><button onclick="drawPosterImage()">测试图片合成</button></body>
</html>
<script>const qrcodeHTML = document.getElementById("cute_cat");const posterHTML = document.getElementById("bgImg");/*** 获取图片* @param imageHTML{HTMLElement} 对应的图片Html* @return {Promise<unknown>}*/function readImage(imageHTML,resolve) {// return new Promise(resolve => {const Image1 = new Image();Image1.src = imageHTML.getAttribute("src");return new Promise((resolve) => {Image1.onload = function () {resolve(Image1);};});}const drawPosterImage = async function () {const canvas = document.createElement("canvas");// 海报模板的宽高const posterW = (canvas.width = posterHTML.offsetWidth);const posterH = (canvas.height = posterHTML.offsetHeight);posterHTML.clientHeight;// 获取了一个 2D 渲染上下文,用于在 canvas 元素上进行绘图操作。const context = canvas.getContext("2d");// 使用 rect() 方法绘制一个矩形context.rect(0, 0, canvas.width, canvas.height);// 设置了矩形的填充颜色为白色context.fillStyle = "#fff";// 使用fill()方法填充矩形,将矩形以指定的颜色进行填充context.fill();// 获取#poster图片const image2 = await readImage(posterHTML);context.drawImage(image2, 0, 0, posterW, posterH);// 获取#qrcode图片const image1 = await readImage(qrcodeHTML);context.drawImage(image1, 0, 0, qrcodeHTML.width, qrcodeHTML.height); // qrcode定位,根据需求修改// 获取canvas base64的图片流const base64 = canvas.toDataURL("image/png");document.getElementById("cute_cat_bgImg").setAttribute("src", base64);};
</script>

合成前:
在这里插入图片描述
合成后:
在这里插入图片描述
是不是很nice


http://www.mrgr.cn/news/11165.html

相关文章:

  • 【电脑使用耳机录音注意事项】
  • LeetCode.55.跳跃游戏(贪心算法思路)
  • 【国产游戏技术:能否引领全球?】
  • 数学建模学习(124):使用Python实现模糊ARAS方法从原理到实战
  • 集合及数据结构第九节————树和二叉树
  • 【MySql】 mysql的组从复制
  • FFmpeg下载与集成:.NET开发者入门指南
  • Nginx学习(第二天)
  • 太赞了!MJ级细节质感!影视级数据升级!SD RealMyth-真神武侠XL丨写实国风-电影质感
  • 小程序常用的模板语法
  • Base CTF [第2周]UPX的
  • 流体力学告诉你,如何最快地炫一瓶啤酒?
  • C# 三种定时器的用法
  • 0基础学习Python路径(27)sys模块
  • 大数据挖掘的步骤是怎样的呢?
  • 如何使用ChatGPT进行数据共享和处理
  • 对派生类指针使用C风格的强制类型转换为基类指针
  • 谷粒商城实战笔记-249-商城业务-消息队列-RabbitMQ工作流程
  • 新手入门:Python+Selenium自动化测试(爬虫),如何自动下载WebDriver!
  • 2025秋招大语言模型落地实践面试题