本文介绍如何使用HTML5和JQuery裁剪图像实时预览缩略图并上传,需要用到插件Jcrop。

HTML5和JQuery裁剪图片

使用HTML5和JQuery裁剪图片

调用JQuery库文件

调用Jcrop js插件

该js文件需要下载到本地(文件包含在本文源码压缩包里),调用时要注意文件路径。

调用css文件

css文件要下载到本地(文件包含在本文源码压缩包里),调用时要注意文件路径。

html标记

HTML标记由HTML FileUpload、HTML Image、HTML按钮、HTML5 Canvas 和一些隐藏字段组成。

JQuery实现代码

$(function () {

$('#FileUpload1').change(function () {

$('#Image1').hide();

var reader = new FileReader();

reader.onload = function (e) {

$('#Image1').show();

$('#Image1').attr("src", e.target.result);

$('#Image1').Jcrop({

onChange: SetCoordinates,

onSelect: SetCoordinates

});

}

reader.readAsDataURL($(this)[0].files[0]);

});

$('#btnCrop').click(function () {

var x1 = $('#imgX1').val();

var y1 = $('#imgY1').val();

var width = $('#imgWidth').val();

var height = $('#imgHeight').val();

var canvas = $("#canvas")[0];

var context = canvas.getContext('2d');

var img = new Image();

img.onload = function () {

canvas.height = height;

canvas.width = width;

context.drawImage(img, x1, y1, width, height, 0, 0, width, height);

$('#imgCropped').val(canvas.toDataURL());

};

img.src = $('#Image1').attr("src");

});

});

function SetCoordinates(c) {

$('#imgX1').val(c.x);

$('#imgY1').val(c.y);

$('#imgWidth').val(c.w);

$('#imgHeight').val(c.h);

$('#btnCrop').show();

};

在jquery document ready事件处理程序中,将更改事件处理程序分配给FileUpload控件,并将单击事件处理程序分配给html按钮。

当在HTML FileUpload控件中选择文件时,将使用HTML FileReader API读取文件,然后图像显示在image元素中,最后将Jcrop插件应用于image元素。

注:有关使用HTML5 FileReader API显示图像的更多详细信息,请参阅我的文章“图片上传之前用 jQuery FileReader() 显示预览图的实例”。

Jcrop插件在其onChange和onSelect事件处理程序上调用SetCoordinates函数,它允许我们将坐标和尺寸(即裁剪图像的高度和宽度)保存到隐藏字段中。

$('#Image1').Jcrop({

onChange: SetCoordinates,

onSelect: SetCoordinates

});

单击裁剪按钮时,它首先创建HTML5 Canvas的实例,然后使用OnLoad事件处理程序将图像加载到图像对象中。

在OnLoad事件处理程序中,使用保存坐标和尺寸(即裁剪图像的高度和宽度)在Canvas上重新绘制原始图像。

最后,使用toDataURL方法从Canvas中提取剪切图像的base64字符串,并保存在imgCropped hidden字段中,该字段稍后可发送到服务器以保存图像。

完整HTML代码


$(function () {

$('#FileUpload1').change(function () {

$('#Image1').hide();

var reader = new FileReader();

reader.onload = function (e) {

$('#Image1').show();

$('#Image1').attr("src", e.target.result);

$('#Image1').Jcrop({

onChange: SetCoordinates,

onSelect: SetCoordinates

});

}

reader.readAsDataURL($(this)[0].files[0]);

});

$('#btnCrop').click(function () {

var x1 = $('#imgX1').val();

var y1 = $('#imgY1').val();

var width = $('#imgWidth').val();

var height = $('#imgHeight').val();

var canvas = $("#canvas")[0];

var context = canvas.getContext('2d');

var img = new Image();

img.onload = function () {

canvas.height = height;

canvas.width = width;

context.drawImage(img, x1, y1, width, height, 0, 0, width, height);

$('#imgCropped').val(canvas.toDataURL());

};

img.src = $('#Image1').attr("src");

});

});

function SetCoordinates(c) {

$('#imgX1').val(c.x);

$('#imgY1').val(c.y);

$('#imgWidth').val(c.w);

$('#imgHeight').val(c.h);

$('#btnCrop').show();

};

效果如图:

HTML5和JQuery裁剪图片

上传裁剪图片到服务器

由于裁剪图片以base64字符串形式存储在imgCropped字段中,所以上传图片其实是在服务器端接收该字段的字符串即可,然后可在服务器端把该base64字符串转换为图片保存起来。这里不再提供服务器端处理程序,大家根据自己编程的语言,例如php,可直接百度“php把base64字符串转换为图片保存”。

您可能对以下文章也感兴趣

