Hello!

程序员给自己留条后路

亲爱的朋友

专业挖坑

前端上传img 并且添加水印

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

    <head>

        <meta charset="UTF-8">
        <title>Document</title>

    </head>

    <style>
        .dv {
            height: 100px;
            width: 20px;
            border: 1px solid #ccc;
        }
        
        .dv #inp {
            height: 100%;
            width: 100%;
            opacity: 0;
        }
        
        .yulan {
            position: absolute;
            top: 0;
            left: 0;
            display: none;
        }
    </style>

    <body>

        <div class="cun"></div>

        <div class="dv">添加
            <input type="file" name="" id="inp" value="">
        </div>
        <div class="yulan"></div>

        <canvas id="myCanvas"></canvas>
        <script>
            var dv = document.querySelector(".dv");                      
            var inp = document.getElementById("inp");                   
            var cun = document.querySelector('.cun');               
            var yulan = document.querySelector(".yulan");               
            inp.onchange = function(e) {                  
                console.log(e)            
                let file_length = e.target.files.length;   //选中图片的个数                     
                for(let i = 0; i < file_length; i++) {                 
                    let file = e.target.files[i];                
                    let filereader = new FileReader();   //创建FileReader对象               
                    filereader.readAsDataURL(file);   //对选中的图片进行base64编码              
                    let img = document.createElement("img");   //创建一个img标签来放选中的图片(使用new Image()也可以)           
                    filereader.onload = function() {    //当FileReader对象加载完成在执行                  
                        img.src = filereader.result;    //result是FileReader对象中图片的地址信息                   
                        img.onload = function() {    //因为异步加载原因,当选中的图片加载完成,开始使用canvas画水印,如果没有这一步,canvas.toDataURL()方法有可能装换不了base64图片                          
                            var w = "";   //canvas 未定义宽高,使用选中图片的宽高,方便定义水印的大小                        
                            var h = "";                                        
                            var quality = "";    // 默认图片质量为0.7                          
                            var canvas = document.getElementById("myCanvas");                         
                            var ctx = canvas.getContext("2d");                          
                            if(img.width <= 3000 && img.width > 1000) {     //对选中图片的大小做出判断                                  
                                w = img.width / 3;                          
                                h = img.height / 3;                           
                                quality = 0.5;                             
                                canvas.height = h;                             
                                canvas.width = w;                            
                                ctx.drawImage(img, 0, 0, w, h);     //在画布上绘制图像并定义图像的位置                            
                                ctx.font = "1em microsoft yahei";    //水印的字体                           
                                ctx.fillStyle = "red";    //水印的颜色                          
                                ctx.fillText('哈哈哈哈', 10, h - 100);    //水印的内容和水印的位置                           
                                ctx.fillText('我来了', 10, h - 60);                              
                                ctx.fillText('水印怎么样', 10, h - 20);                         
                            } else {                             
                                w = img.width;                               
                                h = img.height;                             
                                quality = 1.0;                            
                                canvas.height = h;                              
                                canvas.width = w;                           
                                ctx.drawImage(img, 0, 0, w, h);                             
                                ctx.font = "1em microsoft yahei";                          
                                ctx.fillStyle = "green";                            
                                ctx.fillText('我来了', 10, h - 50);                           
                                ctx.fillText('哈哈哈', 10, h - 30);                          
                                ctx.fillText('水印怎么样', 10, h - 10);                      
                            }

                                                   
                            img.width = 100;                        
                            img.height = 100;                               
                            var dataUrl = canvas.toDataURL("image/png")    //通过方法把图片转成base64                                   
                            let img1 = document.createElement("img");    //新创建一个img标签来存放加完水印的图片                                   
                            img1.width = 100;                                   
                            img1.height = 100;                                   
                            img1.src = dataUrl;                                   
                            canvas.style.display = "none";    //canvas中的图片会在下面显示,这里加载完成直接隐藏掉就好,隐藏前可以注释此代码,查看加完水印的效果图                                       
                            cun.appendChild(img1);   //把带水印的图片放进div里

                                                   //以下是点击预览水印图片

                                               
                            img1.onload = function() { //水印图片加载完成执行                            
                                this.addEventListener("click", function() {    //监听该图片的点击事件                                
                                    var img2 = document.createElement('img');    //创建要预览的img标签             
                                    img2.src = this.src;    // 赋值该图片的src                           
                                    yulan.style.display = 'block';    //使隐藏的预览盒子显示                               
                                    yulan.innerHTML = "";    //先清空盒子,否则会出现图片累计                            
                                    yulan.appendChild(img2);    //把预览的图片装进盒子                           
                                })

                            yulan.onclick = function() {                              
                                this.style.display = 'none'; //点击预览的大图,使其隐藏
                                                           
                            }                                                     
                        }                                              
                    }                                           
                }
                               
            }
                   
        }
    </script>

    </body>

</html>

 

posted @ 2019-10-14 19:10  湾子大郊亭  阅读(907)  评论(0编辑  收藏  举报