webgl canvas系列——快速加背景、抠图、加水印并下载图片

这篇具有很好参考价值的文章主要介绍了webgl canvas系列——快速加背景、抠图、加水印并下载图片。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


webgl canvas系列——快速加背景、抠图、加水印并下载图片,webgl-canvas,webgl,javascript,前端

⭐前言

大家好,我是yma16,本文分享webgl canvas系列——快速抠图、加水印。
该系列往期文章
web canvas系列——快速入门上手绘制二维空间点、线、面

⭐canvas绘制图片

方法 作用
drawImage(image, x, y) image 是 image 或者 canvas 对象,x 和 y 是其在目标 canvas 里的起始坐标。
drawImage(image, x, y, width, height) width 和 height,这两个参数用来控制 当向 canvas 画入时应该缩放的大小

💖绘制csdn图片

绘制csdn图片
webgl canvas系列——快速加背景、抠图、加水印并下载图片,webgl-canvas,webgl,javascript,前端
js使用drawImage绘制图片

function drawImg() {
    const canvas = document.getElementById("tutorial");
    if (canvas.getContext) {
        const ctx = canvas.getContext("2d");
        const img = new Image();
        img.onload = function () {
            ctx.drawImage(img, 0, 0);
        };
        img.src = "/src/assets/csdn.png";

    }
    else {
        console.log('不支持canvas')
    }
}



window.onload = () => {
    drawImg()
}

webgl canvas系列——快速加背景、抠图、加水印并下载图片,webgl-canvas,webgl,javascript,前端

💖给png图片加背景

js先填充cavans背景在画图

function drawImg() {
    const canvas = document.getElementById("tutorial");
    if (canvas.getContext) {
        const ctx = canvas.getContext("2d");
        // background
        ctx.fillStyle = 'rgba(0, 0, 200, 0.5)';
        ctx.globalAlpha = 1
        ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height)
        const img = new Image();
        img.onload = function () {
            ctx.drawImage(img, 35, 0);
        };
        img.src = "/src/assets/csdn.png";

    }
    else {
        console.log('不支持canvas')
    }
}



window.onload = () => {
    drawImg()
}

效果
webgl canvas系列——快速加背景、抠图、加水印并下载图片,webgl-canvas,webgl,javascript,前端

💖cavans下载图片

方法 作用
canvas.toDataURL(type, encoderOptions); HTMLCanvasElement.toDataURL() 方法返回一个包含图片展示的 data URI。可以使用 type 参数指定其类型,默认为 PNG 格式。图片的分辨率为 96dpi
  • 如果画布的高度或宽度是 0,那么会返回字符串“data:,”。
  • 如果传入的类型非“image/png”,但是返回的值以“data:image/png”开头,那么该传入的类型是不支持的。 Chrome
  • 支持“image/webp”类型。

使用toDataURL属性下载

function downloadImage(dataURL, filename) {
    // 创建一个a元素,用于触发下载
    var link = document.createElement('a');
    link.download = filename;
    link.href = dataURL;
    link.click();
}


window.onload = () => {
    document.getElementById('down-btn').addEventListener('click', function () {
        const imgData = document.getElementById('tutorial').toDataURL("image/png");
        downloadImage(imgData, 'canvas图片')
    })
}

下载成功的效果效果
webgl canvas系列——快速加背景、抠图、加水印并下载图片,webgl-canvas,webgl,javascript,前端

💖cavans上传图片并抠图

前期的准备
html原生上传图片 并使用canvas绘制图片
html结构

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="style.css" rel="stylesheet" type="text/css" />
    <title>canvas_调试</title>
</head>

<body>
    <div class="title">
        canvas
    </div>
    <div>
        <label for="avatar">选择图片上传:</label>
        <br>
        <input type="file" id="avatar" name="avatar" accept="image/png, image/jpeg" />
        <div id="preview-img">

        </div>
    </div>
    <div class="container">

        <canvas id="tutorial" width="250" height="100">

            current stock price: $3.15 +0.15
        </canvas>
    </div>
    <div>
        <button id="clear-back">
            自动抠图
        </button>
    </div>
    <br>
    <div>
        <button id="down-btn">
            下载图片
        </button>
    </div>
    <script src="script.js"></script>
</body>

</html>

js逻辑

const config = {
    cavansDom: null,
    uploadImgData: null,
}

