精华内容
下载资源
问答
  • 代码如下:Document*{margin:0 auto;}.box{border: 1px solid #ccc;width:1205px;height:400px;margin:0 auto;}.box canvas {display:inline-block;width: 600px;height:300px;...} 复制图片let canvas =...

    51a4f7b32b7c0b6cadc5324ea04db2e1.png

    代码如下:

    Document

    *{margin:0 auto;}

    .box{border: 1px solid #ccc;width:1205px;height:400px;margin:0 auto;}

    .box canvas {display:inline-block;width: 600px;height:300px;background:#ccc;}

    img1.png

    img2.png

    复制图片

    let canvas = document.querySelector('#canvas').getContext("2d");

    let canvas1 = document.querySelector('#canvas1').getContext("2d");

    let img = document.querySelectorAll('img')[0];

    let img1 = document.querySelectorAll('img')[1];

    document.querySelector('#file1').onchange = function (event) {

    // img.src = './img1.png';

    let file = event.target.files[0];

    let reader = new FileReader();

    //转base64

    reader.onload = function(e) {

    // img.src = e.target.result;

    }

    img.width = '100px';

    img.height = '100px';

    reader.readAsDataURL(file);

    canvas.drawImage(img, 0, 0, 100, 100, 10, 10, 100, 100);

    var imgData = canvas.getImageData(10,10,100,100);

    console.log(imgData);

    };

    document.querySelector('#file2').onchange = function (event) {

    // img.src = './img1.png';

    let file = event.target.files[0];

    let reader = new FileReader();

    //转base64

    reader.onload = function(e) {

    // img.src = e.target.result;

    }

    reader.readAsDataURL(file);

    canvas.drawImage(img1, 0, 0, 100, 100, 200, 10, 100, 100); // 画布上的大小比实际大小大2倍,画布上显示像素为200px * 200px

    var imgData = canvas.getImageData(10,10,100,100);

    console.log(imgData);

    };

    document.querySelector('#copyBtn').onclick = function () {

    var dataURL = document.querySelector('#canvas').toDataURL("image/png");

    console.log(dataURL);

    let img = new Image();

    img.src = dataURL;

    document.querySelector('.prev').appendChild(img);

    canvas1.drawImage(img, 0, 0);

    };

    结果:

    cd221bf8310a7cb80bd1d15ba9a0b94e.png

    展开全文
  • 图片拼接用的是canvas 图片压缩用的是image-conversion插件 引入image-conversion插件 cnpm i image-conversion -S 导入固定拼接的图片 import defaultHeadPng from ‘@/assets/img/normalPic.png’ 拼接图片 js //...
    1. 图片拼接用的是canvas 图片压缩用的是image-conversion插件
    2. 引入image-conversion插件
      cnpm i image-conversion -S
    3. 导入固定拼接的图片
      import defaultHeadPng from ‘@/assets/img/normalPic.png’
    4. 拼接图片 js
    // 生成符合条件的图片实例
    filesToInstances(files, callback){
    	const length = files.length; // 图片路径个数
    	let instances = []; // 文件实例数组
    	let finished = 0; // 转换成功个数
    	// 遍历图片路径数组
    	files.forEach((file, index) => {
    		const image = new Image();
    		image.src = file; // 赋值图片路径
    		image.onload = () => {
    			// 图片实例化成功后存起来
    			instances[index] = image;
    			finished++;
    			if (finished === length) { // 如果全部完成转换,调用回调函数
    				callback(instances);
    			}
    		}
    	});
    },
    // 两张图片高度相加  拼接
    draws(images = [], callback) {
    	const width = 300;
    	// 拼出来的图片的质量,0-1之间,越大质量越好
    	const encoderOptions = 1;
    	const heights = images.map(item => width / item.width * item.height)
    	const canvas = document.createElement('canvas')
    	canvas.width = width
    	canvas.height = heights.reduce((total, current) => total + current)
    	const context = canvas.getContext('2d')
    	let y = 0
    	images.forEach((item, index) => {
    		const height = heights[index]
    		context.drawImage(item, 0, y, width, height)
    		y += height
    	})
    	callback(canvas.toDataURL('image/png', encoderOptions))
    },
    ImgJoin (images = [], callback) {
    	this.filesToInstances(images, instance => {
    		this.draws(instance,data => {callback(data)})
    	})
    },
    // base64转码为文件;
    dataURLtoFile(dataurl, filename) {//将base64转换为文件
    	var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
    		bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
    	while(n--){
    		u8arr[n] = bstr.charCodeAt(n);
    	}
    	//  将base64转为blob形式,兼容IE下new File 方法报错
    	let blob = new Blob([u8arr], {type:mime})
    		// var file =blob;
    		// var file = new File([blob], filename+'.'+type, {type:mime, lastModified: Date.now()});
    		blob.lastModified = Date.now()
    		blob.name = filename
    	return blob
    },
    
    1. 开始拼接压缩
      • 先读取图片
      • 并将两张图片拼接起来
      • 压缩
    //获取文件
    var file = document.getElementById('activityInfoFile').files[0];
    var name = file.name
    //创建读取文件的对象
    var reader = new FileReader();
    //创建文件读取相关的变量
    var imgFile;
    //为文件读取成功设置事件
    reader.readAsDataURL(file)
    reader.onload = (e)=>{
    	imgFile = e.target.result;
    	this.ImgJoin([defaultHeadPng, imgFile], (data)=>{
    	let ifile = this.dataURLtoFile(data, new Date().getTime()+".png");
    	// 因为size 和width height 不能同时起作用
    	imageConversion.compressAccurately(ifile, { // 第一次压缩是width height
    		// size: 70,    //The compressed image size is 100kb
    		// accuracy: 0.2,//the accuracy of image compression size,range 0.8-0.99,default 0.95;
    	    type: ifile.type,
    	    width: 350,
    	    height: 300,
    	}).then(res2=>{
    		imageConversion.compressAccurately(res2, { // 第二次压缩是size kb 大小
    			size: 60
    		}).then(res=>{ // 压缩后的结果是blob类型
    			
    			})
    		})
    	})
    }
    
    1. 压缩后的图片类型blob如果不符合条件 可以进行转换
    //创建读取文件的对象
    var reader = new FileReader();
    //创建文件读取相关的变量
    var imgFile;
    //为文件读取成功设置事件
    reader.onload=function(e) {
    	let height='';
    	let width='';
    	imgFile = e.target.result;
    	let img = new Image();
    	img.src = e.target.result;//获取编码后的值,也可以用this.result获取
    	imageConversion.dataURLtoFile(imgFile,'image/png').then(res=>{
    		console.log(res) // blob 转换为file类型
    		self.upload(res,name)
    	})
    	img.onload = function () { // 获取到凭借及压缩后的图片 imgFile
    		height=this.height;
    		width=this.width;
    		self.imgFile=imgFile
    	}
    };
    //正式读取文件
    reader.readAsDataURL(res);
    
    1. 上传图片
    upload(files, name){
    	let fileFormData = new FormData();
    	let file = new window.File([files], name, {type: files.type})
    	fileFormData.append('file', file);// formData.append(name, value);
    	let requestConfig = {
    	  headers: {
    	    'Content-Type': 'multipart/form-data'
    	  },
    	}
    	this.$http.post(`file/upload`, fileFormData, requestConfig).then(()=>{
    	})
    }
    
    展开全文
  • Canvas画布图片文字拼接合成,生成图片,输入内容,填写到图片
  • js使用canvas拼接图片

    2019-09-24 15:29:39
    人狠话不多,先看看图,是不是你需要的效果(文章最后有最终效果),样子有点点那个啥,将就着看一下就是了(图片来自网络): 测试代码如下 <!doctype html> <html lang="en"> <head> <...

    人狠话不多,先看看图,是不是你需要的效果(文章最后有最终效果),样子有点点那个啥,将就着看一下就是了(图片来自网络):

    测试代码如下

    <!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>Document</title>
        <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    </head>
    <body>
        <div class="img-boxs">
            图片一
            <img crossOrigin="Anonymous" src="http://cdn2.jianshu.io/assets/default_avatar/8-a356878e44b45ab268a3b0bbaaadeeb7.jpg" width="300"   class="merging" alt="">
            图片二
            <img crossOrigin="Anonymous" src="https://t12.baidu.com/it/u=1341260975,315835678&fm=76" width="100" class="merging" alt="">
            <p>canvas拼接</p>
            <canvas id="canvas"></canvas>
        </div>
        <button id="btn-merge">拼接</button>
        <button id="save">保存</button>
    </body>
    <script>
        $(function () {
            var l_src = '';
            var $imgs = $('.img-boxs .merging'),
                $btnMerge = $('#btn-merge'),
                srcs = [],
                arr_img_w = [],
                arr_img_h = [],
                imgs_num = $imgs.length,
                loaded_img = 0;
            var loading = function () {
                console.log(imgs_num);
                for (let i = 0; i < imgs_num; i++) {
                    try{
                        if (!$($imgs[i])) {
                            throw 'loading函数参数$imgs['+i+']不能为空';
                        }
                        srcs[i] = $($imgs[i]).attr("src");
                        let _image = new Image();
                        _image.onload = function(){
                            arr_img_w[i] = (_image.width);
                            arr_img_h[i] = (_image.height);
                        };
                        _image.src = srcs[i];
                        //保存图片的原始宽高
                        //不论图片加载完成还是失败都执行该函数
                        $(_image).on('load error', function () {
                            loadImage();
                        });
    
                    } catch (err) {
                        alert("err");
                        printError(err);
                    }
                }
                function loadImage () {
                    if (imgs_num === loaded_img) {
                        return false;
                    }
                    loaded_img = Math.min(imgs_num, ++loaded_img);
                }
            };
    
            loading();
    
            $btnMerge.on('click', function () {
                mergeImages();
            });
            $("#save").on('click', function () {
                if(l_src){
                    var dlLink = document.createElement('a');
                    dlLink.download = "文件名.png";
                    dlLink.href = l_src;
                    dlLink.click();
                }else{
                    alert("请先生成文件")
                }
    
            });
            function mergeImages () {
                try {
                    if (loaded_img!==imgs_num && 2!==imgs_num) {
                        throw '图片未加载完成或图片的数目不为2';
                        return false;
                    }
                    var canvas = document.querySelector("#canvas"),
                        temp_w = 0,
                        temp_h = 0,
                        ctx = {};
                    canvas.width = getMaxofArray(arr_img_w);
                    canvas.height = getMaxofArray(arr_img_h);
                    console.log("width",arr_img_w,arr_img_h,canvas.width,canvas.height);
                    ctx = canvas.getContext('2d');
                    for (let i = 0; i < imgs_num; i++) {
                        temp_w = arr_img_w[i];
                        temp_h = arr_img_h[i];
                        if (i == (imgs_num-1)) {
                            console.log("...",canvas.width,temp_w);
                            ctx.drawImage($imgs[i], 0, 0, temp_w, temp_h, canvas.width-temp_w, canvas.height-temp_h, temp_w, temp_h);
                        } else {
                            ctx.drawImage($imgs[i], 0,0,canvas.width,canvas.height,0,0,canvas.width,canvas.height);
                        }
                    }
                    l_src = canvas.toDataURL('image/png');
                } catch (err) {
                    printError(err);
                }
            }
            function getMaxofArray (elems) {
                try {
                    if (!Array.isArray(elems)) {
                        throw 'getMaxofArray函数的参数必须是数组';
                    }
                } catch (err) {
                    printError(err);
                }
                return Math.max.apply(null, elems);
            }
            function printError (msg) {
                console.log('error message:', msg);
            }
        });
    </script>
    </html>

    注意点:

    crossOrigin属性必须在src之前

    图片加载完成的先后顺序不一定,所以代码中没有使用push,而是

    _image.onload = function(){
      arr_img_w[i] = (_image.width);
      arr_img_h[i] = (_image.height);
    };

     以上的代码还存在一个问题,如果需要自动生成,而不是点击的话,需要判断图片是否加载完成

    完整代码如下

    <!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>蜀创助贷</title>
        <script src="./js/jquery.min.js"></script>
        <link rel="stylesheet" href="css/style.css">
    </head>
    <body>
    <div class="box" id="outer">
        <img src="./img/bg.png" id="merge" width="100%" alt="">
        <div class="alert none" id="centerBox">
            <img src="#" id="head" width="200" alt="头像">
            <h3>长按保存头像</h3>
        </div>
    </div>
    </body>
    <script>
        $(function () {
            let $_REQUEST = new Object, aParams = document.location.search.substr(1).split("&");
            for (let i = 0; i < aParams.length; i++) {
                let aParam = aParams[i].split("=");
                $_REQUEST[aParam[0]] = aParam[1]
            }
            let srcs=["./img/bg.png","./img/logo.png",$_REQUEST["img"]];
            let imgDom=[];
            let arr_img_w=[];
            let arr_img_h=[];
            $("#outer").on('click', function () {
                let canvas2 = document.createElement("canvas");
                let ctx = {};
                canvas2.width = 1000;
                canvas2.height = 1000;
                ctx = canvas2.getContext('2d');
                ctx.drawImage(imgDom[2], 0,0,1000,1000);
                ctx.drawImage(imgDom[1], 0,0,1000,1000);
                let l_src = canvas2.toDataURL('image/png');
                $("#head").attr('src', l_src);
                $("#centerBox").toggleClass("none")
            });
    
            $("#btn-merge").on('click', function () {
                mergeImages();
            });
    //        var loading = function () {
    //            for (let i = 0; i < srcs.length; i++) {
    //                try{
    //                    let _image = new Image();
    //                    _image.onload = function(){
    //                        arr_img_w[i] = (_image.width);
    //                        arr_img_h[i] = (_image.height);
    //                    };
    //                    _image.crossOrigin = "Anonymous";
    //                    _image.src = srcs[i];
    //                    imgDom.push(_image);
    //
    //                } catch (err) {
    //                    alert("err");
    //                }
    //            }
    //        };
    //
    //        function getMaxofArray (elems) {
    //            try {
    //                if (!Array.isArray(elems)) {
    //                    throw 'getMaxofArray函数的参数必须是数组';
    //                }
    //            } catch (err) {
    //                alert(err)
    //            }
    //            return Math.max.apply(null, elems);
    //        }
    
            function mergeImages () {
                try {
                    let canvas = document.createElement("canvas");
                    let temp_w = 0;
                    let temp_h = 0;
                    let ctx = {};
                    canvas.width = 640;
                    canvas.height = 1008;
                    ctx = canvas.getContext('2d');
                    ctx.drawImage(imgDom[0], 0,0,640,1008,0,0,640,1008);
                    ctx.drawImage(imgDom[2], 0,0,arr_img_w[2],arr_img_w[2],185,505,290,290);
                    ctx.drawImage(imgDom[1], 0,0,arr_img_w[1],arr_img_h[1],180,500,300,300);
                    let l_src = canvas.toDataURL('image/png');
                    $("#merge").attr('src', l_src);
                } catch (err) {
                    alert(err)
                }
            }
            function loadImg(url,i, cb) {
                let _image = new Image();
                _image.onload = function(){
                    arr_img_w[i] = (_image.width);
                    arr_img_h[i] = (_image.height);
                    imgDom[i] = _image;
                    cb();
                };
                _image.crossOrigin = "Anonymous";
                _image.src = srcs[i];
            }
    
            function loadImages(urlArr, afterAllLoadedFunc) {
                var count = urlArr.length;
                var loadedCount = 0;
    
                for (var i = count - 1; i >= 0; i--) {
                    loadImg(urlArr[i],i, function () {
                        loadedCount ++;
                        if (count === loadedCount) {
                            afterAllLoadedFunc();
                        }
                    });
                }
            }
            
            loadImages(srcs, function () {
                mergeImages()
            });
        })
    </script>
    </html>

    看效果图

    拼接前的图片:加上自己的头像

    展开全文
  • 前端使用canvas拼接多张图片

    千次阅读 2019-05-16 13:43:38
    应业务要求,要把使用canvas截取的app每一屏的图片拼接在一起。图片的地址存放在一个log文件中。 先了解一下drawImage() 方法: drawImage() 方法在画布上绘制图像、画布或视频。 drawImage() 方法也能够绘制图像...

    应业务要求,要把使用canvas截取的app每一屏的图片拼接在一起。图片的地址存放在一个log文件中。

    先了解一下drawImage() 方法:

    drawImage() 方法在画布上绘制图像、画布或视频。

    drawImage() 方法也能够绘制图像的某些部分,以及/或者增加或减少图像的尺寸。

    JavaScript 语法 1

    在画布上定位图像:

    context.drawImage(img,x,y);

    JavaScript 语法 2

    在画布上定位图像,并规定图像的宽度和高度:

    context.drawImage(img,x,y,width,height);

    JavaScript 语法 3

    剪切图像,并在画布上定位被剪切的部分:

    context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height);

    参数值

    参数描述
    img规定要使用的图像、画布或视频。
    sx可选。开始剪切的 x 坐标位置。
    sy可选。开始剪切的 y 坐标位置。
    swidth可选。被剪切图像的宽度。
    sheight可选。被剪切图像的高度。
    x在画布上放置图像的 x 坐标位置。
    y在画布上放置图像的 y 坐标位置。
    width可选。要使用的图像的宽度。(伸展或缩小图像)
    height可选。要使用的图像的高度。(伸展或缩小图像)

     

    log文件:

    var jsonData = [{
        "data": [{
            "url": "./db/cache/a.jpg"
        }, {
            "url": "./db/cache/b.jpg"
        }, {
            "url": "./db/cache/c.jpg"
        }]
    }]

     接下来就是根据log.js中的图片地址,把这些图片拼接在一起

    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="utf-8">
        <title>拼长图</title>
    </head>
    <body>
        <div id="image-container"></div>
        <img src="" alt="" id="avatar">
        <script language="javascript" type="text/javascript" src="../../assets/js/jquery-2.0.3.min.js"></script>
        <script language="javascript" type="text/javascript" src="./db/log/log.js"></script>
        <script>
            // 拿到图片地址
            var dataList = []
            jsonData.forEach(item => {
                item.data.forEach(ele => {
                    dataList.push(ele)
                })
            })
            //  绘制图片
            function draw(dataList, x, y) {
                var canvas = document.createElement("canvas");
                canvas.width = x
                var context = canvas.getContext("2d");
                const encoderOptions = 1
                let length = dataList.length
                dataList.forEach((ele, i) => {
                    canvas.height = y * (i + 1);
                    var myImage = new Image();
                    myImage.crossOrigin = '';
                    myImage.src = ele.url; //你自己本地的图片或者在线图片
                    myImage.onload = () => {
                        context.drawImage(myImage, 0, y * i,480,640);
                        var base64 = canvas.toDataURL("image/png", encoderOptions); //"image/png" 这里注意一下
                        var img = document.getElementById('avatar');
                        const imageDiv = document.getElementById('image-container')
                        imageDiv.innerHTML =
                            `<div><a download href=${base64} style="list-style: none;text-decoration: none;color:#000">点击下载长图</a><br><br><img src=${base64}></div>`
                    }
                })
            }
            this.draw(dataList, 480, 640)
        </script>
    </body>
    
    </html>

     最后的效果:

     这个是通过读取log文件中存放的图片地址进行拼接的,如果有的小伙伴想要自己在input框中上传图片,并把图片拼接起来可以试试下面这段代码:

    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="utf-8">
        <title>拼长图</title>
    </head>
    
    <body>
        <input id="upload-input" type="file" accept="image/*" multiple="multiple" style="display: none;">
        <label for="upload-input">点击选择图片</label>
        <div id="image-container"></div>
    
        <script>
            // 拼出来的图片的宽度
            const width = 300
            // 拼出来的图片的质量,0-1之间,越大质量越好
            const encoderOptions =1
    
            const uploadInput = document.getElementById('upload-input')
            const imageDiv = document.getElementById('image-container')
    
            uploadInput.addEventListener('change', event => {
                const files = Array.from(event.target.files)
                filesToInstances(files, instances => {
                    drawImages(instances, finalImageUrl => {
                        imageDiv.innerHTML = `<div><a download href=${finalImageUrl}>点击下载</a><br><img src=${finalImageUrl}></div>`
                    })
                })
            })
    
            // 根据图片文件拿到图片实例
            const filesToInstances = (files, callback) => {
                const length = files.length
                let instances = []
                let finished = 0
    
                files.forEach((file, index) => {
                    const reader = new FileReader()
                    // 把文件读为 dataUrl
                    reader.readAsDataURL(file)
                    reader.onload = e => {
                        const image = new Image()
                        image.src = e.target.result
                        image.onload = () => {
                            // 图片实例化成功后存起来
                            instances[index] = image
                            finished ++
                            if (finished === length) {
                                callback(instances)
                            }
                        }
                    }
                })
            }
    
            // 拼图
            const drawImages = (images, callback) => {
                const heights = images.map(item => width / item.width * item.height)
                const canvas = document.createElement('canvas')
                canvas.width = width
                canvas.height = heights.reduce((total, current) => total + current)
                const context = canvas.getContext('2d')
    
                let y = 0
    
                images.forEach((item, index) => {
                    const height = heights[index]
                    context.drawImage(item, 0, y, width, height)
                    y += height
                })
                callback(canvas.toDataURL('image/jpeg', encoderOptions))
            }
        </script>
    </body>
    
    </html>
    

    效果和上面图片拼接出来的一样,大家各取所需。input框上传图片并拼接参考:https://segmentfault.com/a/1190000011684333

    有不对的地方欢迎指出,一起进步呀~

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 最近项目叫做一个收款码的生成,如下图,因为二维码是动态生成的,所以整张图片需要自己拼接,然后搞成图片下载下来, 所以就尝试用canvas做了,首部是提示信息,然后是扫码支持的方式,店铺名称,二维码,二维码...
  • vue 图片竖向拼接组件代码 <template> <div> <div> <input type="file" id="upFile" @change="upFile($event)" accept="image/*" multiple="multiple" style="display:none" /> ...
  • react 拼接图片代码 import React from "react"; import "./App.css"; function App() { return ( <> <div> <input type="file" id="upFile" onChange={upFile.bind(this)} accept="image/*...
  • 下面我就将介绍一下怎么给图片添加水印,图片拼接,怎么制作个性名片以及制作一个涂鸦的画板。   水印 水印的添加总的来说可以简单的分为三步来走,第一步先完成一个画布的创建,第二步在画板上画出你想添加水印...
  • angular 图片竖向拼接代码 理论上angualr6789都能使用,编译环境是ng8 <div> <div> <input type="file" id="upFile" (change)="upFile($event)" accept="image/*" multiple="multiple" style=...
  • 计算好位置,把要拼接图片绘制到画布上,然后再保存,没错就是这么简单。 第一步 加载图片 此处以加载网络图片为例,为了避免回调地狱 (callback hell),而且都到2021年了,还不会用Promise就有点说不过去了,...
  • 使用canvas将两张图片拼接,展示在模态框中 1.html: <div class="modal fade" id="myModal_answer" tabindex="-1" role="dialog" aria-labelledby="myModalLabel_answer" aria-hidden="true" ondragstart=...
  • Android Canvas 多张图片拼接成长图

    千次阅读 2017-01-26 21:35:44
    容我慢写
  • /*** * 返回与显示控件宽高比相同的图片 * @param bitmap 原图 * @param widthImgv ... * @return 裁剪或者拼接后后的图片 */ private Bitmap clipBitmap(Bitmap bitmap,int widthImgv,int heightImgv) { .
  • 标题html转图片拼接动态二维码 相关js 官网 http://html2canvas.hertzen.com/ github地址 https://github.com/niklasvh/html2canvas/ function getQrCodes(mod_type,mod_id,tpl_use,cos_id,itm_id,val,lang,ils_id...
  • 微信小程序用Canvas图片加水印,拼接图片,制作名片PHelper-master.zip
  • // 长按canvas图片的时候保存图片 saveImageToPhotosAlbum() { //画板路径保存成功后,调用方法吧图片保存到用户相册 wx.saveImageToPhotosAlbum({ filePath: this.data.shareImgPath, //保存成功失败之后,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,012
精华内容 1,604
关键字:

canvas图片拼接