1. 程式人生 > >上傳圖片,用Jcrop剪裁影象並用PHP獲取剪裁後的影象

上傳圖片,用Jcrop剪裁影象並用PHP獲取剪裁後的影象

    在此過程中,筆者遇到了一些往常沒有遇到過的問題,通過Google和查詢API找到了解決問題的方法,在此整理出來與遇到同樣問題的朋友們分享。

    首先,筆者在用input:file上傳圖片的時候,更改了控制元件了樣式,用input:text和input:button這兩個控制元件來代替input:file,原來的input:file控制元件隱藏,如此,只需要更改後兩個控制元件的樣式,並且新增他們與input:file的關聯即可。具體程式碼如下:

HTML:

<span style="font-family:Times New Roman;font-size:14px;"><input type=file id="xxx" name=orifile style="xxx;display:none;" onChange="$('input[name=\'filetext\']').val($(this).val());"/>
<input type=text name=filetext class="sss" style="xxx"/> 
<input type=button value="submit" onclick="$('input[name=\'orifile\']').click();" class="xxx" style="xxx"/></span>

    筆者在系統中,需要繫結input:file控制元件的onChange事件,而且能夠在該控制元件能夠連續不斷的觸發onChange事件。在jquery1.7之前的版本中,可以通過jQuery.live()事件進行繫結,但是在jquery1.7之後的版本,live方法已經被棄用了,轉而取代它的是on方法,可以筆者在通過on方法繫結onChange事件時,只能夠觸發一次。

    在查閱過大量資料以後,筆者對程式碼進行了改進,改進的過程如下:

JAVASCRIPT:

<span style="font-family:Times New Roman;font-size:14px;">$(document).on("change", "#xxx", function(){
    函式體...
});</span>

    靜態的方法可以通過$("#xxx").on("change", function(){});的寫法進行,而如果input:file是動態方法生成的控制元件,則需要用程式碼框中的方法,因為onChange事件需要在頁面載入之後才能載入。

    筆者使用Jcrop這款JQuery外掛來處理影象剪裁的,這款外掛相對比較簡單易學,有三種方法可以對外掛進行載入,筆者建議使用Jcrop的api,具體程式碼如下:

JAVASCRIPT:

<span style="font-family:Times New Roman;font-size:14px;">/*選框大小固定為1000*160,不允許更改選框大小*/
var api;
var opt = {};
opt.allowResize = false;  //不允許更改選框大小
opt.allowSelect = false;  //不允許建立新選框
opt.allowMove = true;  //允許拖動選框
opt.boxWidth = 1100;  //畫布寬度
opt.boxHeight = 500;  //畫布高度
opt.aspectRatio = 6.25;  //圖片的橫縱比
api = $.Jcrop("#jcrop", opt);  //建立外掛
api.setImage(/*圖片路徑*/path);  //載入圖片
api.setOptions({onSelect: getCoords});  //新增選項,onSelect是建立選框之後觸發的事件

api.animateTo([0, 0, 1000, 160]);  //選框生成動畫
api.setSelect([0, 0, 1000, 160]);  //生成選框

/*事件觸發函式*/
function getCoords(obj) {
    /*以下引數需要通過ajax傳送至php後臺*/
      selectw = parseInt(obj.w);  //選框寬度
      selecth = parseInt(obj.h);   //選框高度
      selectx = parseInt(obj.x);   //選框起點x座標
      selecty = parseInt(obj.y);   //選框起點y座標
}</span><span style="font-size:18px;font-family: KaiTi_GB2312;">
</span>

將上述獲得的引數傳至PHP後臺,使用PHP自帶函式進行處理:
<span style="font-family:Times New Roman;font-size:14px;">$type = exif_imagetype($path);  //獲得圖片型別
switch ($type) {
      case IMAGETYPE_GIF:
           $im1 = imagecreatefromgif($path);  //建立一個跟原圖一樣大小的圖片
           break;
      case IMAGETYPE_JPEG:
           $im1 = imagecreatefromjpeg($path);  //建立一個跟原圖一樣大小的圖片
           break;
      case IMAGETYPE_PNG:
           $im1 = imagecreatefrompng($path);  //建立一個跟原圖一樣大小的圖片
           break;
      default :
           exit();
	  break;
}

$new_img = imagecreatetruecolor($w, $h);  //建立一個使用者剪裁寬高的黑白圖片
imagecopyresampled($new_img, $im1, 0, 0, $x, $y, $w, $h, $w, $h); //將原圖拷貝到新建立剪裁區域的圖片中

switch ($type) {
       case IMAGETYPE_GIF:
            imagegif($new_img, $newsrc); //按新路徑儲存圖片
            break;
       case IMAGETYPE_JPEG:
            imagejpeg($new_img, $newsrc, 100);  //按新路徑儲存圖片
            break;
       case IMAGETYPE_PNG:
            imagepng($new_img, $newsrc, 9);  //按新路徑儲存圖片
            break;
       default:
            exit();
            break;
}</span>

    這樣圖片就剪裁完成了。

    剪裁前的效果:



    剪裁後的效果:


相關推薦

圖片Jcrop剪裁影象並用PHP獲取剪裁影象

    在此過程中,筆者遇到了一些往常沒有遇到過的問題,通過Google和查詢API找到了解決問題的方法,在此整理出來與遇到同樣問題的朋友們分享。     首先,筆者在用input:file上傳圖片的時候,更改了控制元件了樣式,用input:text和input:butto

