Ajax+PHP+jQuery图片截图上传JSCON简时空

用户直接上传图片,点击"上传"按钮之后,在图片预览图内可预览图片,然后进行图片的裁剪前预览,当点击"裁剪"按钮时确定裁剪图片,并在"裁剪结果"区域显示裁剪后的效果。

(说明:我是将上传文件保存在"/uploads"文件夹中,而截图结果放在"/avatar"文件夹里)

实现效果预览:

二、解决方案

1、插件的选择

2、客户端与服务器之间的交互图

为了便于理解,我先把交互图放在这里。其中绿色部分是客户端的主要步骤、粉红色是服务器端的主要步骤,服务器与客户端之间的交互通过AJAX完成。可以发现,大部分的操作在客户端进行,服务器端与客户端之间的交流只是简单的JSON数据,因此这样给用户的体验是非常高的。

截图1客户端与服务器之间交互图

3、客户端文件

展示给用户的是html页面,为了学习并巩固CSS知识,就和DIV+CSS搭建了下面这样一个前台页面,见截图2。

截图2前台页面

跟客户端有关的文件主要是一个index.html,而在这个文件里面会引用其他的插件文件,因此可以说,客户端方面只有一个html文件。

另外,由于这里主要讨论客户端与浏览器之间的交互,因此略过CSS方面的内容。这里只列出HTML的代码,首先是部分:

图片剪切上传

可以看得出来主要是引用一些插件的文件。上面的文件(包括CSS文件与js文件)都可以从我给的链接里下载到,只是样式表layout.css是我自己写的样式表,大家可以根据自己的CSS知识写出。

接下来是body部分,也许这么看代码比较乱,推荐使用一些带有高亮显示的工具来查看这些代码,比如DreamWeaver等IDE,实在不行,也可以用火狐的"查看源代码"来看。(火狐不仅是一个好浏览器,更是一个极棒的调试器!)

图片上传


图片预览

裁剪结果:

裁剪预览:

上面我用颜色区分开主要DIV区,这三块分别代表"上传图片区"、"大图展示区"、"截图结果区"与"选择预览区"。其中三个粗体部分是带有ID属性的空DIV,用来放图片用的。(到时时候动态加载图片到这些DIV中),因此这段代码形成的HTML框架如截图2所示。(蓝色线条是block元素边界,此效果较是由火狐的插件制作而成):

截图3页面大体框架

基本的准备工作已经完成,待会儿再继续在这个框架上添加代码。咱们先介绍一下服务器上的PHP是怎么个情况。

4、服务器文件

服务器上主要用到两个PHP文件,一个用来处理上传图片的process.php,另外一个则是处理图片截图用的crop.php。不过,process.php文件包括插件PIPHP_UploadFile.php,而crop.php中包括PIPHP_ImageCrop.php插件。(这些插件的地址我在上面已经给出了)

=======

process.php主要接收上传图片,设置限制(比如文件的大小与格式),处理一些上传错误等,最后返回给客户端JSON,里面包含了所上传文件的一些信息(比如路径、大小等);当在客户端点击"上传"按钮的时候,会用异步(AJAX)的方式调用这个php文件。

crop.php主要负责真正裁剪上传的图片,当在客户端返回裁剪的位置后(点击"裁剪"按钮后),以异步方式将数据以JSON的方式传递给服务器,crop.php真正裁剪图片后,将图片另存到网络的目录下,同时返回此图片的存储路径,然后再让客户端显示图片即可

三、用到的技术摘要

现在根据上面的交互图继续完善代码。因此我这节会交叉地完善html、js与php代码,并不会单独分开完善,这样在逻辑上会更好理解。

1、uploadify上传

在html的head部分加入

2、process.php反馈上传信息

process.php的任务就是给浏览器返回JSON数据(至于什么是JSON请参考其它教程,把JSON想像成"键/值"对就可以了,它很方便数据的传输与读取)。在PHP里,一般是先把数据整理成数组的形式,然后使用json_encode()把数据转换成JSON。那process.php应该给浏览器返回什么样的数据呢?

