zoukankan      html  css  js  c++  java
  • canvas处理压缩照片并回显:https://cengjingdeshuige.oss-cn-beijing.aliyuncs.com/20180512/cannovs%E5%AD%A6%E4%B9%A0.html

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>画布标签,转换照片宽度,等比压缩</title>
    </head>
    
    <body>
        <canvas id="myCanvas" width="800" height="800" style="border:1px solid #000000;">
        </canvas>
    
        <p>图片转换</p>
        <p>原图:</p>
        <img id="scream" src="https://cengjingdeshuige.oss-cn-beijing.aliyuncs.com/20180512/3.jpg" alt="The Scream" width="220" height="277">
        <p>Canvas等比转换过的:</p>
        <canvas id="myCanvas_img"  style="border:1px solid red;"></canvas>
        <p>转换后输出的图片Base64</p>
        <img src="" id="base64" alt="base64">
        <script>
            var cannovsBox = document.getElementById('myCanvas_img')
            var img = document.getElementById('scream')
            img.onload = function () {
                var imgsInit = new Image()
                imgsInit.src = img.src
                var ww = imgsInit.width
                var hh = imgsInit.height
                console.log(ww)
                console.log(hh)
                var width = ww
                var height = hh
                if (width > 400) {
                    width = 400
                    height = width * hh / ww
                }
                console.log(width, height)
                cannovsBox.setAttribute("width", width);
                cannovsBox.setAttribute("height", height);
                
                var huabi = cannovsBox.getContext('2d')
                var sx = 0 // 开始剪切的x坐标
                var sy = 0 // 开始剪切的y坐标
                var swidth = ww
                var sheight = hh
                var x = 0
                var y = 0
                huabi.drawImage(img,sx,sy,swidth,sheight,x,y,width,height);
                console.log(cannovsBox)
                // 图片转换成base64位, 必须在服务器同源策略下,服务器允许跨域,不然会报错
                var url = cannovsBox.toDataURL()
                console.log(url)
                document.getElementById('base64').src = url
                
            }
        </script>
        <script>
            // 画图的部分,上边是照片处理的
            var c = document.getElementById('myCanvas')
            var ctx = c.getContext('2d') // 创建对象
            // 画长方形
            // ctx.fillStyle = 'red' // 画笔颜色
            // ctx.fillRect(10, 5, 150, 75) // 画点
            // 画线段,开始坐标到结束坐标
            ctx.moveTo(10, 10) // 开始的坐标
            ctx.lineTo(200, 10) // 结束的坐标
            ctx.stroke() // 绘制
            ctx.moveTo(200, 10)
            ctx.lineTo(200, 200)
            ctx.stroke()
            ctx.moveTo(200, 200)
            ctx.lineTo(10, 10)
            ctx.stroke()
    
            // 画箭头
            ctx.moveTo(300, 300) // 箭头上线
            ctx.lineTo(500, 300)
            ctx.stroke()
            ctx.moveTo(300, 310) // 箭头下线
            ctx.lineTo(500, 310)
            ctx.stroke()
            ctx.moveTo(490, 280) // 上斜线
            ctx.lineTo(510, 305)
            ctx.stroke()
            ctx.moveTo(510, 305) // 下斜线
            ctx.lineTo(490, 320)
            ctx.stroke()
    
            // 画圆蛋
            ctx.beginPath()
            ctx.arc(100, 500, 50, 0, 2 * Math.PI) // arc(x,y,r,start:起点,stop:结束的位置) 
            ctx.stroke()
            // 半圆蛋
            ctx.beginPath()
            ctx.arc(300, 500, 50, Math.PI, 2 * Math.PI)
            ctx.stroke()
            // 给半圆 封口
            ctx.moveTo(250, 500)
            ctx.lineTo(350, 500)
            ctx.stroke()
    
            // 创建渐变
            var grd = ctx.createLinearGradient(510, 510, 700, 520); // 创建渐变 (x,y,x1,y1)  都是以父元素0点为起点
            //     x0渐变开始点的 x 坐标  y0渐变开始点的 y 坐标   x1    渐变结束点的 x 坐标 y1    渐变结束点的 y 坐标
            grd.addColorStop(0, 'red')
            grd.addColorStop(0.5, 'blue')
            grd.addColorStop(1, 'green')
            // 填充渐变
            ctx.fillStyle = grd
            ctx.fillRect(510, 510, 150, 80) // (x,y,w,h) x,y的位置,宽高 都是以父元素的0点为起点
        </script>
    </body>
    
    </html>
  • 相关阅读:
    小程序滴滴车主板块的银行卡管理左滑删除编辑
    超好用超短的小程序请求封装
    如何使用css来让图片居中不变形 微信小程序和web端适用
    纯css手写圆角气泡对话框 微信小程序和web都适用
    小程序getUserInfo授权升级更新登录优化
    一起聊聊3个线程依次打印1、2、3...的故事
    influxdb基础那些事儿
    influxdb的命令们
    Linux namespace浅析
    kubernetes基础概念知多少
  • 原文地址:https://www.cnblogs.com/cengjingdeshuige/p/9519055.html
Copyright © 2011-2022 走看看