技术思绪摘录旅行笔记
当我们利用微信和qq截取了一张图的时候,往往需要去另一个地方粘贴,如果我们是网站,也需要直接粘贴就可以上传,那么就需要从粘贴板中获取图片,这篇文章主要记录这种操作。

开源是程序员的基本美德


<!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>Document</title>
</head>

<body>
    <h2>首先去复制一个图片,来这里粘贴一下</h2>
    <img id="pasteimg" src="">
    <hr>
    <input type="button" value="base64转blob" onclick="GetCheckBlob()" />
    <hr>
    <img id="CheckBlobimg" src="">

    <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.js"></script>
    <script>
        //将粘贴事件绑定到 document 上
        document.addEventListener("paste", function(e) {
            var cbd = e.clipboardData;
            var ua = window.navigator.userAgent;
            // 如果是 Safari 直接 return
            if (!(e.clipboardData && e.clipboardData.items)) {
                return;
            }
            // Mac平台下Chrome49版本以下 复制Finder中的文件的Bug Hack掉
            if (cbd.items && cbd.items.length === 2 && cbd.items[0].kind === "string" && cbd.items[1].kind ===
                "file" &&
                cbd.types && cbd.types.length === 2 && cbd.types[0] === "text/plain" && cbd.types[1] ===
                "Files" &&
                ua.match(/Macintosh/i) && Number(ua.match(/Chrome\/(\d{2})/i)[1]) < 49) {
                return;
            }
            var item = cbd.items[0]; //直接取第一个对象
            if (item.kind != undefined && item.kind == "file") {
                var blob = item.getAsFile();
                if (blob.size === 0) {
                    return;
                }
                //TODO 此处可以上传
                //转换成base64显示
                var reader = new FileReader();
                reader.readAsDataURL(blob);
                reader.onload = function(event) {
                    //div中的img标签src属性赋值,可以直接展示图片
                    $("#pasteimg").attr("src", this.result);
                }
            }

        }, false);



        //Base64转blob
        function dataURItoBlob(base64Data) {
            var byteString;
            if (base64Data.split(',')[0].indexOf('base64') >= 0)
                byteString = atob(base64Data.split(',')[1]);
            else
                byteString = unescape(base64Data.split(',')[1]);
            var mimeString = base64Data.split(',')[0].split(':')[1].split(';')[0];
            var ia = new Uint8Array(byteString.length);
            for (var i = 0; i < byteString.length; i++) {
                ia[i] = byteString.charCodeAt(i);
            }
            return new Blob([ia], {
                type: mimeString
            });
        }

        //按钮事件
        function GetCheckBlob() {
            var basestr = $("#pasteimg").attr("src");
            console.log("获取base64");
            var blob = dataURItoBlob(basestr);
            console.log("转换blob");
            //TODO 此处可以上传
            var reader = new FileReader();
            reader.readAsDataURL(blob);
            console.log("读取blob再显示出来");
            reader.onload = function(event) {
                $("#CheckBlobimg").attr("src", this.result);
            }
        }
    </script>
</body>

</html>


运行之后就是下面这种样子


image.png


利用qq或者微信,去随便截取一张图片,到网页里面来粘贴一下,按Ctrl+V


image.png


上传的话,可以利用按钮事件中演示的,base64转成blob类型,或者直接上传base64。


CarsonIT 微信扫码关注公众号 策略、创意、技术

留下您的脚步

 

最近评论

查看更多>>

站点统计

总文章数:275 总分类数:18 总评论数:88 总浏览数:128.37万

精选推荐

阅读排行

友情打赏

请打开您的微信,扫一扫