jcrop+Fileapi圖片上傳裁剪外掛使用簡單介紹
本章節分享一下jQuery外掛jcrop+Fileapi完美實現圖片上傳+裁剪+預覽的程式碼,非常的簡單實用。
網頁端 裁剪圖片,不需要經過伺服器。
這個是用 https://github.com/mailru/FileAPI 框架實現的。配合jcrop。
高階瀏覽器 使用 canvas 裁剪,ie6 7 8使用 flash過度。
核心程式碼:
[JavaScript] 純文字檢視 複製程式碼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); } }); }); } }); }); });
完整程式碼:
[HTML] 純文字檢視 複製程式碼<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.51texiao.cn/" /> <title>螞蟻部落</title> <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>
相關文章
- octobercms 圖片裁剪外掛
- jquery.cookie外掛使用簡單介紹jQueryCookie
- alertify提示外掛使用方式簡單介紹
- Vue圖片裁剪上傳元件Vue元件
- YprogressBar進度條外掛使用簡單介紹
- jQuery外掛Tmpl使用方法簡單介紹jQuery
- jquery圖片上傳外掛HHuploadifyjQuery
- [外掛擴充套件]圖片批量上傳外掛2.0套件
- 圖片裁剪上傳示例(node + react)React
- 自定義jquery外掛簡單介紹jQuery
- jQuery自定義外掛簡單介紹jQuery
- jQuery外掛製作簡單介紹jQuery
- 5 款最新的 jQuery 圖片裁剪外掛jQuery
- zTree外掛常鍵用法簡單介紹
- jQuery外掛開發流程簡單介紹jQuery
- javascript圖片預載入簡單介紹JavaScript
- 基於uni-app圖片上傳JS外掛APPJS
- [外掛擴充套件]移動端多圖片上傳外掛uploadimages套件
- JQuery外掛:圖片上傳本地預覽外掛,改進案例一則。jQuery
- 如何使用FormData上傳壓縮裁剪後的圖片Blob物件ORM物件
- Laravel- 圖片上傳新增自動裁剪功能Laravel
- 圖片裁剪並上傳到阿里雲oss阿里
- jquery.lazyload.js外掛用法簡單介紹jQueryJS
- 使用 HTML5 Canvas 實現圓形圖片裁剪並上傳HTMLCanvas
- input:file上傳型別控制簡單介紹型別
- 基於cropper.js的圖片上傳和裁剪JS
- cluetip關鍵詞連結外掛用法簡單介紹
- 小程式踩坑記錄-上傳圖片及canvas裁剪圖片後上傳至伺服器Canvas伺服器
- 5款好用的開源JS圖片裁剪外掛(3個jQuery外掛,2個AngularJS外掛)JSjQueryAngular
- PHP+jQuery+Ajax實現多圖片上傳介紹PHPjQuery
- 前端手勢控制圖片外掛書寫四(圖片上傳及Ios圖片方向問題)前端iOS
- web技術分享| 圖片上傳與圖片裁剪結合 vue3WebVue
- Lightbox_me彈出層外掛使用說明簡單介紹
- php單張圖片上傳外掛免重新整理,相容手機,可實現類似微信圖片上傳的體驗PHP
- 非常簡單的使用jqueryfancybox外掛實現的檢視圖片效果jQuery
- 微信小程式簡單封裝圖片上傳元件微信小程式封裝元件
- (譯)uCrop介紹 —— 我們自己的Android圖片裁剪庫Android
- [提問交流]多圖上傳外掛和系統自帶的圖片上傳不能共存嗎?