首页 > 编程语言 >前端实现两张图片合成,图片换背景,简单p图程序

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

时间:2024-08-25 13:21:55浏览次数:16  
标签:canvas resolve const 前端 两张 posterHTML context 图片

前言

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

实现方式Demo

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

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="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

标签:canvas,resolve,const,前端,两张,posterHTML,context,图片
From: https://blog.csdn.net/qq_44849312/article/details/141498973

相关文章

  • 基于python的文字转图片工具
    地址https://hub.docker.com/r/rainsccc/strtoimg拉取镜像后,可以启动一个容器来运行该应用程序。以下命令会启动容器并将其端口映射到主机上:dockerrun-d-p5000:5000rainsccc/strtoimg:latest-d:在后台运行容器。-p5000:5000:将容器的5000端口映射到主机的5000端口......
  • 前端必知必会-CSS 属性选择器
    文章目录CSS属性选择器CSS[attribute]选择器CSS[attribute="value"]选择器CSS[attribute~="value"]选择器CSS[attribute|="value"]选择器CSS[attribute^="value"]选择器CSS[attribute$="value"]选择器CSS[attribute*="value"......
  • 前端必知必会-CSS 图片库和图像精灵
    文章目录CSS图片库CSS图像精灵图像精灵-简单示例图像精灵-创建导航列表图像精灵-悬停效果总结CSS图片库CSS可用于创建图片库。以下图片库使用CSS创建:示例<html><head><style>div.gallery{margin:5px;border:1pxsolid#ccc;float:left;......
  • 通义千问( 五 ) 图片分析
    5.多模态5.1.图片分析5.1.1.介绍通义千问VL(Qwen-VL)是阿里云研发的大规模视觉语言模型(LargeVisionLanguageModel,LVLM),可以以图像、文本、检测框作为输入,并以文本和检测框作为输出,支持中文多模态对话及多图对话,并具有更好的性能,是首个支持中文开放域的通用定位模型和......
  • 【GNSS射频前端】MA2769初识
    MAX2769芯片概述:MAX2769是一款单芯片多系统GNSS接收器,采用Maxim的低功耗SiGeBiCMOS工艺技术。集成了包括双输入低噪声放大器(LNA)、混频器、图像拒绝滤波器、可编程增益放大器(PGA)、压控振荡器(VCO)、分数-N频率合成器等在内的完整接收链。主要特点:支持GPS、GLONASS和Gal......
  • 如何创建图片按钮
    文章目录1.概念介绍2.使用方法2.1filled风格2.2filledTonal风格2.3outlined风格3.代码与效果3.1示例代码3.2运行效果4.内容总结我们在上一章回中介绍了"如何修改NavigationBar组件的形状"相关的内容,本章回中将介绍IconButtion组件.闲话休提,让我们一起Talk......
  • 【前端入门】HTML5全攻略
    HTML概述HTML指的是超文本标记语言,它是用来描述网页的一种语言。HTML不是一种编程语言,而是一种标记语言。标记语言是一套标记标签。Web标准是由W3C组织和其他标准化组织制定的一系列标准的集合。W3C(万维网联盟)是由国际最著名的标准化组织。Web标准的构成(重点)主要包括......
  • 前端常用npm库大全-vue,react,通用(持续更新)
    构建工具Name/GitHub/NPM描述演示地址Vite下一代的前端工具链CreateReactApp通过运行一个命令来设置现代Web应用程序。CreateReactApp中文文档通过运行一个命令来设置现代Web应用程序。Webpackjs强大的静态模块打包工具,主要用于现代JavaScript应用的构建和打包Roll......
  • 【Python爬虫】批量爬取图片的简单案例
    @目录1.原理2.寻找批量的图片URL的储存地址2.1百度2.2搜狗2.3必应2.4总结3.处理存储图片URL的请求头4.完整demo1.原理网页中的图片有自己的URL,访问这些URL可以直接得到图片,譬如,访问下面这个URL,你就能得到一张图片:https://img-blog.csdnimg.cn/a3bad4725ba94301b7cba7dd820......
  • 前端速通面经八股系列(一)—— CSS篇
    CSS高频面经目录一、CSS基础1.CSS选择器及其优先级2.CSS中可继承与不可继承属性有哪些3.display的属性值及其作用4.display的block、inline和inline-block的区别5.隐藏元素的方法有哪些6.link和@import的区别7.transition和animation的区别8.display:none与visi......