最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Javascript裁剪圖片并存儲的簡單實現(xiàn)

 更新時間:2017年03月13日 11:18:21   作者:_construct  
裁剪圖片對我們來說是再熟悉不過的了,最近工作中就又遇到了這個需求,所以想著干脆整理下來,方法大家和自己在需要的時候參考學(xué)習(xí),所以這篇文章主要介紹了利用Javascript裁剪圖片并存儲的簡單實現(xiàn),后端PHP處理我用的是THINKPHP框架,需要的朋友可以參考下。

前言

就我而言,頁面上的設(shè)計比較靈動的部分,其實不是很多,諸如滑動驗證碼,圖片裁剪等比較好的交互設(shè)計。

從剛開始工作的時候,我就想把這些東西了解下,無奈一直沒這個需求,乘著今天的空閑,研究了一下午,期間遇到了大大小小的問題,一直備受折磨,這其實也反映一個問題,我的

還是比較薄弱。

實現(xiàn)效果:

用戶點擊上傳圖片后,頁面顯示所上傳的圖片,并且出現(xiàn)裁剪框和兩個預(yù)覽區(qū)域,最后點擊裁剪按鈕保存裁剪的圖片到服務(wù)器上。 

效果很簡單,整個過程我遇到的兩個難點,第一個是裁剪的JS效果,第二個則是圖片數(shù)據(jù)的處理。 

對于第一個問題,我引用了網(wǎng)上的一個插件,就我感覺來說,裁剪過程用戶的滿意度只能算一般,因為它只能裁剪正方形區(qū)域,就算邊框上有八個拉動設(shè)置,但是拉動框時還是按正方形縮放,就這點不太讓我滿意。

實現(xiàn)方法如下: 

以下是簡單的頁面設(shè)計:

<div style="float:left;"><img id="target"></div>
<div style="width:48px;height:48px;margin:10px;overflow:hidden; float:left;"><img style="float:left;" id="preview" ></div>
<div style="width:190px;height:195px;margin:10px;overflow:hidden; float:left;"><img style="float:left;" id="preview2" ></div>
<form action="{:U('/test/crop_deal')}" method="post" onsubmit="return checkCoords()" enctype="multipart/form-data" id="form">
<input type="file" name="file" onchange="change_image(this)">
<input type="hidden" id="x" name="x" />
<input type="hidden" id="y" name="y" />
<input type="hidden" id="w" name="w" />
<input type="hidden" id="h" name="h" />
<input type="submit" value="裁剪"/>
</form>

下面是JS代碼:

function change_image(file){
var reader = new FileReader();
reader.onload = function(evt){
$("#target").attr('src',evt.target.result);
$('#preview').attr('src',evt.target.result);
$('#preview2').attr('src',evt.target.result);
// $('#target').css({"height":"600px","width":"600px"});
// 限制了大小會影響到截圖的效果
};
reader.readAsDataURL(file.files[0]);

var jcrop_api, boundx, boundy;

setTimeout(function(){


$('#target').Jcrop({
minSize: [48,48],
setSelect: [0,0,190,190],
onChange: updatePreview,
onSelect: updatePreview,
onSelect: updateCoords,
aspectRatio: 1
},
function(){
// Use the API to get the real image size
var bounds = this.getBounds();
boundx = bounds[0];
boundy = bounds[1];
// Store the API in the jcrop_api variable
jcrop_api = this;
});

function updatePreview(c){
if (parseInt(c.w) > 0)
{
var rx = 48 / c.w; //小頭像預(yù)覽Div的大小
var ry = 48 / c.h;

$('#preview').css({
width: Math.round(rx * boundx) + 'px',
height: Math.round(ry * boundy) + 'px',
marginLeft: '-' + Math.round(rx * c.x) + 'px',
marginTop: '-' + Math.round(ry * c.y) + 'px'
});
}
{
var rx = 199 / c.w; //大頭像預(yù)覽Div的大小
var ry = 199 / c.h;
$('#preview2').css({
width: Math.round(rx * boundx) + 'px',
height: Math.round(ry * boundy) + 'px',
marginLeft: '-' + Math.round(rx * c.x) + 'px',
marginTop: '-' + Math.round(ry * c.y) + 'px'
});
}
};


function updateCoords(c)
{
$('#x').val(c.x);
$('#y').val(c.y);
$('#w').val(c.w);
$('#h').val(c.h);
};

},500);

}

這里稍作兩點提醒:

其一:不要忘記在頁面頭部引入插件:

  <script src="/plug/js/jquery.min.js" type="text/javascript"></script>
  <script src="/plug/js/jquery.Jcrop.min.js" type="text/javascript"></script>
  <link rel="stylesheet" href="/plug/css/Jcrop.css" rel="external nofollow" type="text/css" />

其二:有些人眼尖的話可能看到了JS里有個定時,同時心理是不是很疑惑這不是有點多此一舉嗎?其實不是,上傳圖片到JS加載到頁面上,是需要時間的,這個定時的意義在于

等到圖片被JS加載到頁面上時才去加載裁剪效果,這里也是反復(fù)實驗后得出的做法。 

后端PHP處理我用的是THINKPHP框架,版本是3.1.3

貼上代碼:

