zoukankan      html  css  js  c++  java
  • 图片和canave互相转化

    使用JavaScript将图片拷贝进画布

    要想将图片放入画布里,我们使用canvas元素的drawImage方法:

    // Converts image to canvas; returns new canvas element
    function convertImageToCanvas(image) {
        var canvas = document.createElement("canvas");
        canvas.width = image.width;
        canvas.height = image.height;
        canvas.getContext("2d").drawImage(image, 0, 0);
    
        return canvas;
    }

     返回值相当于canvas节点

    这里的0, 0参数画布上的坐标点,图片将会拷贝到这个地方。

    浏览器支持

    Internet Explorer 9、Firefox、Opera、Chrome 以及 Safari 支持 drawImage() 方法。

    注释:Internet Explorer 8 或更早的浏览器不支持 <canvas> 元素。

    定义和用法

    drawImage() 方法在画布上绘制图像、画布或视频。

    drawImage() 方法也能够绘制图像的某些部分,以及/或者增加或减少图像的尺寸。

    context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height);

    参数值

    参数描述
    img 规定要使用的图像、画布或视频。
    sx 可选。开始剪切的 x 坐标位置。
    sy 可选。开始剪切的 y 坐标位置。
    swidth 可选。被剪切图像的宽度。
    sheight 可选。被剪切图像的高度。
    x 在画布上放置图像的 x 坐标位置。
    y 在画布上放置图像的 y 坐标位置。
    width 可选。要使用的图像的宽度。(伸展或缩小图像)
    height 可选。要使用的图像的高度。(伸展或缩小图像)

    绘制视频:

    JavaScript (每 20 毫秒,代码就会绘制视频的当前帧):

    var v=document.getElementById("video1");
    var c=document.getElementById("myCanvas");
    ctx=c.getContext('2d');
    v.addEventListener('play',function() {var i=window.setInterval(function() 
    {ctx.drawImage(v,0,0,270,135)},20);},false);
    v.addEventListener('pause',function() {window.clearInterval(i);},false);
    v.addEventListener('ended',function() {clearInterval(i);},false);

    用JavaScript将画布保持成图片格式

    如果你的画布上的作品已经完成,你可以用下面简单的方法将canvas数据转换成图片格式:

    // Converts canvas to an image
    function convertCanvasToImage(canvas) {
        var image = new Image();
        image.src = canvas.toDataURL("image/png");
        return image;
    }

     返回值相当于img节点,canvas的 toDataURI (type , int )  如果type参数的值为image/jpeg或image/webp,则第二个参数的值如果在0.0和1.0之间的话,会被看作是图片质量参数

    这段代码就能神奇的将canvas转变成PNG格式!

    对于Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported. 这个错误,如果直接在本地运行该页面会报这个错误,在服务器下返回如下该页面就没有错误了。

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8"/>
        <title>File API Test</title>
        <script src="../js/jquery-2.0.3.min.js"></script>
        <style>
            #test{
                100px;
                height:100px;
            }
        </style>
    </head>
    <body>
    <input type="file" id="fileImg" >
    
        <img src="../img/b1.jpg" id="test" alt="">
        
    
    <div id="new"></div>
    <script>
        function convertImageToCanvas(image) {
                    var canvas = document.createElement("canvas");
                    canvas.width = image.width;
                    canvas.height = image.height;
                    canvas.getContext("2d").drawImage(image, 0, 0,100,100);
    
                    return canvas;
                }
    
                // Converts canvas to an image
                function convertCanvasToImage(canvas) {
                    var image = new Image();
                       // image.crossOrigin = "Anonymous";
                    image.src = canvas.toDataURL("image/png");
                    /*image.src = '2.jpg';*/
                    console.log(canvas.toDataURL("image/png"));
                    return image;
                }
    
    $(function(){
            // Get the image
            var images=document.getElementById("test");
                    canvas = convertImageToCanvas(images);
                
                // Actions
                document.getElementById('new').appendChild(canvas);
    
                document.getElementById("new").appendChild(convertCanvasToImage(canvas));
                                
    })
                         
    </script>
    </body>
    </html>
  • 相关阅读:
    socket based————转帖
    罗马假日 java程序员
    java六大必须理解的问题来自网络少许有误 java程序员
    spring的scope="prototype" java程序员
    @GeneratedValue java程序员
    myeclipse乱码和tomcat相关的 java程序员
    关于***.hbm.xml的说明 java程序员
    hibernate中的Annotation补充 java程序员
    爱的随笔C语言版 java程序员
    Hibernate对jpa annotation的支持 java程序员
  • 原文地址:https://www.cnblogs.com/BlingSun/p/7851681.html
Copyright © 2011-2022 走看看