layer 彈框 cropper 裁剪圖片thinkphp 3 使用 CropAvatar.class.php

最近要做一個上傳裁剪圖片功能,但是網上收出來的東西,知識點都是對的。但是就是沒說清楚,也無法連續起來用。 經過自己整理出來的一套程式碼,親測可用! 不用多說,直接上菜。 PS:搜尋引擎收錄的還是很垃圾...... 呼叫頁面,簡單程式碼(可複用) <img src="{$info.co

ueditor圖片不好訪問ueditor中的controller.js變成下載檔案

由於疏忽了web.xml中的servlet配置問題,將urlpattern配置成了"/" <servlet-mapping>     <servlet-name>test</servlet-name>  &

使用 CKEditor 圖片 粘貼屏幕截圖

要求 license 回調 wan ade 做成 操作 rms 粘貼 之前寫過wangEditor,那真是好用,文檔也清晰,半天就搞定了,無奈沒有對應license,只好選擇別的。 外語一般,閱讀理解都靠蒙。CKEditor官方文檔看的我雲裏霧裏,國內的博客比較少,

百度WebUploader圖片圖片回顯編輯查看

set 唯一性 original 無需 同名 sch nag fin enum 頁面前端使用的是bootstrap,java後端springMVC , 上傳用的WebUploader,先說說上傳圖片,回顯編輯圖片在下一篇 如果僅僅只需要上傳圖片,不需要回顯進行編輯圖片,使用

html   圖片本頁預覽

html 上傳圖片 本頁預覽 直接上代碼<!DOCTYPE html><html><head><meta charset="UTF-8"><title>圖片上傳預覽</title><script type="text/j

C# 使用FileUpload控件圖片將文件轉換成二進制進行存儲與讀取

擴展 實現 bmi extension aaa 插入數據 問題 pup cat 狀況描述:   需要上傳文件,但是不想要保存到實體路徑下,便可以用該功能來實現。 效果圖:      點擊【Upload】按鈕,上傳文件到數據庫;   點擊【Preview】,預覽文件;

微信jssdk圖片一張一張的 和 一次性好幾張

pla can 參數錯誤 其他 屬性 使用 down pop menu //html模板 <div class="zhaopin_3_2"> <div id="bbb"></div> &

小程序圖片排隊

length 內容 ext 有效 ges mar 顯示 func 沒有 //沒有處理的wxml,但是有效果,可以簡單試驗一下 <view class=‘minbox1‘> <text class=‘red wzgs‘>*</text>

php 中使用cURL發送get/post請求圖片批處理

cit gda 抓取 記錄 rem 學習 網頁 lose XML https://mp.weixin.qq.com/s/8luqMEd8xt8oJxFLLCU1XA 文章正文 cURL是利用url語法規定傳輸文件和數據的工具。php中有curl拓展,一般用來實現網絡抓取,模

微信小程式圖片視訊及預覽

wxml <!-- 圖片預覽 --> <view class='preview-warp' wx:if="{{urls}}"> <image src='{{urls}}' /> </view> <view class="prew_video"

tp3.2 ajax圖片(可以,樣式要自己寫)

html頁面 <form id="mbInfoForm" action="" method="POST"> <input type="hidden" name="idcard_up" id="idcard_up"> <table class="formTbl">

nodejs express 框架 圖片頭像問題

上傳圖片總結: 必須 安裝’multer’模組 Npm I multer –S(手動輸入小寫) 第一步 App.js 裡面 掛載index路由之前寫入 app.use(express.static(path.join(__dirname, 'public'))); var mul

如何使用objective c檔案flask接收檔案

flask是python中類似於php的伺服器元件。 ios提供了NSMutableArray和 dataTaskWithRequest用來使用http上傳資料。但是flask只支援基於表單格式的資料。 表單格式是在原始http資料上,提供了額為的資訊。如果直接使用ios的api把資料傳送給

layui-圖片可使用選擇圖片->圖片預覽圖片刪除圖片(轉載)

原文地址:https://gitee.com/AMortal/codes/qt8m6zk30u1g4evr95jhx13 <!DOCTYPE html> <html> <head> <meta

利用ajax圖片並使用CURL呼叫介面

這是我第一次使用ajax上傳檔案,並且不通過form表單進行上傳,之前使用ajax上傳檔案時是藉助一個叫form.js的檔案,可以直接使用$.ajaxSumbmit直接提交表單,但這次不同,就是使用ajax上傳,並且將圖片資訊放在ajax要上傳的資料data陣列或物件中,怎麼

微信公眾號開發之選擇圖片圖片下載圖片顯示圖片

function clickImg(that){ wx.chooseImage({ count: 1, needResult: 1, sizeType: ['original', 'compressed'], // 可以指定是原圖還是壓

Spring MVC圖片Java二進位制圖片寫入資料庫生成略縮圖

步驟:1.將圖片上傳到伺服器的一個磁碟目錄下。 2.將剛才上傳好的圖片寫入資料庫image欄位。 一、上傳圖片:使用的是spring mvc 對上傳的支援。 jsp 頁面: <form name="uploadForm" id="uploadForm" m

iOS整合七牛雲(圖片視訊音訊等檔案)

用的CocoaPods匯入SDK platform :ios,'9.0' target '專案名' do pod 'AFNetworking' pod 'Qiniu' end 匯入標頭檔案 #import<QiniuSDK.h> #i