您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何在php中利用croppic.js對圖片進行剪切并上傳,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
使用
// css 部分 #yourId { width: 200px; height: 150px; position:relative; /* or fixed or absolute */ } // html 部分 <div id="yourId"></div> // js部分 var options = [ uploadUrl:'圖片上傳地址', cropUrl: '圖片裁切后發送的地址', // 等等各種參數配置信息 ]; var cropperHeader = new Croppic('yourId',options);
Options 參數
uploadUrl
uploadUrl:'制定上傳的地址', uploadData:{ "dummyData":1, "dummyData2":"text" }
php處理時,和普通的上傳文件一模一樣,使用$_FILES['img']可以直接獲取文件信息,上傳并保存;使用$_REQUEST[]則直接可以獲取js中uploadData中的數據。
php在處理完成后,根據成功狀態返回如下json結構
成功時
{ "status":"success", "url":"返回成功后的圖片url地址", "width":源圖片寬度, "height":源圖片高度 }
注意:源圖片寬高獲取方式 list($width, $height) = getimagesize($_FILES["img"]["tmp_name"]);
失敗時
{ "status":"error", "message":"這里是你的失敗提示信息" }
cropUrl
接下來是裁切圖片的請求,基本使用
var cropperOptions = { uploadUrl:'裁切后請求的地址', uploadData:{ "dummyData":1, "dummyData2":"text" } } var cropperHeader = new Croppic('yourId', cropperOptions);
請求php的參數基本如下:
php 端使用 nezamy/route 的request類獲取croppic.js裁切后發送過來的參數
$request = app('request'); // 上傳服務器的圖片路徑 $imgUrl = $request->body['imgUrl']; // 原始圖片寬高 $imgInitW = $request->body['imgInitW']; $imgInitH = $request->body['imgInitH']; // 新縮放的圖片寬高 $imgW = $request->body['imgW']; $imgH = $request->body['imgH']; // 與縮放圖像相關的裁剪圖像的左上角 $imgY1 = $request->body['imgY1']; $imgX1 = $request->body['imgX1']; // 裁剪圖像寬高 $cropW = $request->body['cropW']; $cropH = $request->body['cropH']; // 角度 $angle = $request->body['rotation'];
其他參數就不用介紹了,文檔上面可以看,如果看不懂或者不太清晰的可以直接下載案例做參照,比文檔要詳細些。接下來的重頭戲在php端的處理。
PHP 各種操作圖片GD庫
$temp_name = "crop_temp_" . uniqid(); $temp_path = sys_get_temp_dir() . "/"; $output_filename = $temp_path . $temp_name; $what = getimagesize($imgUrl); // 創建畫布并載入圖像 switch (strtolower($what['mime'])) { case 'image/png': $source_image = imagecreatefrompng($imgUrl); $type = '.png'; break; case 'image/jpeg': $source_image = imagecreatefromjpeg($imgUrl); $type = '.jpeg'; break; case 'image/gif': $source_image = imagecreatefromgif($imgUrl); $type = '.gif'; break; default: throw new \Exception('不支持的圖片類型'); } if (!is_writable(dirname($output_filename))) { throw new \Exception('文件無法寫入'); } // 創建一幅真彩色的圖像,從而支持更為豐富的色彩,gif文件不可使用 $resizedImage = imagecreatetruecolor($imgW, $imgH); if ($type == '.png') { // 將黑色定義為透明色 imagecolortransparent($resizedImage, imagecolorallocate($resizedImage, 0, 0, 0)); } imagecopyresampled($resizedImage, $source_image, 0, 0, 0, 0, $imgW, $imgH, $imgInitW, $imgInitH); // 旋轉圖像 $rotated_image = $angle ? imagerotate($resizedImage, -$angle, 0) : $resizedImage; // 獲取圖像寬高 $rotated_width = imagesx($rotated_image); $rotated_height = imagesy($rotated_image); // 旋轉后 - 縮放后 $dx = $rotated_width - $imgW; $dy = $rotated_height - $imgH; // 裁剪旋轉后的圖片到圖像 $cropped_rotated_image = imagecreatetruecolor($imgW, $imgH); if ($type == '.png') { // 設置黑色為透明 imagecolortransparent($cropped_rotated_image, imagecolorallocate($cropped_rotated_image, 0, 0, 0)); } imagecopyresampled($cropped_rotated_image, $rotated_image, 0, 0, $dx / 2, $dy / 2, $imgW, $imgH, $imgW, $imgH); // 剪切圖像到規定區域 $final_image = imagecreatetruecolor($cropW, $cropH); if ($type == '.png') { imagecolortransparent($final_image, imagecolorallocate($final_image, 0, 0, 0)); } imagecopyresampled($final_image, $cropped_rotated_image, 0, 0, $imgX1, $imgY1, $cropW, $cropH, $cropW, $cropH); // 最后輸出圖像到文件,就可以直接使用file_get_content('output_filename'.$type)獲取圖片了 imagepng($final_image, $output_filename . $type); /** * 這里需要進行上傳服務器操作 */ echo json_encode([ 'status' => 'success', 'url' => $output_filename . $type, ]); // 最后刪除緩存圖片 //unlink($output_filename . $type);
JS各種配置
var crop_image_src = 'image_src'; var croppedOptions = { cropUrl: 'http://deng.com/m/tool/crop_pic/crop', modal: true, doubleZoomControls: false, enableMousescroll: true, imgEyecandyOpacity: 0.4, rotateFactor: 90, zoomFactor: 20, outputUrlId: 'image_input', // loadPicture: '加載圖片', processInline: true, loaderHtml: '<div class="loader bubblingG"><span id="bubblingG_1"></span><span id="bubblingG_2"></span><span id="bubblingG_3"></span></div> ', onBeforeImgUpload: function () { crop_image_src = $('#image_input').val(); }, onAfterRemoveCroppedImg: function () { var res = confirm('您是要使用原圖還是清除圖片?\n\r[確認]使用原圖,[取消]清除圖片'); if (res) { $('#image_input').val(crop_image_src); $('#cropContainerEyecandy').prepend('<img class="croppedImg" src=' + crop_image_src + ' width="100%">'); } else { $('#image_input').val(''); $('.croppedImg').remove(); } }, onReset: function () { var res = confirm('您是要使用原圖還是清除圖片?\n\r[確認]使用原圖,[取消]清除圖片'); if (res) { $('#image_input').val(crop_image_src); $('#cropContainerEyecandy').prepend('<img class="croppedImg" src=' + crop_image_src + ' width="100%">'); } else { $('#image_input').val(''); } }, onError: function (errormessage) { alert('onError:' + errormessage) } }; var cropperBox = new Croppic('cropContainerEyecandy', croppedOptions);
關于如何在php中利用croppic.js對圖片進行剪切并上傳就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。