现在的位置: 首页 > 综合 > 正文

HTML5 移动开发 —— Canvas 9.3 绘制图片

2018年02月17日 ⁄ 综合 ⁄ 共 2587字 ⁄ 字号 评论关闭

<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8'>
    <style type="text/css">
      canvas {
        border: 1px solid black;
      }
      #dp{
        min-height: 70px;
        border: 1px solid #000000;
        background-color:#eeeeee;

      }
    </style>
  </head>
  <body>
    <div id='dp'>
      <p>将图片文件拖到此处</p>
    </div>

    <script type="text/javascript">
      (function (){
        var dp = null;
        var reader = null;

        /*
          页面导入时处理
        */

        window.addEventListener("load", function(){
          // 拖动区域的div元素
          dp = document.getElementById("dp");
          // 设置 dragover 事件的监听
          dp.addEventListener("dragover", function (evt){
            evt.preventDefault();
          },false);
          // 设置 drop 事件的监听
          dp.addEventListener("drop", function (evt){
            evt.preventDefault();
            file_droped(evt)
          },false);
        },false);
        /*
          文件拖入时处理
        */
        function file_droped(evt){
          //清空显示区域
          while(dp.firstChild){
            dp.removeChild(dp.firstChild);
          }
          // 拖入文件的file接口对象
          var file = evt.dataTransfer.files[0];
          // filereader 的接口对象
          reader = new FileReader();
          if(! /^image/.test(file.type)){
            alert('err')
          }
          // 导入拖入图片
          reader.readAsDataURL(file);
          reader.onload = prepare_image;
        }
        /*
          显示拖入文件
        */
        function prepare_image(evt){
          // 创建img元素
          var image = document.createElement("img");
          image.setAttribute("src",reader.result);
          dp.appendChild(image);
          image.onload = function(){
            var w = parseInt(image.width);
            var h = parseInt(image.height);
            var canvas = document.createElement("canvas");
            canvas.width = w;
            canvas.height = h;
            var ctx = canvas.getContext("2d");
            ctx.drawImage(image,0,0);
            // 取得canvas 像素对象
            var imagedata = ctx.getImageData(0,0,w,h);
            // 进行黑白转换
            convert_image_to_gray_scale(imagedata.data);
            // 替换canvas中的像素数据
            ctx.putImageData(imagedata,0,0);
            // 显示canvas
            dp.appendChild(canvas);
          }
        }
        /*
          进行黑白转换
        */
        function convert_image_to_gray_scale(data){
          var len = data.length;
          var pixels = len/4;
          for (var i = 0; i < pixels ; i++) {
            // 取出rgb值
            var r = data[i*4];
            var g = data[i*4 + 1];
            var b = data[i*4 + 2];
            // 进行黑白转换
            var g = parseInt((11*r + 16*g + 5*b)/32);
            // 将变换后的像素数据设置到原来数组元素中
            data[i*4] = g;
            data[i*4 + 1] = g;
            data[i*4 + 2] = g;

          };
        }
      })();
    </script>
  </body>
</html>

          

抱歉!评论已关闭.