1. 程式人生 > 實用技巧 >canvas畫圖實現圖片等比例展示,以及圖片預覽有時候不展示的原因

canvas畫圖實現圖片等比例展示,以及圖片預覽有時候不展示的原因

宣告:我是在vue專案下寫的;

1.用canvas畫圖,但是圖片有時候出現有時候不出現的;

附上原始碼:

     <input type="file" accept="image/*" @change="showImage"/>
showImage(e) {
            let vm = this;
            let reader = null;
            if(window.FileReader) {
                reader = new FileReader;
            } else {
                alert(
'瀏覽器不支援預覽功能'); } let imageFiles = e.target.files[0]; reader.readAsDataURL(imageFiles); reader.onload = function(event) { //reader.onload之後直接將圖片寫入 canvas,會出現圖片有時候會沒有顯示 let img = new Image(); img.src = event.target.result; let canvas
= document.getElementById('canvas'); let ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.drawImage(img,0,0,300,300); ctx.closePath(); } },

修改方法為

showImage(e) {
            let vm = this;
            let reader = null
; if(window.FileReader) { reader = new FileReader; } else { alert('瀏覽器不支援預覽功能'); } let imageFiles = e.target.files[0]; reader.readAsDataURL(imageFiles);
            reader.onload = function(event) {
                let img = new Image();
                img.src = event.target.result;
                img.onload = function() { //等圖片讀取完成之後再寫入canvas
                    let canvas = document.getElementById('canvas');
                    let ctx = canvas.getContext('2d');
                    ctx.beginPath();
                    ctx.drawImage(img,0,0,300,300);
                    ctx.closePath();
                }
            }
        },

2.圖片等比例展示

showImage(e) {
            let vm = this;
            let reader = null;
            if(window.FileReader) {
                reader = new FileReader;
            } else {
                alert('瀏覽器不支援預覽功能');
            }
            let imageFiles = e.target.files[0];
            reader.readAsDataURL(imageFiles);
            reader.onload = function(event) {
                let img = new Image();
                img.src = event.target.result;
                img.onload = function() { //等圖片讀取完成之後再寫入canvas
                    let imgWidth = img.width/2;
                    let imgHeight = img.height/2;
                    let canvas = document.getElementById('canvas');
                    let scale = 1;
                    let tt = 400;
                    if(imgHeight > tt || imgWidth >tt) {
                        if(imgWidth > imgHeight) {
                            scale = tt/imgWidth/2;
                        }else {
                            scale = tt/imgHeight/2;
                        }
                    }
                    canvas.height = imgHeight*scale;
                    canvas.width = imgWidth*scale;
                    let ctx = canvas.getContext('2d');
                    ctx.beginPath();
                    ctx.drawImage(img,0,0,canvas.width,canvas.height);
                    ctx.closePath();
                }
            }
        },
showImage(e){ letvm=this; letreader=null; if(window.FileReader){ reader=newFileReader; }else{ alert('瀏覽器不支援預覽功能'); } letimageFiles=e.target.files[0]; reader.readAsDataURL(imageFiles); reader.onload=function(event){ letimg=newImage(); img.src=event.target.result; img.onload=function(){//等圖片讀取完成之後再寫入canvas letimgWidth=img.width/2; letimgHeight=img.height/2; letcanvas=document.getElementById('canvas'); letscale=1; lettt=400; if(imgHeight>tt||imgWidth>tt){ if(imgWidth>imgHeight){ scale=tt/imgWidth/2; }else{ scale=tt/imgHeight/2; } } canvas.height=imgHeight*scale; canvas.width=imgWidth*scale; letctx=canvas.getContext('2d'); ctx.beginPath(); ctx.drawImage(img,0,0,canvas.width,canvas.height); ctx.closePath(); } } },