chrome及safari浏览器实现直接粘贴图片(纯JS)

相信大家在一些网站上看到通过QQ截图,然后粘贴图片就可以在网站实现预览该截图的功能,这么便捷的操作是不是非常利于用户的体验呢。

下面通过JQUERY进行实现这一个功能,并且实现上传该图片到后端服务器。主要利用的是HTML5的clipboardData及FileReader,目前支持chrome及safari浏览器。

1、粘贴事件绑定

首先进行绑定paste事件,触发paste事件时获取到剪贴板的内容

然后对内容进行过滤出文件为图片类型的内容,通过FileReader生成dataurl文件资源,将该资源传递给IMG标签的src即可进行预览.

如需要对图片进行裁剪功能可以使用一个JQUERY插件(jcrop):http://code.ciaoca.com/jquery/jcrop/

$("body").on(‘paste‘,pastepic);
var pastepic=function(event){
	if (event.originalEvent) {
	    event = event.originalEvent;
	}
	var clipboardData = event.clipboardData;
	if (clipboardData && clipboardData.items) {
		item = clipboardData.items[0];
		types = clipboardData.types || [];
                for (var i = 0; i < types.length; i++) {
			if (types[i] === ‘Files‘) {
    			    item = clipboardData.items[i];
				break;
			}
		}
		if (item && item.kind === ‘file‘ && item.type.match(/^image\//i)) {
			var blob = item.getAsFile(), reader = new FileReader();
			reader.onload = function(e) {
				var imgStr = e.target.result;
				if (imgStr.indexOf(‘base64,‘) != -1) {
					showpic(imgStr);
				}
			};
			reader.readAsDataURL(blob);
			}else{
				alert(‘该粘贴内容非图片格式~‘);
			}
		}else{
			alert(‘没有发现粘贴内容~‘);
		}
	}

2、上传到后端服务器

简单的AJAX异步过程调用,只是获取图片值的时候只需要获取图片的src即可

var data={}
data[‘pic‘]=$(‘#picture‘).attr(‘src‘);
$.ajax({
	‘url‘:"upload.php",
	‘data‘:data,
	‘type‘:‘post‘,
	‘dataType‘:‘json‘,
	‘success‘:function(data){
		alert(data.msg);
	},
	‘error‘:function(data){
	    alert(‘上传失败‘)
	},
	‘complete‘:function(data){
		$(‘#uploadimg‘).val(‘上传完成‘);
	}
})

3、后端服务器处理

通过传递过来的图片src可以获取到data-type(即图片类型),在"base64,"之后为图片的内容,该内容已经经过base64编码,因此需要进行转码后进行保存到服务器。

<?php
/**
* 图片上传后端
* author:[email protected]
* QQ:272388404
**/
$success = false;
$msg = ‘‘;
try {
    $directory = ‘upload/‘; //使用相对路径
    $filename = ‘‘; //保存的图像文件
    $src = $_POST[‘pic‘];
    if (strpos($src, ‘http://‘) != 0)
        throw new Exception(‘没有发现图片URL‘, 206);
    $filename = uniqid(‘upimg‘) . ‘.jpg‘;
    $ext_name = ‘jpg‘;
    $basepos = strpos($src, ‘base64,‘);
    if ($basepos != -1) {
        $src = substr($src, $basepos + 7);
        $src = base64_decode($src);
        $rs = file_put_contents($directory . $filename, $src);
    } else {
        $rs = file_put_contents($directory . $filename, file_get_contents($src));
    }
    if (!$rs)
        throw new Exception(‘上传文件失败,可能原因是服务器‘ . $directory . ‘目录没有写入权限‘, 204);
    if (!$filename) {
        throw new Exception(‘没有发现图像文件‘, 204);
    }
    $msg = ‘上传成功:文件名:‘.$directory . $filename;
    $success=true;
} catch (Exception $exc) {
    $msg = "上传失败:".$exc->getMessage();
}
$data = array(‘success‘ => $success, ‘msg‘ => $msg);
echo json_encode($data);
?>
时间: 2024-08-02 23:38:47

chrome及safari浏览器实现直接粘贴图片(纯JS)的相关文章

如果你使用上述这段12行的JavaScript代码,就可以能让firefox、chrome、safari浏览器崩溃,而且还能让iphone重启,安卓手机闪退!

<html> <body> <script> var total=""; for (var i=0;i<1000000;i ) { total= total i.toString(): history.pushState(0,0,total): } </script> </body> </html>

div中粘贴图片并上传服务器 div中拖拽图片文件并上传服务器

应用简介:此文主要是描述如何在前端div中直接ctrl+v 粘贴图片,并上传到服务器,包括拖拽图片文件到div中 应用场景描述:用QQ或者其它切图软件截图,在指定的div中ctrl+v 粘贴并显示,点击上传按钮,图片上传到服务器.类似实现了此功能的网站有 知乎,强力建议博客园实现此功能,                     写博客时插入图片方便的多. 适用环境:本代码目前适用谷歌浏览器,其它浏览器需要稍微改良一下即可,问题不大. 开发环境:vs2015 mvc 不说废话了,开始吧: 1:首先

pasteimg浏览器中粘贴图片jQuery插件

pasteimg是一款可以在浏览器中实现图片粘贴的jQuery插件,兼容Chrome.Firefox.IE11以及其他使用这些内核的浏览器,比如,国内著名的360浏览器. pasteimg可以识别浏览器中直接复制的图片,也可以识别复制的富文本中的图片.仅仅可以识别在浏览器中复制的内容,操作系统中复制的图片是不能识别的. pasteimg依赖jQuery,简单易用,引入jQuery和paste.image.js后,调用方式如下: 1 //在需要监听粘贴事件的dom元素上调用pasteImage方法

JS完美识别IE, firefox, chrome, safari浏览器

(转)判断是否为IE浏览器很简单,用navigator.appName来判断就行了.而Firefox, Chrome, Safari的navigator.appName输出值都是"Netscape",现在我们用navigator.userAgent这个属性来判断,因为谷歌浏览器Chrome的navigator.userAgent值包含"Safari"字符串而Safari浏览器并不包含Chrome,因此我们可以用这个区别来区分safari和chrome. 完整代码如下

JS判断浏览器类型的方法总结(IE firefox chrome opera safari)

JS判断浏览器类型的方法总结,可判别当前客户端所使用的浏览器是ie,firefox,safari,chrome或者是opera,另外js可以精确判断到ie浏览器的版本,依然直接上代码,需要的朋友可按照自己的要求进行修改. 第一种方法: 1 var Browser=new Object(); 2 Browser.isMozilla=(typeof document.implementation!='undefined')&&(typeof document.implementation.cr

CentOS7下python3 selenium3 使用Chrome的无头浏览器 截取网页全屏图片

前言 selenium是一个模拟浏览器的自动化执行框架,但是如果每次执行都要打开浏览器来处理任务的话,效率上都不高.最重要的是如果安装在Centos7服务器环境下,打开浏览器来模拟操作是更加不合适的,尤其是碰上需要截取网页图片这样的需求. 这时候就要考虑使用Chrome的无头浏览器模式了.所谓的无头浏览器模式也就是不需要打开浏览器,但是却可以起到模拟打开浏览器的执行效果,一切无界面执行. 下面来看看如果安装部署到执行. 1.安装chrome 1.1 添加google的repo源 vim /etc

jsp页面在 移动端 自适应,chrome浏览器没问题,可是safari浏览器有问题的解决方法

在网页中设置的1px与物理像素中的1px不会相同,所以导致不同在不同手机上显示结果都不相同,通过以下设置找到了适合当前网页自适应不同手机.不同浏览器的办法,代码如下: " <meta name="viewport" content="width=620px,initial-scale=1,target-densitydpi=device-dpi,minimum-scale=1,maximum-scale=1,user-scalable=1" />

实现复制或截图可直接粘贴图片

在很多富文本编辑器或者编辑框中添加图片,都是通过点击按钮-选择图片-上传的形式,这需要使用者先保存好图片. 在有些情况下,实现截图或复制图片后直接粘贴图片,让操作更简单. 例如,在textarea中粘贴图片,通过监听paste动作来获取粘贴板中的图片数据,并将图片上传到服务器上,获取图片的url后在指定的地方显示,一般是将图片插入textarea中光标所在的地方. 实现过程只需要一个js文件 var input = document.getElementsByTagName("textarea&

js复制内容到剪切板,兼容pc和手机端,支持Safari浏览器

最近,一些项目中用到监听用户复制.剪切的操作. 案例1.在PC端,当用户获得一个京东卡的使用券,当用户使用ctrl + C复制得到的使用券时,将使用券的代号复制到粘贴板,以便于用户ctrl+v进行粘贴. 案例2:在移动端(android 和 iOS端),用户获得邀请码之后,可以使用一键复制的功能,将邀请码复制到剪切板,然后在app中进行兑换. 使用jQuery中的方法监听用户的剪切.复制.粘贴的行为 $("#cut").on("cut",function(){ al