js 将多张图片合并成一张图片

其实就是将两张图片地址根据canvas组合在一起,我放到项目中因为会存在跨域问题,所以将图片转化成base64,后面还会带随机值,这样可避免图片跨域错误,正常情况下可以直接将图片放到canvas里面。

灵感来源:js 将多张图片合并成一张图片

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>BOM案例 图片放大</title>
    <script src="js/jquery-2.1.0.min.js"></script>

    <link rel="stylesheet" type="text/css" href="./viewer/viewer.css" />
    <script src="./viewer/viewer.js" type="text/javascript" charset="utf-8"></script>
</head>

<body>
    <img id="img1" src="img/1.jpg" width="350" height="700" />
    <img id="img2" src="img/2021.png" width="350" height="700" />
</body>

<script type="text/javascript">
    let img1Src = "";
    let img2Src = "";

    function getAjax(imageURL) {
        $.ajax({
            type: "GET",
            url: imageURL,
            beforeSend: function (xhr) {
                xhr.overrideMimeType('text/plain; charset=x-user-defined');
            },
            success: function (result, textStatus, jqXHR) {
                if (result.length < 1) {
                    alert("The thumbnail doesn't exist");
                    $("#thumbnail").attr("src", "data:image/png;base64,");
                    return
                }

                var binary = "";
                var responseText = jqXHR.responseText;
                var responseTextLen = responseText.length;

                for (i = 0; i < responseTextLen; i++) {
                    binary += String.fromCharCode(responseText.charCodeAt(i) & 255)
                }
                img1Src = "data:image/png;base64," + btoa(binary);
                // $("#thumbnail").attr("src", "data:image/png;base64," + btoa(binary));
            },
            error: function (xhr, textStatus, errorThrown) {
                alert("Error in getting document " + textStatus);
            }
        });
    }

    function getAjax2(imageURL) {
        $.ajax({
            type: "GET",
            url: imageURL,
            beforeSend: function (xhr) {
                xhr.overrideMimeType('text/plain; charset=x-user-defined');
            },
            success: function (result, textStatus, jqXHR) {
                if (result.length < 1) {
                    alert("The thumbnail doesn't exist");
                    $("#thumbnail").attr("src", "data:image/png;base64,");
                    return
                }

                var binary = "";
                var responseText = jqXHR.responseText;
                var responseTextLen = responseText.length;

                for (i = 0; i < responseTextLen; i++) {
                    binary += String.fromCharCode(responseText.charCodeAt(i) & 255)
                }
                img2Src = "data:image/png;base64," + btoa(binary);
                // $("#thumbnail").attr("src", "data:image/png;base64," + btoa(binary));
            },
            error: function (xhr, textStatus, errorThrown) {
                alert("Error in getting document " + textStatus);
            }
        });
    }

    getAjax('https://www.chinamdvr.com:9201/v1/api/mgmt/deviceSetup/attachment/2023-10-31/01_0180fb8afe5f4241a26ef98902038fd1_184410_00.jpg');
    getAjax2('https://www.chinamdvr.com:9201/v1/api/mgmt/deviceSetup/attachment/2023-10-31/01_11f3e7e9412643b39e7a88ed13bcf67b_002216_00.jpg');

    setTimeout(function () {
        drawAndShareImage("我是文字111", "我是文字222", "设备与行驶证合照");
    }, 500)

    // 将两张图片拼在一起
    function drawAndShareImage(li1, li2, title) {
        let fontPosition = 30; // 字体需要在上面,不影响图片信息

        var canvas = document.createElement("canvas");
        canvas.width = 800;
        canvas.height = 800 + fontPosition;

        var context = canvas.getContext("2d");
        context.rect(0, 0, canvas.width, canvas.height);
        context.fillStyle = "#fff";
        context.font = "28px serif";
        context.fill();

        console.log(img1Src.length)
        console.log(img2Src.length)

        if (img1Src.length == 0) {
            console.log("现在的版本没有图片")
            var myImage2 = new Image();
            // 解决跨域问题
            myImage2.setAttribute('crossOrigin', 'anonymous');
            myImage2.src = img2Src;//你自己本地的图片或者在线图片
            myImage2.crossOrigin = 'Anonymous';
            myImage2.onload = function () {

                context.drawImage(myImage2, fontPosition, fontPosition, canvas.width - fontPosition - fontPosition, canvas.height - fontPosition - fontPosition); // 第二张图片的位置  margin-left margin-top width height
                context.fillStyle = '#000';
                context.fillText(li2, canvas.width / 2.5, 25); // 第二个图片的文字信息
                context.fillText(title, canvas.width / 3, canvas.height - 5); // 第三个图片的文字信息

                var base64 = canvas.toDataURL("image/png");//"image/png"这里注意一下
                const imgDom = document.createElement('img');
                imgDom.src = base64;
                imgDom.id = "imgimg";
                imgDom.style.display = "none";
                document.body.appendChild(imgDom);

                var viewer = new Viewer(document.getElementById('imgimg'), {
                    url: 'src'
                });
                $("#imgimg").click();
            }
        } else if (img2Src.length == 0) {
            console.log("历史的版本没有图片")
            var myImage = new Image();
            // 解决跨域问题
            myImage.setAttribute('crossOrigin', 'anonymous');
            myImage.src = img1Src;//你自己本地的图片或者在线图片
            myImage.crossOrigin = 'Anonymous';
            myImage.onload = function () {

                context.drawImage(myImage, fontPosition, fontPosition, canvas.width - fontPosition - fontPosition, canvas.height - fontPosition - fontPosition); // 第二张图片的位置  margin-left margin-top width height
                context.fillStyle = '#000';
                context.fillText(li1, canvas.width / 2.5, 25); // 第二个图片的文字信息
                context.fillText(title, canvas.width / 3, canvas.height - 5); // 第三个图片的文字信息

                var base64 = canvas.toDataURL("image/png");//"image/png"这里注意一下
                const imgDom = document.createElement('img');
                imgDom.src = base64;
                imgDom.id = "imgimg";
                imgDom.style.display = "none";
                document.body.appendChild(imgDom);

                var viewer = new Viewer(document.getElementById('imgimg'), {
                    url: 'src'
                });
                $("#imgimg").click();
            }
        } else {
            console.log("都有图片")
            var myImage = new Image();
            // 解决跨域问题
            myImage.setAttribute('crossOrigin', 'anonymous');
            myImage.src = img1Src;//背景图片你自己本地的图片或者在线图片
            myImage.crossOrigin = 'Anonymous';
            // 两张图片合并成一张代码

            myImage.onload = function () {

                context.drawImage(myImage, 0, fontPosition, (canvas.width / 2) - 5, canvas.height - fontPosition - fontPosition); // 第一张图片的位置  margin-left margin-top width height
                context.fillStyle = '#000';
                context.fillText(li1, canvas.width / 5, 25); // 第一个图片的文字信息
                context.fillText(title, canvas.width / 3, canvas.height - 5); // 第三个图片的文字信息

                var myImage2 = new Image();
                // 解决跨域问题
                myImage2.setAttribute('crossOrigin', 'anonymous');
                myImage2.src = img2Src;//你自己本地的图片或者在线图片
                myImage2.crossOrigin = 'Anonymous';
                myImage2.onload = function () {

                    context.drawImage(myImage2, (canvas.width / 2) + 5, fontPosition, (canvas.width / 2) - 5, canvas.height - fontPosition - fontPosition); // 第二张图片的位置  margin-left margin-top width height
                    context.fillStyle = '#000';
                    context.fillText(li2, canvas.width - canvas.width / 3, 25); // 第二个图片的文字信息
                    context.fillText(title, canvas.width / 3, canvas.height - 5); // 第三个图片的文字信息

                    var base64 = canvas.toDataURL("image/png");//"image/png"这里注意一下
                    const imgDom = document.createElement('img');
                    imgDom.src = base64;
                    imgDom.id = "imgimg" + Math.floor(Math.random() * 60);
                    imgDom.style.display = "none";
                    document.body.appendChild(imgDom);

                    console.log(imgDom.id)

                    var viewer = new Viewer(document.getElementById(imgDom.id), {
                        url: 'src'
                    });
                    $("#" + imgDom.id).click();

                }
            }
        }
    }

    // getImage("https://www.chinamdvr.com:9201/v1/api/mgmt/deviceSetup/attachment/2023-10-31/01_0180fb8afe5f4241a26ef98902038fd1_184410_00.jpg")
    // getImage2("https://www.chinamdvr.com:9201/v1/api/mgmt/deviceSetup/attachment/2023-10-31/01_11f3e7e9412643b39e7a88ed13bcf67b_002216_00.jpg")

    // function getImage(url) {
    //     const xhr = new XMLHttpRequest()
    //     xhr.onload = function () {
    //         const url_blob = URL.createObjectURL(this.response)
    //         const image = new Image()
    //         image.src = url_blob;
    //         img1Src = url_blob;
    //     }
    //     // url 图片的地址
    //     xhr.open('GET', url, true)
    //     xhr.responseType = 'blob'
    //     xhr.send()
    // }

    // function getImage2(url) {
    //     const xhr = new XMLHttpRequest()
    //     xhr.onload = function () {
    //         const url_blob = URL.createObjectURL(this.response)
    //         const image = new Image()
    //         image.src = url_blob;
    //         img2Src = url_blob;
    //     }
    //     // url 图片的地址
    //     xhr.open('GET', url, true)
    //     xhr.responseType = 'blob'
    //     xhr.send()
    // }
    
    // function drawAndShareImage(li1, li2, title) {
    //     let fontPosition = 30; // 字体需要在上面,不影响图片信息

    //     var canvas = document.createElement("canvas");
    //     canvas.width = 800;
    //     canvas.height = 800 + fontPosition;

    //     var context = canvas.getContext("2d");
    //     context.rect(0, 0, canvas.width, canvas.height);
    //     context.fillStyle = "#fff";
    //     context.font = "28px serif";
    //     context.fill();

    //     var myImage = new Image();
    //     // 解决跨域问题
    //     myImage.setAttribute('crossOrigin', 'anonymous');
    //     myImage.src = img1Src;//背景图片你自己本地的图片或者在线图片
    //     myImage.crossOrigin = 'Anonymous';
    //     // 两张图片合并成一张代码

    //     myImage.onload = function () {

    //         context.drawImage(myImage, 0, fontPosition, canvas.width / 2, canvas.height - fontPosition - fontPosition); // 第一张图片的位置  margin-left margin-top width height
    //         context.fillStyle = '#000';
    //         context.fillText(li1, canvas.width / 5, 25); // 第一个图片的文字信息

    //         var myImage2 = new Image();
    //         // 解决跨域问题
    //         myImage2.setAttribute('crossOrigin', 'anonymous');
    //         myImage2.src = img2Src;//你自己本地的图片或者在线图片
    //         myImage2.crossOrigin = 'Anonymous';
    //         myImage2.onload = function () {

    //             context.drawImage(myImage2, (canvas.width / 2) + 1, fontPosition, (canvas.width / 2) - 1, canvas.height - fontPosition - fontPosition); // 第二张图片的位置  margin-left margin-top width height
    //             context.fillStyle = '#000';
    //             context.fillText(li2, canvas.width - canvas.width / 3, 25); // 第二个图片的文字信息
    //             context.fillText(title, canvas.width / 3, canvas.height - 5); // 第三个图片的文字信息

    //             var base64 = canvas.toDataURL("image/png");//"image/png"这里注意一下
    //             const imgDom = document.createElement('img');
    //             imgDom.src = base64;
    //             imgDom.id = "imgimg";
    //             imgDom.style.display = "none";
    //             document.body.appendChild(imgDom);

    //             var viewer = new Viewer(document.getElementById('imgimg'), {
    //                 url: 'src'
    //             });
    //             $("#imgimg").click();

    //         }
    //     }
    // }


    // function getBase64Image (src) {
    //     return new Promise(resolve => {
    //         const img = new Image()
    //         img.crossOrigin = ''
    //         img.src = src
    //         img.onload = function () {
    //             const canvas = document.createElement('canvas')
    //             canvas.width = img.width
    //             canvas.height = img.height
    //             const ctx = canvas.getContext('2d')
    //             ctx?.drawImage(img, 0, 0, img.width, img.height)
    //             const ext = img.src.substring(img.src.lastIndexOf('.') + 1).toLowerCase()
    //             const dataURL = canvas.toDataURL('image/' + ext)
    //             console.log(dataURL)
    //             $("#img1").attr("src", dataURL)
    //             resolve(dataURL)
    //         }
    //     })
    // }
    // getBase64Image("https://www.chinamdvr.com:9201/v1/api/mgmt/deviceSetup/attachment/2023-10-31/01_0180fb8afe5f4241a26ef98902038fd1_184410_00.jpg")

    

    // 将两张图片拼在一起
    // function drawAndShareImage(img1, img2) {

    //     var canvas = document.createElement("canvas");
    //     canvas.width = 700;
    //     canvas.height = 700;

    //     var context = canvas.getContext("2d");
    //     context.rect(0, 0, 350, 350);
    //     context.fillStyle = "#fff";
    //     context.fill();

    //     var myImage = new Image();
    //     myImage.src = img1;//背景图片你自己本地的图片或者在线图片
    //     myImage.crossOrigin = 'Anonymous';
    //     // 两张图片合并成一张代码

    //     myImage.onload = function () {

    //         context.drawImage(myImage, 0, 0, 350, 350); // 第一张图片的位置  margin-left margin-top width height
    //         context.font = "20px";
    //         context.fillText("我是文字", 150, 150); // 第一个图片的文字信息

    //         var myImage2 = new Image();
    //         myImage2.src = img2;//你自己本地的图片或者在线图片
    //         myImage2.crossOrigin = 'Anonymous';
    //         myImage2.onload = function () {

    //             context.drawImage(myImage2, 350, 0, 350, 350); // 第一张图片的位置  margin-left margin-top width height
    //             context.font = "20px";
    //             context.fillText("我是文字", 450, 150); // 第二个图片的文字信息

    //             var base64 = canvas.toDataURL("image/png");//"image/png"这里注意一下
    //             const imgDom = document.createElement('img');
    //             imgDom.src = base64;
    //             document.body.appendChild(imgDom);

    //             return base64
    //         }

    //     }

    // }
</script>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值