美文网首页
js 、convas画公章

js 、convas画公章

作者: 青争小台 | 来源:发表于2020-09-29 20:11 被阅读0次

    vue项目

    页面调用

    <canvas id="canvas" width="130"  height="130"></canvas>
    
    import createSeal from '@/utils/chapter'
    export default {
     mounted() {
       createSeal('canvas', '全国工业交流会暨工业产品展览会', '组委会')
     },
    }
    

    chapter.js

    const maxLength = 16;
    function createSeal (id, company, name) {
        console.log('company', company)
        var canvas = document.getElementById(id);
        var context = canvas.getContext('2d');
    
        // 绘制印章边框   
        var width = canvas.width / 2;
        var height = canvas.height / 2;
        context.lineWidth = 4;//边框宽度
        context.strokeStyle = "#f00";//边框颜色
        context.beginPath();
        context.arc(width, height, 60, 0, Math.PI * 2);//宽、高、半径
        context.stroke();
    
        //画五角星
        create5star(context, width, height, 16, "#f00", 0);
    
        // 绘制印章名称   
        context.font = '20px STSong';
        context.textBaseline = 'middle';//设置文本的垂直对齐方式
        context.textAlign = 'center'; //设置文本的水平对对齐方式
        context.lineWidth = 1;
        context.fillStyle = '#f00';
        context.fillText(name, width + 2, height + 40);
        // context.fillText(name,width,height+65);
    
        // 绘制印章单位   
        context.translate(width, height);// 平移到此位置,
        context.font = '14px STSong'//字号
        var count = company.length;// 字数   
        var angle = (4 * Math.PI / (3 * (maxLength - 1))) + 0.02;// 字间角度   字间距 +0.02~0.04
        var chars = company.split("");
        var c;
        for (var i = 0; i < count; i++) {
            c = chars[i];// 需要绘制的字符   
            if (i == 0)
                //context.rotate(5*Math.PI/6);
                context.rotate(3 * Math.PI / 2 - angle * (count - 1) / 2);//第一个字的位置
            else
                context.rotate(angle);
            context.save();
            context.translate(54, 0);// 平移到此位置,此时字和x轴垂直   
            context.rotate(Math.PI / 2);// 旋转90度,让字平行于x轴   
            context.fillText(c, 0, 5);// 此点为字的中心点   
            context.restore();
        }
    
        //绘制五角星  
        /** 
         * 创建一个五角星形状. 该五角星的中心坐标为(sx,sy),中心到顶点的距离为radius,rotate=0时一个顶点在对称轴上 
         * rotate:绕对称轴旋转rotate弧度 
         */
        function create5star (context, sx, sy, radius, color, rotato) {
            context.save();
            context.fillStyle = color;
            context.translate(sx, sy);//移动坐标原点  
            context.rotate(Math.PI + rotato);//旋转  
            context.beginPath();//创建路径  
            // let x = Math.sin(0);  
            // let y= Math.cos(0);  
            var dig = Math.PI / 5 * 4;
            for (var i = 0; i < 5; i++) {//画五角星的五条边  
                var starX = Math.sin(i * dig);
                var starY = Math.cos(i * dig);
                context.lineTo(starX * radius, starY * radius);
            }
            context.closePath();
            context.stroke();
            context.fill();
            context.restore();
        }
    }
    
    export default createSeal
    

    原生html

    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <style type="text/css">
        input {
            height: 38px;
            width: 200px;
        }
    </style>
    
    <body>
        <canvas id="canvas" width="130" height="130"></canvas>
        <img src="" alt="" />
        <!-- 图片要保存在电脑里才能转换成png , 如果要传给后台base64 ,则在 toDataURL().substring(22) -->
        <div>
            <input type="text" name="" placeholder="请输入单位名称 字数不超过15个" id="sealinstitution" value="全国工业交流会暨工业产品展览会" />![截屏2020-09-29下午8.17.31.png](https://img.haomeiwen.com/i18619776/743744757955d5be.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
            <input type="text" name="" placeholder="请输入备注内容 字数不超过5个" id="sealremark" maxlength="5" value="组委会" />
            <button class="productseal">生成公章</button>
            <button class="getseal">生成图片</button>
        </div>
    </body>
    <script type="text/javascript">
        document.querySelector('.productseal').addEventListener("click", function () {
            var sealinstitution = document.getElementById('sealinstitution').value;
            var sealremark = document.getElementById('sealremark').value;
            createSeal('canvas', sealinstitution, sealremark);
        })
        document.querySelector('.getseal').addEventListener("click", function () {
            document.getElementById('canvas').toDataURL("image/png");
            console.log(document.getElementById('canvas').toDataURL("image/png"));
            document.querySelector("img").src = document.getElementById('canvas').toDataURL("image/png");
        })
    
        const maxLength = 16;
        function createSeal(id, company, name) {
            console.log('company', company)
            var canvas = document.getElementById(id);
            var context = canvas.getContext('2d');
    
            // 绘制印章边框   
            var width = canvas.width / 2;
            var height = canvas.height / 2;
            context.lineWidth = 4;//边框宽度
            context.strokeStyle = "#f00";//边框颜色
            context.beginPath();
            context.arc(width, height, 60, 0, Math.PI * 2);//宽、高、半径
            context.stroke();
    
            //画五角星
            create5star(context, width, height, 16, "#f00", 0);
    
            // 绘制印章名称   
            context.font = '20px STSong';
            context.textBaseline = 'middle';//设置文本的垂直对齐方式
            context.textAlign = 'center'; //设置文本的水平对对齐方式
            context.lineWidth = 1;
            context.fillStyle = '#f00';
            context.fillText(name, width + 2, height + 40);
            // context.fillText(name,width,height+65);
    
            // 绘制印章单位   
            context.translate(width, height);// 平移到此位置,
            context.font = '14px STSong'//字号
            var count = company.length;// 字数   
            var angle = (4 * Math.PI / (3 * (maxLength - 1))) + 0.02;// 字间角度   字间距 +0.02~0.04
            var chars = company.split("");
            var c;
            for (var i = 0; i < count; i++) {
                c = chars[i];// 需要绘制的字符   
                if (i == 0)
                    //context.rotate(5*Math.PI/6);
                    context.rotate(3 * Math.PI / 2 - angle * (count - 1) / 2);//第一个字的位置
                else
                    context.rotate(angle);
                context.save();
                context.translate(54, 0);// 平移到此位置,此时字和x轴垂直   
                context.rotate(Math.PI / 2);// 旋转90度,让字平行于x轴   
                context.fillText(c, 0, 5);// 此点为字的中心点   
                context.restore();
            }
    
            //绘制五角星  
            /** 
             * 创建一个五角星形状. 该五角星的中心坐标为(sx,sy),中心到顶点的距离为radius,rotate=0时一个顶点在对称轴上 
             * rotate:绕对称轴旋转rotate弧度 
             */
            function create5star(context, sx, sy, radius, color, rotato) {
                context.save();
                context.fillStyle = color;
                context.translate(sx, sy);//移动坐标原点  
                context.rotate(Math.PI + rotato);//旋转  
                context.beginPath();//创建路径  
                // let x = Math.sin(0);  
                // let y= Math.cos(0);  
                var dig = Math.PI / 5 * 4;
                for (var i = 0; i < 5; i++) {//画五角星的五条边  
                    var starX = Math.sin(i * dig);
                    var starY = Math.cos(i * dig);
                    context.lineTo(starX * radius, starY * radius);
                }
                context.closePath();
                context.stroke();
                context.fill();
                context.restore();
            }
        }
    
    </script>
    </html>
    

    效果如下:


    截屏2020-09-29下午8.17.31.png

    相关文章

      网友评论

          本文标题:js 、convas画公章

          本文链接:https://www.haomeiwen.com/subject/xsxyuktx.html