function crop_deal(){
  ob_clean();
  import ( 'ORG.Net.UploadFile' );
  $upload = new UploadFile ();
  $upload->maxSize = 2000000;
  $upload->allowExts = array (
    'jpg',
    'gif',
    'png',
    'jpeg'
  );
  $upload->savePath = './upload/test/';
  $upload->autoSub = true;
  $upload->subType = 'date';
  $upload->dateFormat = 'Ymd';
  if ($upload->upload () ) {
    $info = $upload->getUploadFileInfo();
    $new_path = "./upload/test/thumb".date('Ymd');
    $file_store = $new_path."/".date('YmdHis').".jpg";
    if(!file_exists($new_path)){
      mkdir($new_path,0777,true);
    }
    $source_path = "http://".$_SERVER['HTTP_HOST']."/upload/test/".$info[0]['savename'];
    $img_size = getimagesize($source_path);
    $width = $img_size[0];
    $height = $img_size[1];  
    $mime = $img_size['mime'];
    $srcImg = imagecreatefromstring(file_get_contents($source_path));
    $cropped_img = imagecreatetruecolor($_POST['w'], $_POST['h']);
    //縮放
    // imagecopyresampled($cropped_img,$srcImg,0,0,$_POST['x'],$_POST['y'],$_POST['w'],$_POST['h'],$width,$height);
    //裁剪
    imagecopy($cropped_img,$srcImg,0,0,$_POST['x'],$_POST['y'],$_POST['w'],$_POST['h']);
    header("Content-Type:image/jpeg");
    imagejpeg($cropped_img,$file_store);
    imagedestroy($srcImg);
    imagedestroy($cropped_img);
  }

}

這里就是調(diào)用GD庫里創(chuàng)建圖像的一系列方法,最重要就是imagecopy() ,它是將原圖按規(guī)定的裁剪位置,裁剪大小復(fù)制到新的圖片上去,這也說明了一件事,頁面用戶在裁剪圖片

的時候其實前端并沒有對圖片操作,而是得到裁剪時的坐標位置,裁剪大小,然后提交到PHP操作?。?/p>

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者使用Swift能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 使用javascript實現(xiàn)雪花飄落的效果

    使用javascript實現(xiàn)雪花飄落的效果

    本文主要介紹了使用javascript實現(xiàn)雪花飄落的特效,雖然網(wǎng)上有很多,不過都是比較陳舊了,兼容性不是太好,于是動手寫一個,把思路和實現(xiàn)代碼都分享給大家。
    2015-01-01
  • js根據(jù)后綴判斷文件文件類型的代碼

    js根據(jù)后綴判斷文件文件類型的代碼

    這篇文章主要介紹了js根據(jù)后綴判斷文件文件類型的代碼,原來是獲取文件的擴展名然后再判斷屬于什么類型,對于圖片多個后綴的判斷的實現(xiàn)也不是不錯的思路,大家可以參考一下
    2020-05-05
  • 詳解webpack-dev-server使用http-proxy解決跨域問題

    詳解webpack-dev-server使用http-proxy解決跨域問題

    這篇文章主要介紹了詳解webpack-dev-server使用http-proxy解決跨域問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • JavaScript中的Function函數(shù)

    JavaScript中的Function函數(shù)

    函數(shù)是由事件驅(qū)動的或者當(dāng)它被調(diào)用時執(zhí)行的可重復(fù)使用的代碼塊,接下來跟著小編一起來學(xué)習(xí)javascript中的function函數(shù),小伙伴們快來一起學(xué)習(xí)吧
    2015-08-08
  • 微信小程序 導(dǎo)入圖標實現(xiàn)過程詳解

    微信小程序 導(dǎo)入圖標實現(xiàn)過程詳解

    這篇文章主要介紹了微信小程序 導(dǎo)入圖標實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • js實現(xiàn)遮罩層彈出框的方法

    js實現(xiàn)遮罩層彈出框的方法

    這篇文章主要介紹了js實現(xiàn)遮罩層彈出框的方法,可實現(xiàn)對遮罩層彈出框的樣式定義、按鈕事件及相關(guān)功能的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • 深入理解JavaScript 中的執(zhí)行上下文和執(zhí)行棧

    深入理解JavaScript 中的執(zhí)行上下文和執(zhí)行棧

    這篇文章主要介紹了JavaScript 中的執(zhí)行上下文和執(zhí)行棧的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-10-10
  • JavaScript 下載svg圖片為png格式

    JavaScript 下載svg圖片為png格式

    這篇文章主要介紹了JavaScript 下載svg圖片為png格式,本文通過代碼給大家講解的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • 關(guān)于javascript的一些知識以及循環(huán)詳解

    關(guān)于javascript的一些知識以及循環(huán)詳解

    下面小編就為大家?guī)硪黄P(guān)于javascript的一些知識以及循環(huán)詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • JS運動特效之同時運動實現(xiàn)方法分析

    JS運動特效之同時運動實現(xiàn)方法分析

    這篇文章主要介紹了JS運動特效之同時運動實現(xiàn)方法,結(jié)合實例形式分析了javascript同時運動的原理與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-01-01

最新評論

南昌县| 辽阳县| 湖南省| 信丰县| 六安市| 谷城县| 宜黄县| 资源县| 兴义市| 郧西县| 安远县| 福建省| 石景山区| 海林市| 黑龙江省| 东乌珠穆沁旗| 元朗区| 息烽县| 厦门市| 信阳市| 佛教| 资中县| 虹口区| 普宁市| 拜城县| 龙泉市| 武冈市| 白河县| 股票| 虎林市| 玉环县| 韶关市| 大邑县| 峨山| 苏尼特右旗| 永康市| 浠水县| 永州市| 清丰县| 溧水县| 黔东|