美文网首页
从剪切板获取截图并上传到服务器

从剪切板获取截图并上传到服务器

作者: 迷途老鹰 | 来源:发表于2019-04-23 13:49 被阅读0次

最近在做一个项目,需要用户截图后,将图片保存,上传到服务器。
传统的做法是,截图,保存文件到本地,在web页面上选择本地文件并上传。
现使用jquery及js插件实现,js插件是别人实现的,我只是修改了一些代码,结合flask,使之自动上传到服务,截图,复制到Input,然后自动显示在div上,并直接上传到服务,并把图片地址返回回来。
效果图如下:


image.png

html页面显示

<!doctype html>
<html>
<body>
<script src='js/jquery.min.js'></script>
<script src='js/screenshot-paaste.js'></script>
<input id='copyimg' tpye='text' placeholder='screenshots ctrl+v paste here'>
<span>return picurl</span><input id='rpic'>
<div id='imgPreview'></div>
<script type='text/javascript'>
  $('#copyimg').screenshotPaste({
    imgContainer:'#imgPreview', //view pic holder
    imgHeight:50,
    imgInputUrl:'#picurl'
  })
</script>
</body>
</html>

js插件代码:

(function ($) {
  $.fn.screenshotPaste=function(options){
    var me = this;

    if(typeof options =='string'){
      var method = $.fn.screenshotPaste.methods[options];

      if (method) {
        return method();
      } else {
        return;
      }
    }

    var defaults = {
      imgContainer: '',  //预览图片的容器
      imgHeight:200,    //预览图片的默认高度
      imgIputUrl:''         //服务返回地址,放入图片input内 
    };
    
    options = $.extend(defaults,options);

    var imgReader = function( item ){
      var file = item.getAsFile();
      var reader = new FileReader();
      
      reader.readAsDataURL( file );
      reader.onload = function( e ){
        var img = new Image();

        img.src = e.target.result;
        //ajax上传图片,返回图片地址
        var imgurl;
        $.ajax({
            async:false,
            type:"post",
            url:'/updateImg',
            data:{scr:img.src},
            success:function(data,status){
                if(status == "success"){imgurl=data.imgsrc;}
            }
        });
        //return imgurl;
        $(img).css({ height: options.imgHeight });
        $(img).attr("onclick","javascript:showimage("+"'"+imgurl+"'"+")");
        $(document).find(options.imgContainer)
        .html('')
        .show()
        .append(img);
        $(document).find(options.imgInputUrl)
        .val(imgurl);
      };
    };
    //事件注册
    $(me).on('paste',function(e){
      var clipboardData = e.originalEvent.clipboardData;
      var items, item, types;

      if( clipboardData ){
        items = clipboardData.items;

        if( !items ){
          return;
        }

        item = items[0];
        types = clipboardData.types || [];

        for(var i=0 ; i < types.length; i++ ){
          if( types[i] === 'Files' ){
            item = items[i];
            break;
          }
        }

        if( item && item.kind === 'file' && item.type.match(/^image\//i) ){
          imgReader( item );
        }
      }
    });

    $.fn.screenshotPaste.methods = {
      getImgData: function () {
        var src = $(document).find(options.imgContainer).find('img').attr('src');

        if(src==undefined){
          src='';
        }

        return src;
      }
    };
  };
})(jQuery);

后台代码:

from flask import Flask,render_template,jsonify
import base64
import os
import time

app = Flask(__name__)

@app.route('/updateImg',methods=['GET','POST']
def updateImg():
  base64img = request.form.get('scr')
  strs = re.match('^data:imge/(jped|png|gif);base64,',base64img)
  base64img = base64img.replace(strs.group(),'')
  imgdata = base64.b64decode(base64img)
  a,b = str(time.time()).split('.')
  path = os.path.join('/picserver',a + '.png')
  with open(path,'wb') as file:
    file.write(imgdata)
  return jsonify({'success':200,'imgsrc':path})

完成。github地址:https://github.com/hyzhangyong/flask-screenshot-paste

相关文章

  • 从剪切板获取截图并上传到服务器

    最近在做一个项目,需要用户截图后,将图片保存,上传到服务器。传统的做法是,截图,保存文件到本地,在web页面上选择...

  • 关于屏幕截图的一些事儿

    实现截图并上传到服务器 截图 序列化到本地 图片上传

  • 安装 oracle12c-docker

    下载oracle-12.2.0.1的安装包并上传到服务器上。 从github下载文件并上传到服务器上注意:安装文件...

  • centos7 google-chrome的安装与启动

    获取chrome安装包 获取不到可手动下载安装包,并上传到服务器 安装chrome 如果提示有依赖未安装,yum ...

  • Nginx HTTPS

    准备工作 获取HTTP证书并上传到服务器 配置Nignx支持HTTPS协议,首先需要检查Nginx是否已经安装了S...

  • js截图并上传到后端

    业务场景是这样的,前端获取某个部分截图,调用后端的图片上传服务,生成URL。这种业务场景大家应该都遇到过,网上的方...

  • 小米手机调用系统相册异常

    在做项目的时候,需要调取手机本地的图片并上传到服务器,在小米手机上测试的时候,获取的cursor为null,在其他...

  • mixpanel可视化埋点源码分析02-屏幕序列化机制

    客户端可以获取当前屏幕截图并上传到前台显示出来,但前台是如何知道屏幕上哪些元素是可以与用户进行交互的呢?这就需要客...

  • Android Webview onShowFileChoose

    最近有个需求是在前端同学使用 标签获取相册图片并上传到服务器 对于兼职开发android的我来说没意识到该需求的天...

  • 3.5 UiPath剪贴板操作的介绍和使用

    剪切板操作的介绍模拟用户使用剪切板操作的一种行为:例如使用设置剪切板(SettoClipboard),从剪切板获取...

网友评论

      本文标题:从剪切板获取截图并上传到服务器

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