html5在线裁剪,HTML5和JQuery裁剪图像实时预览缩略图并上传相关推荐

  1. 定制jQuery File Upload为微博式单文件上传

    原文链接:http://avnpc.com/pages/single-file-upload-component-by-jquery-file-upload jQuery File Upload是一个 ...

  2. h5在线制作html5,在线制作HTML5多媒体作品的技巧

    HTML5多媒体作品以其对各种平台的兼容而见长,目前已获得了广泛的应用.如果我们需要制作自己的HTML5多媒体作品,一个方便之选就是利用现成的在线制作工具"百度H5". 首先访问& ...

  3. 【HTML5初探之form标签】解放表单验证、增加文件上传、集成拖放

    导航 [初探HTML5之使用新标签布局]用html5布局我的博客页! [HTML5初探之form标签]解放表单验证.增加文件上传.集成拖放 [HTML5初探之绘制图像(上)]看我canvas元素引领下 ...

  4. jquery插件课程2 放大镜、多文件上传和在线编辑器插件如何使用

    jquery插件课程2 放大镜.多文件上传和在线编辑器插件如何使用 一.总结 一句话总结:插件使用真的还是比较简单的,引包,初始化,配置参数(json),配置数据(json),而后两步不是必须的.而且 ...

  5. jQuery Lightbox图片放大预览

    简介:jQuery Lightbox图片放大预览代码是一款可以在用户点击页面中的小图片时,将该图片的高清版本以Lightbox的方式放大显示在页面的中间,提高用户的体验度. 效果展示 http://h ...

  6. jquery学习2_jquery知识预览

    jquery学习2_jquery知识预览 jquery版本: 大版本 1.x版本:能够兼容IE678浏览器 2.x版本:不兼容IE678浏览器 1.x和2.x版本jquery都不再更新版本了,现在只更 ...

  7. html图片点击局部放大,jQuery教程 css+jQuery实现图片局部放大预览

    本篇教程介绍了jQuery教程 css+jQuery实现图片局部放大预览,希望阅读本篇文章以后大家有所收获,帮助大家对jQuery的理解更加深入. < 今天有时间开始动手,使用css+jquer ...

  8. html5 在线白板,Html5 canvas画图白板踩坑

    最近接手了一个小型的H5,最主要的功能大概就是拍照上传和canvas画板了. 主要是记录一下自己菜到像傻子一样的技术. 1.canvas画板隔空打牛!画布越往上部分错位距离越小,越往下距离越大. 2. ...

  9. html5在线api,HTML5 历史记录API

    HTML5 历史记录API HTML5历史记录API的使用方法,在线实例演示HTML5历史记录API如何使用.浏览器的兼容性.语法定义及它的属性值详细资料等. HTML5历史记录API使您可以通过Ja ...

  10. html5 在线摄像头,HTML5在线摄像头使用

    HTML5在线摄像头应用 最近在搞一个考试系统,系统要求要有随机拍照的功能,并且摄像头能够收到js的控制.在线摄像头嘛,就那两种实现的方式:cab或者flash. 暂且不论本人从没学过的flash(事 ...

最新文章

  1. WinRM设置信任主机
  2. C++继承中父类和子类之间的同名覆盖
  3. CCNA考试中实验题精讲(RIP,OSPF,VLAN)
  4. Flask 应用的文件结构
  5. gem for onenote安装教程
  6. 解放双手!推荐一款阿里开源的低代码工具,YYDS!
  7. Bootstrap 组件之 Nav
  8. php和xml区别,php和XML
  9. 中国可生物降解和生物可吸收支架行业市场供需与战略研究报告
  10. weka连接mysql数据库
  11. 博格和他的先锋集团创业史(2):我觉得自己在天堂
  12. python finally语句里面出现异常_python try except语句出现异常
  13. python实现最长公共子串
  14. word标题级别编号设置
  15. ArcGIS Pro功能模块简介
  16. 丁火生于未月命理分析_丁火生于未月的性格特征
  17. SQL优化:使用distribute by 防止数据倾斜
  18. 98家央企及下属上市企业全名单(2023版)
  19. 使用adb命令操作多台设备
  20. matlab如何仿真递推型dft算法,递推dft算法

热门文章

  1. 如何使用 VNC 远程访问树莓派
  2. 2021年最新版裁判文书逆向
  3. 类案检索功能优化建议(一)——开发路径辨析
  4. 【图论】欧拉通路和哈密顿通路
  5. 中国现代文学专题形考2022
  6. Awvs详细使用教程
  7. 计算机组成原理 学后感,【计算机组成原理实验心得体会】_计算机组成原理实验心得_计算机组成原理实验感想...
  8. 大学计算机实践教程咖啡文化,北京大学图书馆学习共享空间.docx
  9. 还不会用 Python 提取 PDF 表格?三种类型数据,轻松转换成 Excel
  10. 用标签打印软件将Excel中的多列数据合并打印