function InitCanvas() {
    const canvas = document.getElementById("tutorial");
    config.cavansDom = canvas
    if (canvas.getContext) {
        const ctx = canvas.getContext("2d");
        // background
        ctx.fillStyle = 'rgba(0, 0, 200, 0.5)';
        ctx.globalAlpha = 1
        ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height)
        const img = new Image();
        img.onload = function () {
            ctx.drawImage(img, 35, 0);
        };
        img.src = "/src/assets/csdn.png";

    }
    else {
        console.log('不支持canvas')
    }
}

function drawImg(){
    canvas=config.cavansDom 
    if (canvas.getContext) {
        const ctx = canvas.getContext("2d");
        const img = new Image();
        img.onload = function () {
            const width=img.width
            const height=img.height
            canvas.width=width
            canvas.height=height
            ctx.drawImage(img, 0, 0);
        };
        img.src = config.uploadImgData
        console.log('img.src',img.src)

    }
    else {
        console.log('不支持canvas')
    }
}


function downloadImage(dataURL, filename) {
    // 创建一个a元素,用于触发下载
    var link = document.createElement('a');
    link.download = filename;
    link.href = dataURL;
    link.click();
}

function initUploadImg() {
    const input = document.getElementById('avatar')
    input.addEventListener('change', function (e) {
        console.log('e')
        const curFiles = input.files;
        console.log('curFiles', curFiles)
        config.uploadImgData = URL.createObjectURL(curFiles[0]);
        drawImg()
    })
}

function initDown() {
    document.getElementById('down-btn').addEventListener('click', function () {
        const imgData = config.cavansDom.toDataURL("image/png");
        downloadImage(imgData, 'canvas图片')
    })
}
// 抠图
function clearColor(){
    
}



window.onload = () => {
    InitCanvas()
    initDown()
    initUploadImg()
}

效果:实现了图片的上传并使用canvas适配绘制图片
上传csdn的个人头像webgl canvas系列——快速加背景、抠图、加水印并下载图片,webgl-canvas,webgl,javascript,前端
抠图逻辑:
为了实现抠图效果,可以使用绘图上下文的globalCompositeOperation属性来控制绘制的方式。其中,source-in和source-out是实现抠图的两种常用方式。

  • 使用source-in时,绘图上下文会根据Canvas上已有的内容和新绘制的图像的像素进行合并,只保留二者重叠的部分。通过调整绘图上下文的globalAlpha属性,可以实现抠图的透明效果。

  • 使用source-out时,绘图上下文会根据Canvas上已有的内容和新绘制的图像的像素进行合并,只保留二者不重叠的部分。同样,可以通过调整绘图上下文的globalAlpha属性,实现抠图的透明效果。

source-in效果

// 抠图
function clearColor(){
    document.getElementById('clear-back').addEventListener('click',function(){
        const ctx = config.cavansDom.getContext("2d");
        ctx.globalCompositeOperation = "source-in";
        ctx.fillStyle = "rgba(0, 0, 0, 0.5)"; // 设置抠图的透明度
        ctx.fillRect(0, 0, canvas.width, canvas.height);
    })
}

效果对比
webgl canvas系列——快速加背景、抠图、加水印并下载图片,webgl-canvas,webgl,javascript,前端
source-out效果

// 抠图
function clearColor(){
    document.getElementById('clear-back').addEventListener('click',function(){
        const ctx = config.cavansDom.getContext("2d");
        ctx.globalCompositeOperation = "source-out";
        ctx.fillStyle = "rgba(0, 0, 0, 0.5)"; // 设置抠图的透明度
        ctx.fillRect(0, 0, canvas.width, canvas.height);
    })
}

效果对比
webgl canvas系列——快速加背景、抠图、加水印并下载图片,webgl-canvas,webgl,javascript,前端

💖cavans添加文字水印

要在JavaScript的canvas上添加文字水印,可以使用以下代码:

const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");
ctx.font = "30px Arial";
ctx.fillStyle = "rgba(0, 0, 0, 0.5)";
ctx.fillText("Watermark", 10, 50);

首先,通过getElementById函数获取到canvas元素,并通过getContext函数获取到2D绘图上下文对象ctx。

然后,设置字体样式和颜色,可以使用font属性和fillStyle属性,分别设置字体大小和颜色。

最后,使用fillText方法绘制文字水印,传入要显示的文字、x坐标和y坐标。
添加水印成功
webgl canvas系列——快速加背景、抠图、加水印并下载图片,webgl-canvas,webgl,javascript,前端

💖inscode 完整代码块

⭐结束

本文分享到这结束,如有错误或者不足之处欢迎指出!
webgl canvas系列——快速加背景、抠图、加水印并下载图片,webgl-canvas,webgl,javascript,前端

