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

js通過canvas生成圖片縮略圖

 更新時間:2020年10月02日 18:11:55   作者:Dean  
對于生成縮略圖一般做法是通過后端語言php等來生成,但是為了給服務器減壓,我們或許可以從前端來著手,先生成好不同尺寸的縮略圖,傳給后端,而后端只需要將前端傳過來的圖片進行存儲就好了

現(xiàn)今大部分的網(wǎng)絡應用在上傳圖片的時候都會同時保存幾種尺寸的圖片,專業(yè)術語也就是生成縮略圖,而對于生成縮略圖一般做法是通過后端語言php等來生成,但是為了給服務器減壓,我們或許可以從前端來著手,先生成好不同尺寸的縮略圖,傳給后端,而后端只需要將前端傳過來的圖片進行存儲就好了。

使用Canvas我們可以輕松生成各種尺寸的圖片,具體實現(xiàn)如下:

function resizeImage(src,callback,w,h){
 var canvas = document.createElement("canvas"),
  ctx = canvas.getContext("2d"),
  im = new Image();
  w = w || 0,
  h = h || 0;
 im.onload = function(){
  //為傳入縮放尺寸用原尺寸
  !w && (w = this.width);
  !h && (h = this.height);
  //以長寬最大值作為最終生成圖片的依據(jù)
  if(w !== this.width || h !== this.height){
   var ratio;
   if(w>h){
    ratio = this.width / w;
    h = this.height / ratio;
   }else if(w===h){
    if(this.width>this.height){
     ratio = this.width / w;
     h = this.height / ratio;
    }else{
     ratio = this.height / h;
     w = this.width / ratio;
    }
   }else{
    ratio = this.height / h;
    w = this.width / ratio;
   }
  }
  //以傳入的長寬作為最終生成圖片的尺寸
  if(w>h){
   var offset = (w - h) / 2;
   canvas.width = canvas.height = w;
   ctx.drawImage(im,0,offset,w,h);
  }else if(w<h){
   var offset = (h - w) / 2;
   canvas.width = canvas.height = h;
   ctx.drawImage(im,offset,0,w,h);
  }else{
   canvas.width = canvas.height = h;
   ctx.drawImage(im,0,0,w,h);
  }
  callback(canvas.toDataURL("image/png"));
 }
 im.src = src;
}

在線實例地址:http://demo.jb51.net/js/2020/thumbnail/,圖片素材是拿的我們做的一個相框制作應用的截圖,有興趣的朋友可以聯(lián)系我哦,大家一起討論,一起玩。

相關文章

  • webpack打包js的方法

    webpack打包js的方法

    這篇文章主要介紹了webpack打包js的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • 鼠標滑過出現(xiàn)預覽的大圖提示效果

    鼠標滑過出現(xiàn)預覽的大圖提示效果

    這篇文章主要介紹了如何實現(xiàn)鼠標滑過出現(xiàn)預覽的大圖提示效果,需要的朋友可以參考下
    2014-02-02
  • JavaScript?setTimeout和setInterval的用法與區(qū)別詳解

    JavaScript?setTimeout和setInterval的用法與區(qū)別詳解

    Javascript的setTimeOut和setInterval函數(shù)應用非常廣泛,它們都用來處理延時和定時任務,下面這篇文章主要給大家介紹了關于JavaScript?setTimeout和setInterval的用法與區(qū)別,需要的朋友可以參考下
    2022-04-04
  • JS簡單數(shù)組排序操作示例【sort方法】

    JS簡單數(shù)組排序操作示例【sort方法】

    這篇文章主要介紹了JS簡單數(shù)組排序操作,結合實例形式分析了javascript使用sort方法進行數(shù)組排序的相關操作技巧,需要的朋友可以參考下
    2019-05-05
  • 基于JavaScript實現(xiàn)帶縮略圖的輪播效果

    基于JavaScript實現(xiàn)帶縮略圖的輪播效果

    這篇文章主要為大家詳細介紹了基于JavaScript實現(xiàn)帶縮略圖的輪播效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • JS高級調試技巧:捕獲和分析 JavaScript Error詳解

    JS高級調試技巧:捕獲和分析 JavaScript Error詳解

    前端工程師都知道 JavaScript 有基本的異常處理能力。我們可以 throw new Error(),瀏覽器也會在我們調用 API 出錯時拋出異常。但估計絕大多數(shù)前端工程師都沒考慮過收集這些異常信息
    2014-03-03
  • JavaScript的11個小技巧整理

    JavaScript的11個小技巧整理

    這篇文章介紹了JavaScript的11個小技巧,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 詳解JS中的柯里化(currying)

    詳解JS中的柯里化(currying)

    這篇文章主要介紹了JS中的柯里化(currying),需要的朋友可以參考下
    2017-08-08
  • JS計算輸出100元錢買100只雞問題的解決方法

    JS計算輸出100元錢買100只雞問題的解決方法

    這篇文章主要介紹了JS計算輸出100元錢買100只雞問題的解決方法,簡單描述了100元錢買100只雞問題并結合實例形式分析了問題解決的思路與具體實現(xiàn)方法,需要的朋友可以參考下
    2018-01-01
  • 前端echarts加標記點及標記線和提示框詳細代碼示例

    前端echarts加標記點及標記線和提示框詳細代碼示例

    ECharts中的標記線是一條平行于x軸的水平線,有最大值、最小值、平均值等數(shù)據(jù)的標記線,它也是在series字段下進行配置的,下面這篇文章主要給大家介紹了關于前端echarts加標記點及標記線和提示框的相關資料,需要的朋友可以參考下
    2024-06-06

最新評論

修武县| 西丰县| 如皋市| 鹤庆县| 莱西市| 阿坝| 中阳县| 平江县| 井研县| 迭部县| 怀宁县| 嘉兴市| 余姚市| 阿尔山市| 三门峡市| 建水县| 瓮安县| 横山县| 库尔勒市| 松江区| 嘉定区| 鸡东县| 土默特左旗| 和林格尔县| 图们市| 夏邑县| 乌拉特中旗| 德清县| 仁布县| 石渠县| 东乡县| 河北省| 花垣县| 易门县| 江门市| 本溪市| 永平县| 阳泉市| 高要市| 临潭县| SHOW|