PHP+ajaxfileupload+jcrop插件完美實(shí)現(xiàn)頭像上傳剪裁
昨天花了點(diǎn)時(shí)間整合了一下頭像插件 東拼西湊的成果 先來(lái)看下效果
1.先使用ajaxfileupload插件做異步上傳。這個(gè)地方我本來(lái)想做個(gè)上傳進(jìn)度的效果,但技術(shù)有限失敗了。上傳按鈕我還做了一個(gè)文件大小的限制,但是由于瀏覽器兼容性的問(wèn)題,不完美在IE6--IE9之間還有很多問(wèn)題需要解決
getFileSize函數(shù)是用于判斷文件大小的函數(shù)
function getFileSize(fileName) {
var byteSize = 0;
//console.log($("#" + fileName).val());
if($("#" + fileName)[0].files) {
var byteSize = $("#" + fileName)[0].files[0].size;
}else {
//此處由于有瀏覽器兼容問(wèn)題 還沒(méi)完成大小判斷的邏輯
}
//alert(byteSize);
byteSize = Math.ceil(byteSize / 1024) //KB
return byteSize;//KB
}
2.按鈕上傳事件綁定
$("#btnUpload").click(function () {
var allowImgageType = ['jpg', 'jpeg', 'png', 'gif'];
var file = $("#file1").val();
//獲取大小
var byteSize = getFileSize('file1');
//獲取后綴
if (file.length > 0) {
if(byteSize > 2048) {
alert("上傳的附件文件不能超過(guò)2M");
return;
}
var pos = file.lastIndexOf(".");
//截取點(diǎn)之后的字符串
var ext = file.substring(pos + 1).toLowerCase();
//console.log(ext);
if($.inArray(ext, allowImgageType) != -1) {
ajaxFileUpload();
}else {
alert("請(qǐng)選擇jpg,jpeg,png,gif類型的圖片");
}
}
else {
alert("請(qǐng)選擇jpg,jpeg,png,gif類型的圖片");
}
});
3.在上傳成功后返回圖片路徑,并初始化圖片裁剪。圖片裁剪就直接用ajax請(qǐng)求到php
function ajaxFileUpload() {
$.ajaxFileUpload({
url: 'action.php', //用于文件上傳的服務(wù)器端請(qǐng)求地址
secureuri: false, //一般設(shè)置為false
fileElementId: 'file1', //文件上傳空間的id屬性 <input type="file" id="file" name="file" />
dataType: 'json', //返回值類型 一般設(shè)置為json
success: function (data, status) //服務(wù)器成功響應(yīng)處理函數(shù)
{
//var json = eval('(' + data + ')');
//alert(data);
$("#picture_original>img").attr({src: data.src, width: data.width, height: data.height});
$('#imgsrc').val(data.path);
//alert(data.msg);
//同時(shí)啟動(dòng)裁剪操作,觸發(fā)裁剪框顯示,讓用戶選擇圖片區(qū)域
var cutter = new jQuery.UtrialAvatarCutter({
//主圖片所在容器ID
content : "picture_original",
//縮略圖配置,ID:所在容器ID;width,height:縮略圖大小
purviews : [{id:"picture_200",width:200,height:200},{id:"picture_50",width:50,height:50},{id:"picture_30",width:30,height:30}],
//選擇器默認(rèn)大小
selector : {width:200,height:200},
showCoords : function(c) { //當(dāng)裁剪框變動(dòng)時(shí),將左上角相對(duì)圖片的X坐標(biāo)與Y坐標(biāo) 寬度以及高度
$("#x1").val(c.x);
$("#y1").val(c.y);
$("#cw").val(c.w);
$("#ch").val(c.h);
},
cropattrs : {boxWidth: 500, boxHeight: 500}
}
);
cutter.reload(data.src);
$('#div_avatar').show();
},
error: function (data, status, e)//服務(wù)器響應(yīng)失敗處理函數(shù)
{
alert(e);
}
})
return false;
}
$('#btnCrop').click(function() {
$.getJSON('action2.php', {x: $('#x1').val(), y: $('#y1').val(), w: $('#cw').val(), h: $('#ch').val(), src: $('#imgsrc').val()}, function(data) {
alert(data.msg);
});
return false;
});
4.HTML文件代碼如下
<body>
<p><input type="file" id="file1" name="file1" /></p>
<input type="button" value="上傳" id="btnUpload"/>
<div style="display:none;overflow:hidden" id="div_avatar">
<div style="width:500px;height:500px;overflow:hidden;float:left;" id="picture_original"><img alt="" src="" /></div>
<div id="picture_200" style="float:left;margin-left:20px"></div>
<div id="picture_50" style="float:left;margin-left:20px"></div>
<div id="picture_30" style="float:left;margin-left:20px"></div>
<input type="hidden" id="x1" name="x1" value="0" />
<input type="hidden" id="y1" name="y1" value="0" />
<input type="hidden" id="cw" name="cw" value="0" />
<input type="hidden" id="ch" name="ch" value="0" />
<input type="hidden" id="imgsrc" name="imgsrc" />
<input type="button" value="裁剪上傳" id="btnCrop"/>
</div>
</body>
現(xiàn)在還很粗糙,功能還有很多需要完善的地方。大家有興趣的話,就拿去使用吧。如果完善了進(jìn)度條和文件大小的功能,記得也分享給我一份哦。
附上源碼 http://chabaoo.cn/codes/174384.html
- php+ajax實(shí)現(xiàn)圖片文件上傳功能實(shí)例
- jQuery Ajax文件上傳(php)
- php ajax無(wú)刷新上傳圖片實(shí)例代碼
- 使用ajaxfileupload.js實(shí)現(xiàn)ajax上傳文件php版
- PHP+jQuery+Ajax實(shí)現(xiàn)多圖片上傳效果
- ThinkPHP結(jié)合AjaxFileUploader實(shí)現(xiàn)無(wú)刷新文件上傳的方法
- php+html5+ajax實(shí)現(xiàn)上傳圖片的方法
- File, FileReader 和 Ajax 文件上傳實(shí)例分析(php)
- PHP結(jié)合jQuery插件ajaxFileUpload實(shí)現(xiàn)異步上傳文件實(shí)例
- php+ajax實(shí)現(xiàn)無(wú)刷新文件上傳功能(ajaxuploadfile)
相關(guān)文章
thinkphp框架page類與bootstrap分頁(yè)(美化)
這篇文章主要介紹了thinkphp框架page類與bootstrap分頁(yè)(美化) ,需要的朋友可以參考下2017-06-06php實(shí)現(xiàn)斐波那契數(shù)列代碼分享
這篇文章主要介紹了php實(shí)現(xiàn)斐波那契數(shù)列代碼分享,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12利用PHP?POST臨時(shí)文件機(jī)制實(shí)現(xiàn)任意文件上傳的方法詳解
這篇文章主要介紹了利用?PHP?POST?臨時(shí)文件機(jī)制實(shí)現(xiàn)任意文件上傳,同時(shí)該過(guò)程也會(huì)打斷 php 對(duì)臨時(shí)文件的處理,雖然最終仍會(huì)被刪除,但相較之前可以明顯看出臨時(shí)文件在磁盤的中存在的時(shí)間變長(zhǎng)了,需要的朋友可以參考下2022-04-04解決laravel groupBy 對(duì)查詢結(jié)果進(jìn)行分組出現(xiàn)的問(wèn)題
今天小編就為大家分享一篇解決laravel groupBy 對(duì)查詢結(jié)果進(jìn)行分組出現(xiàn)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10網(wǎng)頁(yè)的分頁(yè)下標(biāo)生成代碼(PHP后端方法)
網(wǎng)頁(yè)的分頁(yè)選擇效果直接影響用戶的使用體驗(yàn)。類似功能的方法有很多,我在這里寫的方法主要是的優(yōu)勢(shì)在于前后端分離,可以自己定義長(zhǎng)度和分頁(yè)的行數(shù)2016-02-02Laravel (Lumen) 解決JWT-Auth刷新token的問(wèn)題
今天小編就為大家分享一篇Laravel (Lumen) 解決JWT-Auth刷新token的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10php實(shí)現(xiàn)微信公眾號(hào)創(chuàng)建自定義菜單功能的實(shí)例代碼
這篇文章主要介紹了php實(shí)現(xiàn)微信公眾號(hào)創(chuàng)建自定義菜單功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06