jQuery插件jcrop+Fileapi完美實(shí)現(xiàn)圖片上傳+裁剪+預(yù)覽的代碼分享
網(wǎng)頁(yè)端 裁剪圖片,不需要經(jīng)過(guò)服務(wù)器。
這個(gè)是用 https://github.com/mailru/FileAPI 框架實(shí)現(xiàn)的。配合jcrop.
高級(jí)瀏覽器 使用 canvas 裁剪,ie6 7 8使用 flash過(guò)度。
核心代碼:
var el = $('input').get(0);
seajs.use(['gallery/jcrop/0.9.12/jcrop.css','gallery/jcrop/0.9.12/jcrop.js'] ,function(){
FileAPI.event.on(el, 'change', function (evt){
var files = FileAPI.getFiles(evt); // Retrieve file list
FileAPI.filterFiles(files, function (file, info){
if( !/^image/.test(file.type) ){
alert('圖片格式不正確');
return false;
}
else if(file.size > 20 * FileAPI.MB){
alert('圖片必須小于20M');
return false;
}
else{
return true;
}
}, function (files, rejected){
console.log(files);
if( files.length ){
var file = files[0];
var img0 = FileAPI.Image(file);
var img1 = FileAPI.Image(file);
var ratio = 0;
FileAPI.getInfo(file, function (err, info) { //get image ratio
if (!err) {
if (info.width > info.height) {
ratio = info.width / 500;
}
else {
ratio = info.height / 500;
}
}
});
img0.resize(500, 500, 'max') //place image and register jcrop
.get(function(err, img) {
$('#img2').empty();
$('#img2').append($(img));
$('#img2').children().Jcrop({
aspectRatio: 1,
bgColor: 'rgba(0,0,0,0.4)',
onSelect: function(c) {
img1.matrix.sx = c.x * ratio;
img1.matrix.sy = c.y * ratio;
img1.matrix.sw = c.w * ratio;
img1.matrix.sh = c.h * ratio;
img1.matrix.dw = 500;
img1.matrix.dh = 500;
img1.get(function(err, img) {
// $('#img3').empty();
// $('#img3').append($(img));
$('#img3').html($(img));
});
}
});
});
$('#btn').on('click',function(){
FileAPI.upload({
// url: '/testUpFile/upFile',
// headers: { 'Content-Type': 'multipart/form-data' },
files: { images: img1 },
progress: function (evt){ /* ... */ },
complete: function (err, xhr){ /* ... */
//alert(xhr.responseText);
console.log(xhr);
}
});
});
}
});
});
});
完整代碼:
<!DOCTYPE html>
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<script src="./jquery.min.js"></script>
<script src="./jcrop/jquery.Jcrop.min.js"></script>
<link href="./jcrop/jquery.Jcrop.min.css" rel="stylesheet">
</head>
<style>
.upload-btn {
width: 130px;
height: 25px;
overflow: hidden;
position: relative;
border: 3px solid #06c;
border-radius: 5px;
background: #0cf;
}
.upload-btn:hover {
background: #09f;
}
.upload-btn__txt {
z-index: 1;
position: relative;
color: #fff;
font-size: 18px;
font-family: "Helvetica Neue";
line-height: 24px;
text-align: center;
text-shadow: 0 1px 1px #000;
}
.upload-btn input {
top: -10px;
right: -40px;
z-index: 2;
position: absolute;
cursor: pointer;
opacity: 0;
filter: alpha(opacity=0);
font-size: 50px;
}
</style>
<body>
<div>
<!-- "js-fileapi-wrapper" -- required class -->
<div class="js-fileapi-wrapper upload-btn" id="choose">
<input name="files" type="file" multiple />
<button id="btn">上傳</button>
</div>
<div id="images">
<p style="margin-top: 40px;"></p>
<div id="img2" ></div>
<div id="img3"></div>
</div>
</div>
<script>window.FileAPI = { staticPath: './fileapi/' };</script>
<script src="./fileapi/FileAPI.min.js"></script>
<script>
var el = $('input').get(0);
FileAPI.event.on(el, 'change', function (evt){
var files = FileAPI.getFiles(evt); // Retrieve file list
FileAPI.filterFiles(files, function (file, info){
if( !/^image/.test(file.type) ){
alert('圖片格式不正確');
return false;
}
else if(file.size > 20 * FileAPI.MB){
alert('圖片必須小于20M');
return false;
}
else{
return true;
}
}, function (files, rejected){
if( files.length ){
var file = files[0];
var img0 = FileAPI.Image(file);
var img1 = FileAPI.Image(file);
var ratio = 0;
FileAPI.getInfo(file, function (err, info) { //get image ratio
if (!err) {
if (info.width > info.height) {
ratio = info.width / 500;
}
else {
ratio = info.height / 500;
}
}
});
img0.resize(500, 500, 'max') //place image and register jcrop
.get(function(err, img) {
$('#img2').empty();
$('#img2').append($(img));
$('#img2').children().Jcrop({
aspectRatio: 1,
bgColor: 'rgba(0,0,0,0.4)',
onSelect: function(c) {
img1.matrix.sx = c.x * ratio;
img1.matrix.sy = c.y * ratio;
img1.matrix.sw = c.w * ratio;
img1.matrix.sh = c.h * ratio;
img1.matrix.dw = 500;
img1.matrix.dh = 500;
img1.get(function(err, img) {
// $('#img3').empty();
// $('#img3').append($(img));
$('#img3').html($(img));
});
}
});
});
$('#btn').on('click',function(){
FileAPI.upload({
url: '/testUpFile/upFile',
files: { images: img1 },
progress: function (evt){ /* ... */ },
complete: function (err, xhr){ /* ... */
//alert(xhr.responseText);
}
});
});
}
});
});
</script>
</body>
</html>
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
- jQuery插件ImgAreaSelect實(shí)現(xiàn)頭像上傳預(yù)覽和裁剪功能實(shí)例講解一
- struts2+jsp+jquery+Jcrop實(shí)現(xiàn)圖片裁剪并上傳實(shí)例
- 利用jQuery插件imgAreaSelect實(shí)現(xiàn)圖片上傳裁剪(同步顯示圖像位置信息)
- 利用jQuery插件imgAreaSelect實(shí)現(xiàn)圖片上傳裁剪(放大縮?。?/a>
- jquery.Jcrop結(jié)合JAVA后臺(tái)實(shí)現(xiàn)圖片裁剪上傳實(shí)例
- jQuery實(shí)現(xiàn)圖片上傳和裁剪插件Croppie
- jQuery+PHP實(shí)現(xiàn)上傳裁剪圖片
相關(guān)文章
Jquery post傳遞數(shù)組方法實(shí)現(xiàn)思路及代碼
Jquery post 傳遞數(shù)組以做批量刪除會(huì)需要傳遞要?jiǎng)h除的數(shù)據(jù)ID數(shù)組,下面是具體的實(shí)現(xiàn)代碼,感興趣的童鞋們可以參考下2013-04-04
jquery實(shí)現(xiàn)將獲取的顏色值轉(zhuǎn)換為十六進(jìn)制形式的方法
這篇文章主要介紹了jquery實(shí)現(xiàn)將獲取的顏色值轉(zhuǎn)換為十六進(jìn)制形式的方法,包含了完整的實(shí)例與關(guān)鍵代碼的注釋說(shuō)明,并附帶了所需知識(shí)點(diǎn)的參考文章地址,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12
jQuery判斷郵箱格式對(duì)錯(cuò)實(shí)例代碼講解
本文通過(guò)實(shí)例代碼給大家講解了基于jquery判斷郵箱格式對(duì)錯(cuò),非常實(shí)用,具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-04-04
jquery動(dòng)態(tài)加載圖片數(shù)據(jù)練習(xí)代碼
這里我只是隨便做了下,上面是照片列表和兩個(gè)按鈕,單擊小圖片下面顯示大圖片,當(dāng)點(diǎn)擊按鈕時(shí)可以查看下一頁(yè),上一頁(yè)的圖片。2011-08-08
ASP.NET jQuery 實(shí)例10 動(dòng)態(tài)修改hyperlink的URL值
這節(jié)我們來(lái)看下如何實(shí)現(xiàn)通過(guò)選擇RadioButtonList值動(dòng)態(tài)改變hyperlink控件的URL值,并簡(jiǎn)要介紹bind和live方法的區(qū)別2012-02-02
jquery獲得option的值和對(duì)option進(jìn)行操作
本文為大家介紹下jquery獲得option的值和對(duì)option的操作,下面有不錯(cuò)的示例分析及示例代碼,感興趣的朋友可以了解下2013-12-12