👍 点赞,是我创作的动力!
⭐️ 收藏,是我努力的方向!
✏️ 评论,是我进步的财富!
💖 最后,感谢你的阅读!文章来源地址https://www.toymoban.com/news/detail-844965.html

到了这里,关于webgl canvas系列——快速加背景、抠图、加水印并下载图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • webgl canvas系列——animation中基本旋转、平移、缩放(模拟冒泡排序过程)

    大家好,我是yma16,本文分享webgl canvas系列——animation基本旋转、平移、缩放。 该系列往期文章 web canvas系列——快速入门上手绘制二维空间点、线、面 webgl canvas系列——快速加背景、抠图、加水印并下载图片 💖状态保存和恢复 方法 作用 save() 保存画布 (canvas) 的所有状态。

    2024年04月24日
    浏览(32)
  • (小程序)canvas 绘制图片做背景(新手向)

    小程序绘制图片为背景,首先我们需要把图片先下载下来(这里最好是封装一个函数,因为背景不可能只有一张的)下面是代码,一般直接复制就能使用,有可能需要微调

    2024年02月07日
    浏览(24)
  • 前端使用vue-pdf、pdf-lib、canvas 给PDF文件添加水印,并预览与下载

    原理就是给显示pdf 的容器增加一层水印遮罩层 下载: 通过url获取pdf文件的arrarybuffer文件流 将arraybuffer数据转成pdf文档 添加水印字体(内置/自定义) 为每页pdf添加文字水印 保存pdf文件的unit64Arrary文件流 预览: 创建canvas容器(用于显示水印文字) 创建水印canvas 将水印canv

    2024年01月24日
    浏览(43)
  • Demo: 给图片添加自定义水印并下载

    给图片添加自定义水印并下载

    2024年01月17日
    浏览(26)
  • python抠图(去水印)开源库lama-cleaner入门应用实践

    Lama Cleaner 是由 SOTA AI 模型提供支持的免费开源图像修复工具。可以从图片中移除任何不需要的物体、缺陷和人,或者擦除并替换(powered by stable diffusion)图片上的任何东西。 特征: 完全免费开源,完全自托管,支持CPU GPU M1/2 Windows 一键安装程序 本机 macOS 应用程序 多种SOT

    2024年02月07日
    浏览(30)
  • html2canvas 下载图片,scale、dpi处理图像模糊

    1、安装html2canvas 依赖 2、 引入html2canvas.js 3、html 4、方法,scale和dpi 解决模糊 html2canvas.js是从git上下载的: https://github.com/eKoopmans/html2canvas/tree/develop/dist 单纯下载图片方法 === 参考: 1、解决html2canvas截图模糊的问题 2、html2canvas生成图片模糊 不清楚?两种解决方法 3、html2canvas在

    2024年02月17日
    浏览(38)
  • Python抠图:使用OpenCV实现背景去除

    抠图(Matting)是图像处理领域的重要任务之一,旨在将对象与其它部分分离。OpenCV是一个开源计算机视觉库,它提供了丰富的函数和工具进行图像编辑处理,可以简单而快速地实现抠图功能,同时可以进行更多的图像处理、分析。下面我们将基于OpenCV,详细介绍如何使用Py

    2024年02月08日
    浏览(27)
  • Python + AI:完美抠图,更换背景

    翻看家里的老照片,发现一只小 dog,很趣致吧,这眼神汪汪地~ (背景是在厨房)。 有时候就想把某些照片里的人物或者主角抠出来,然后贴到喜欢的背景图里,比如你想自己制作一个 DIY 的头像。 虽然有很多 APP 或者小程序可以提供这类的功能,付费购买服务固然没问题,

    2024年02月01日
    浏览(31)
  • 如何用python抠图和切换背景

    原理: python的函数库Image是个非常强大的数据库,拥有很多处理图片的功能,像是P图软件一样。当我们想要实现把人P到另一张背景的操作时,我们就需要先把人给扣出来,再粘到背景上。抠图,我们需要先准备好绿色背景的图片。用Image里的convert函数把图片的RGB格式改为R

    2024年02月17日
    浏览(26)
  • 视频抠图工具,数字人一键换背景

    ffmpeg -vf \\\"chromakey=0x00FF00:0.2:0.3\\\" 这是一个使用FFmpeg进行视频处理的命令,具体是将视频中绿幕背景替换成指定的颜色。 命令中的参数解释如下: -vf : 指定应用于视频的视频过滤器。 chromakey : 指定要应用的视频过滤器名称,即绿幕抠图。 0x00FF00 : 指定绿幕背景的颜色值,这里是

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包