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

JS绘制叠加图片

米游社活动要求:合影卡 + 自选背景(含角色瓦雷莎)。

合影卡

自选背景

难点

1.闭包

2.循环 & 判断所有图片加载完成

3.img增加wh字段定为canvas高宽

js获取标签元素data-*属性值的4种方法_javascript技巧_脚本之家

img.setAttribute('data-wh', 'wh'); 

if (img.dataset.wh == 'wh') { }

代码

<html>
<head>
<title>叠图</title>
<style>
h1 { text-align:center; }
a { text-decoration:none; }
p { text-indent:2em; }
</style>
</head>
<body>
<textarea id="textarea">
瓦雷莎.jpg
合影卡.png;wh</textarea> <button id="button_draw">绘图</button><br><br>
<canvas id="canvas"></canvas>
<script>
var ctx = canvas.getContext('2d');
var list = new Array();

function load() {
    //var w=0, h=0;
    var s = textarea.value.trim();
    //console.log(s);
    var sl = s.split('\n');
    //console.log(sl);
    list.length = 0;

    for (i=0; i<sl.length; i++) {        
        var img = new Image();
        var sl1 = sl[i].split(';');        
        img.src = sl1[0];
        if (sl1.length > 0)
            if (sl1[1] == 'wh')
                img.setAttribute('data-wh', 'wh');
        console.log(img);        
        list.push(img);        
        (function(img, list){
            img.onload = function(){
                console.log(img, img.dataset.wh, img.dataset.wh == 'wh', img.width, img.height);
                if (img.dataset.wh == 'wh') {
                    canvas.width = img.width;
                    canvas.height = img.height;
                }
                var b = true;
                for (j=0; j<list.length; j++) {                    
                    b = b & list[j].complete;
                    //console.log(list[j], list[j].complete, b);
                }
                if (b) {
                    draw();
                }
            }
        })(img, list);
    }
}

function draw() {
    for (i=0; i<list.length; i++) {        
        ctx.drawImage(list[i],0,0);
    }
}

button_draw.onclick = function() {
    load();
}
</script>
</body>
</html>

效果图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/100542.html

相关文章:

  • 04_SQL概述及DDL
  • docker镜像拉取失败
  • Foldseek快速蛋白质结构比对
  • 计算机组成原理笔记(八)——2.4十进制和数串的表示
  • D4RL库的安装历程及成功经验
  • Golang并发编程:Data Race检测与解决方案
  • Qt非阻塞延时实现
  • 基于 GEE 的区域降水数据可视化:从数据处理到等值线绘制
  • java连接opcua
  • 关于单片机IAP升级的那点事儿|智能设置中断向量表
  • PyTorch单机多卡训练(DataParallel)
  • 人工智能通识速览一(神经网络)(编辑中)
  • mysql中将外部文本导入表中过程出现的错误及解决方法
  • VITA 模型解读,实时交互式多模态大模型的 pioneering 之作
  • 【Flutter学习(1)】Dart访问控制
  • 【微机及接口技术】- 第三章 8086 汇编语言程序设计(汇编指令与汇编程序设计)下
  • iptables学习记录
  • Java基础-23-静态变量与静态方法的使用场景
  • 2025年3月29日笔记
  • 漏洞挖掘---顺景ERP-GetFile任意文件读取漏洞
  • PyTorch DDP流程和SyncBN、ShuffleBN
  • 利用 PCI-Express 交换机实现面向未来的推理服务器
  • 消费品行业创新创业中品类创新与数字化工具的融合:以开源 AI 智能客服、AI 智能名片及 S2B2C 商城小程序为例
  • IDApro直接 debug STM32 MCU
  • NVIDIA TensorRT 10 [TAR]安装教程
  • 【leetcode100】有效的括号
  • Linux系统:进程状态与僵尸、孤儿进程
  • Day 26:哈希 + 双指针
  • 『Linux』 第十一章 线程同步与互斥
  • 零基础上手Python数据分析 (10):DataFrame 数据索引与选取