其中之所以设置图片的缩放比例scale,是因为如果用户上传的图片尺寸太大(比如800x800),浏览器中的DIV会被"撑开",布局会被打乱。因此我们限定在浏览器显示图片的时候任何一边长不能超过400px,否则在显示的时候以等比例缩放。(比如上面的800x800的图上会显示成400x400的,然后浏览器同时设置scale为0.5)。

另外,这个php文件是调用了PIPHP_UploadFile.php这个插件,用来将上传的文件进行"鉴别"与"搬移"。

下面是process.php的程序:

require_once(dirname(__FILE__)."/../PIPHP_UploadFile.php");

$response=array(

'message'=>'未知上传错误',

'path'=>'',

'code'=>-4,//上传结果代码,0表示成功,-1表示失败

'width'=>100,

'height'=>100,

'scale'=>1,//比例尺

'name'=>''

);

if(!empty($_FILES))

{

$name='picture';

$uploadFile='uploads/';

$maxLen=9*1024*1024;

$result=PIPHP_UploadFile($name,$uploadFile,$maxLen);

$response['code']=$result[0];

//简单汇报成功情况

if($result[0]==0)

$response['message']='上传成功!';

//$response['message']=$result[2];

$response['path']=$result[1];

$response['name']=$result[2];

//获取图像的高度与宽度

$fileName=iconv("utf-8","gb2312",$result[2]);

list($width,$height)=getimagesize($_SERVER['DOCUMENT_ROOT'].$uploadFile.$fileName);

$response['width']=$width;

$response['height']=$height;

else

switch($result[0])

case-1:$response['message']="上传失败";break;

case-2:$response['message']="文件类型错误";break;

case-3:$response['message']="文件大小超过限制";break;

default:$response['message']="错误代码:$result[0]";

else{

$response['message']="上传文件出现错误!"."
";

$json_str=json_encode($response);

echo$json_str;

>

其实这个程序因为有了if判断语句而显示有点大,其实逻辑还是挺简单的。无论如何,这个程序返回的我上面说的有关图片的上传信息(放在$json_str这变量里了)

3、继续改进uplodify的配置

从上面知道,process.php返回的是一个$json_str变量,它里面有图像的路径,这样我们就可以在浏览器中显示图片啦!(注意此时显示的图片已经是在服务器上了)

现在添加uploadify的'onComplete'选项,它告诉浏览器当process.php返回数据时应该怎么做。

'onComplete':function(event,ID,fileObj,response,data){

json_str=JSON.parse(response);

varmaxSize=400;

varwidth=json_str.width;

varheight=json_str.height;

varscale=json_str.scale;

if(json_str.code==0)

$('#uploadInfo').html(json_str.message+'
平均上传速度:'+data.speed.toFixed(2)+'Kb/s');

//对图像进行缩放

if(json_str.width>maxSize||json_str.height>maxSize){

if(json_str.width>json_str.height)

width=maxSize;

height=maxSize/json_str.width*json_str.height;

json_str.scale=maxSize/json_str.width;

height=maxSize;

width=maxSize/json_str.height*json_str.width;

json_str.scale=maxSize/json_str.height;

$('#oriImage').html('');

//同时插入预览图

$('#preview').empty().html('').css({

overflow:'hidden',

width:'150px',

height:'150px'

$('#uploadInfo').html('错误代码['+json_str.code+']:

'+json_str.message+'

');

},

这里的程序主要做两件事,首先(第一种颜色标志处)显示上传的图,不过如果图片太大的话就应该显示缩放后的图,同时将缩放的比例保存到scale变量中;然后(第二处颜色标志处)再初始化裁剪预览图(用jQuery方法),注意这里只是初始化并没有动态显示裁剪预览图,动态显示部分要用imgAreaSelection这个插件完成。下面就开始讲这个插件吧

4、用imgAreaSelection获取截图点坐标

关于imgAreaSelection的使用说明请到官方上查看,这里就不再细讲。

由于图片是动态加载的,所以不能事先将这个插件应用到图像上。我们可以设置一个按钮,当图片上传显示后,我们点击这个"加载裁剪框"按钮,将这个插件绑定到图像上。所以我们先在html上添加一个按钮,我是加载那个"图像预览"的DIV里:

加载裁剪框

然后在head中的

THE END
1.辛川工作箱下载安装官方最新版辛川工具箱辛川工作箱app官方正版2023最新免费版是最近十分火爆的手机工具软件,这里我们提供了不少小工具,特别是里面还有和平精英辅助工具,大家可以用来提高游戏画质,十分好用哦,快来下载体验吧。 辛川工作箱软件特色 1、非常方便的实现多种实用工具的集合使用,使操作更加顺畅、方便、快捷。2、可以帮助用户实现离线...https://www.fxxz.com/azsoft/680871.html
2.25d行李箱箱子盒子工具箱PSD素材包图网提供精品模板下载,本设计作品为25D元素行李箱箱子盒子工具箱,格式:PSD,像素:1920x1080,分辨率:300,下载即可获得源文件,作品可编辑修改,主体文字图片皆可替换,下载25D元素行李箱箱子盒子工具箱就到包图网。https://m.ibaotu.com/sucai/730529.html
3.热血重燃!qq工具箱下载:2025尽享便利生活,尽在QQ工具箱下载指南!现在就行动吧,踏上便利生活的新征程! ``` 您可以将这段 HTML 文本作为一篇适合SEO优化的文章,围绕 QQ 工具箱的下载和使用进行编排。每个段落都使用了 ` ` 标签进行分类,使得结构清晰,利于搜索引擎的抓取和用户的阅读体验。http://avddmg.lxyqyy.com/post/53826.html
1.哈士奇抖音电商插件官网(哈士奇抖音最火图片)癞蛤蟆拍单工具箱哈士奇抖音电商插件官网:开启抖音电商新篇章 随着互联网的飞速发展,抖音电商已经成为越来越多人的首选购物平台,为了满足广大用户的需求,哈士奇团队隆重推出了一款抖音电商插件,旨在为广大用户提供更加便捷、高效的电商购物体验,本文将详细介绍哈士奇抖音电商插件的功能、特点以及使用方法,帮助您更好地了解这款插件,开启抖...https://why.91laihama.com/jiaocheng/316474.html
2.关于OPPO用户反馈工具箱的描述哪一个最准确?声明: 本网站大部分资源来源于用户创建编辑,上传,机构合作,自有兼职答题团队,如有侵犯了你的权益,请发送邮箱到feedback@deepthink.net.cn 本网站将在三个工作日内移除相关内容,刷刷题对内容所造成的任何后果不承担法律上的任何义务或责任 https://www.shuashuati.com/ti/8bf0e33292334f5e85a10fe2b1cb50c1.html?fm=bd026246bf3edac75583d4dcfd7ec0665f
3.www.zjic.com.cn/xxxr70990448.shtml住房贷款中住房套数认定标准的通知》,将“认房不认贷”作为政策工具,纳入“一城一策”工具箱,供城市...明里?照顾发烧的病例反馈 06.19MB 53%好评3018人) 四房播客在线观看 美女露出尿口和奶头 台湾SAWG...被老外舔嫩苞舔高潮动态图 被大鸡吧在线 PMV在线黄色视频 15.57MB 06%好评8750人) porn xxxx...http://www.zjic.com.cn/xxxr70990448.shtml
4.OneKeyVip:一键Vip解析工具箱一键Vip解析工具箱 本脚本可安装于支持 Tampermonkey 或 暴力猴扩展的浏览器,包括但不限于Chrome,360,QQ,UC等。 插件功能(点我查看详情)? 视频解析 ? 音乐下载 ? 商品详情页优惠券 ? 商品列表页优惠券 ? 上学吧查看答案 ? B站视频封面获取 ? B站视频下载 ? B站视频一键三连 ? 商品...https://gitee.com/none/OneKeyVip
5.赚人工具箱最新手机版赚人程工具箱app官方下载免费版赚人工具箱最新手机版是一款十分炫酷的手机工具箱软件,这里拥有全方位的辅助功能,不管是刷钻拉圈圈等都不在话下,更多几款热门手游提供辅助,让你使用更加方便,感兴趣的用户快来下载吧。 软件功能介绍: 腾讯qq微信等都有涉及 刷钻拉圈圈等不在话下 更多几款热门手游提供辅助 还有更多动态发布的小惊喜提供 更多体验...https://m.qqtn.com/q/260976
6.36解析式工具箱36解析式工具箱是一个功能强大的在线实用工具查询网,为用户提供各种实用的查询与计算工具等。不论您是需要查询汉语字典、笔顺、组词、造句、成语、近义词、反义词、英文单词、缩写、谜语等,还是需要查询身份证归属地、机场三字码、世界港口等信息,36解析式工具箱都能满足https://www.36jxs.com/
7.用户反馈数据分析软件(用户反馈分析报告)本篇文章给大家谈谈用户反馈数据分析软件,以及用户反馈分析报告对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享用户反馈数据分析软件的知识,其中也会对用户反馈分析报告进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧! https://www.huoban.com/news/post/124222.html
8.MIUI14锐意新生MIUI V4 标志着小米互联网服务全面发力的开始。小米云、小米应用商店、小米视频、小米音乐、小米主题商店、米币,都是在这一版本上线的。同时上线的MIUI首创功能,包括钢琴音拨号音效、闹钟支持“法定工作日 (智能跳过节假日)”、陌生来电第一声不响等,时至今日仍广受好评。也是在这一代,MIUI全球用户突破1000万。 https://www.miui.com/
9.用户反馈JAVA用户反馈数据分析软件x用户反馈JAVA 用户反馈数据分析软件x 必应输入法软件分析和用户需求调查(桌面版) 2号团队 对比软件:搜狗输入法桌面版 调研对象:大学生 人数:人 使用的工具:问卷星 (必应输入法1698.4版) 一.功能篇: 1.人名输入 尝试了很多人名,大多数人名两种输入法都可以完整输出,对于使用量较少的人名,...https://blog.51cto.com/u_16213691/9366559
10.好准定位app下载手机定位是一种通过手机上的位置传感器获取手机所在的真实位置,以及将相应数据反馈给用户的一个过程。手机定位软件哪个好?小编悉心整理了手机定位软件排行榜、手机视频编辑软件。小编为您推荐手机定位软件免费下载,快来下载适合你的定位软件吧! 小天才电话手表app Lookus app ZAI家庭守护定位器 汽车在线app gps工具箱 时刻...https://m.liqucn.com/rj/9119966172181.wml
11.四年级下册信息技术教案(精选10篇)师(出示“我的电脑”窗口的结构示意图):与“我的电脑”窗口比较,“画图”软件窗口有哪些组成部分? (引导学生认识“画图”窗口的标题栏、菜单栏、工具箱、类型框、工作区、颜料盒、状态栏) (1)画图区 师:把窗口最大化,我们会发现,窗口中有一大块空白区域,这就是用来画画的地方,我们把它叫做“工作区”。请同...https://www.unjs.com/fanwenwang/jiaoan/20110314162617_605210.html
12.网上的手机电池内置电池诺希NX用户反馈: 做工质感:这款电池的做工很不错。安装工具:安卓工具非常全面。续航能力:续航能力,不错。充电速度也挺快。其他特色:如果动手能力不强,建议去找一个安装电池的地方安装自己安装很容易失误,很容易失误。 这个电池真的很不错的,两年前买过一次,看着客服发的安装视频,自己慢慢安装好,还是挺抗用的,续航很不...https://www.shishitao.com/detail/9466.html
13.单页HTML源码支持留言反馈与邮件通知功能这是一个用户留言反馈页面,它特别设计了一个功能,允许通过邮件通知站长。为了实现这一功能,您需要在email.php文件的第4、5、6行填写相应的信息。具体来说,您需要填写自己的发件邮箱地址、授权码以及收件邮箱地址。完成这些步骤后,用户就可以通过该页面给您的邮箱发送留言了。这样您就能及时获取用户的反馈和建议,从...https://www.afxw5.com/47452/