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

通過js實(shí)現(xiàn)壓縮圖片上傳功能

 更新時(shí)間:2020年02月25日 09:37:18   作者:西瓜霜  
這篇文章主要介紹了通過js實(shí)現(xiàn)壓縮圖片上傳功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

大概的流程就是

  • 點(diǎn)擊file選擇圖片
  • js將圖片解讀出base64編碼,然后通過js將base64編碼轉(zhuǎn)為壓縮后的base64
  • 然后通過ajax或者form把壓縮后的base64編碼提交到服務(wù)器(php)
  • 然后php將base64寫入文件

html

<!-- 首先引入jquery!!!!!!這里沒有引入 -->


<img src="/Uploads/verifyinfo/cardz.png" style="width: 100%;height: 100%;">
<input id="cardz" name="cardz" class="weui-uploader__input" type="file" accept="image/*" multiple="">
<input type="hidden" id="cardzbase" name="cardzbase">


<script>
 $(function(){
  $("input[type=file]").on('change', function(){

   var filePath = $(this).val(),     //獲取到input的value,里面是文件的路徑
       fileFormat = filePath.substring(filePath.lastIndexOf(".")).toLowerCase(),
       fileObj = document.getElementById($(this).attr('id')).files[0]; //上傳文件的對象,要這樣寫才行,用jquery寫法獲取不到對象

   var imgBase64str = '';   //存儲(chǔ)圖片的imgBase64
   // 檢查是否是圖片
   if( !fileFormat.match(/.png|.jpg|.jpeg/) ) {
    alert('上傳錯(cuò)誤,文件格式必須為:png/jpg/jpeg');
    return;
   }
   var that = this;
   // 調(diào)用函數(shù),對圖片進(jìn)行壓縮
   compress(fileObj,function(imgBase64){
    imgBase64str = imgBase64;//存儲(chǔ)轉(zhuǎn)換后的base64編碼

    var reader = new FileReader();
    var img = $(that).prev("img")
    file = that.files[0]
    reader.addEventListener("load", function () {
     img.attr("src",imgBase64str);
     $("#"+$(that).attr('id')+"base").val(imgBase64str);
    }, false);
    reader.readAsDataURL(file)
   });



  })
  $("#uploadcard").on("click", function(){
   var cardzbase = $("#cardzbase").val();
   if (cardzbase.length<=0) {
    $.toast("請?zhí)砑诱嬲?);
    return;
   }
   $.post(
    "php路徑",
    {
     cardzbase:cardzbase
    },
    function (data) {
     alert(data.msg);
    }
   );


  });
 })
 // 對圖片進(jìn)行壓縮
 function compress(fileObj, callback){
  if ( typeof (FileReader) === 'undefined') {
   console.log("當(dāng)前瀏覽器內(nèi)核不支持base64圖標(biāo)壓縮");
   //調(diào)用上傳方式不壓縮
   directTurnIntoBase64(fileObj,callback);
  } else {
   var reader = new FileReader();
   reader.onload = function (e) { //要先確保圖片完整獲取到,這是個(gè)異步事件


    var image = new Image();
    image.src=e.target.result;
    image.onload = function(){
     square = 0.2,  //定義畫布的大小,也就是圖片壓縮之后的像素
         canvas = document.createElement('canvas'), //創(chuàng)建canvas元素
         context = canvas.getContext('2d'),
         imageWidth = Math.round(square*image.width),  //壓縮圖片的大小
         imageHeight = Math.round(square*image.height),
         data = '';

     canvas.width = imageWidth;
     canvas.height = imageHeight;
     context.clearRect(0, 0, imageWidth, imageHeight); //在給定矩形內(nèi)清空一個(gè)矩形
     context.drawImage(this, 0, 0, imageWidth, imageHeight);
     var data = canvas.toDataURL('image/jpeg',0.6);
     //壓縮完成執(zhí)行回調(diào)

     callback(data);
    };
   };
   reader.readAsDataURL(fileObj);

  }
 }
 // 不對圖片進(jìn)行壓縮,直接轉(zhuǎn)成base64
 function directTurnIntoBase64(fileObj,callback){
  var r = new FileReader();
  // 轉(zhuǎn)成base64
  r.onload = function(){
   //變成字符串
   imgBase64 = r.result;
   //console.log(imgBase64);
   callback(imgBase64);
  }
  r.readAsDataURL(fileObj);  //轉(zhuǎn)成Base64格式
 }
</script>

php

<?php
/**
   * [將Base64圖片轉(zhuǎn)換為本地圖片并保存]
   * @param $base64_image_content [要保存的Base64]
   * @param $path [要保存的路徑]
   * @return bool|string
   */
  public function base64_image_content($base64_image_content,$path){
    //匹配出圖片的格式
    if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)){
      $type = $result[2];
      //生成文件名
      $file_name = random_str(10).".{$type}";
      //路徑和文件名拼接
      $local_file_url = $path.$file_name;
      if (file_put_contents($local_file_url, base64_decode(str_replace($result[1], '', $base64_image_content)))){
        return array("filename"=>$file_name,"path"=>$path,"filepath"=>$local_file_url);
      }else{
        return false;
      }
    }else{
      return false;
    }
  }

  public function uploadm()
  {
    $da['status'] = 0;
    if (IS_POST) {
      $infoz = I("post.cardzbase");
      if (!$infoz || !$infof) {
        // 上傳錯(cuò)誤提示錯(cuò)誤信息
//        $this->error($upload->getError());
        $da['msg'] = "上傳異常";
      } else {
        $infoz_info = $this->base64_image_content($infoz,"Uploads/verifyinfo/");
        if($infof_info==false){
          $da['msg'] = "上傳失敗";
        }else{
          //自己的業(yè)務(wù)...
        }
      }
    }else{
      $da['msg'] = "非法請求";
    }
    $this->ajaxReturn($da);
  }

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • jsjiami.v6解密原理示例分析

    jsjiami.v6解密原理示例分析

    這篇文章主要為大家介紹了jsjiami.v6解密原理示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 復(fù)制Input內(nèi)容的js代碼_支持所有瀏覽器,修正了Firefox3.5以上的問題

    復(fù)制Input內(nèi)容的js代碼_支持所有瀏覽器,修正了Firefox3.5以上的問題

    今天作一個(gè)功能,有一個(gè)input,里邊有內(nèi)容,點(diǎn)一下按鈕就復(fù)制里邊的內(nèi)容到剪貼板
    2010-06-06
  • javascript中的nextSibling使用陷(da)阱(keng)

    javascript中的nextSibling使用陷(da)阱(keng)

    關(guān)于HTML/XML節(jié)點(diǎn)的問題,在IE中nextSibling不會(huì)返回文本節(jié)點(diǎn),而chrome或者firefox等會(huì)返回文本節(jié)點(diǎn)
    2014-05-05
  • 利用d3.js實(shí)現(xiàn)蜂巢圖表帶動(dòng)畫效果

    利用d3.js實(shí)現(xiàn)蜂巢圖表帶動(dòng)畫效果

    這篇文章主要給大家介紹了關(guān)于如何利用d3.js實(shí)現(xiàn)蜂巢圖表帶動(dòng)畫效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用d3.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • JavaScript實(shí)現(xiàn)的超簡單計(jì)算器功能示例

    JavaScript實(shí)現(xiàn)的超簡單計(jì)算器功能示例

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)的超簡單計(jì)算器功能,可實(shí)現(xiàn)基本的四則運(yùn)算并帶有驗(yàn)證功能,代碼中備有較為詳盡的注釋便于理解,需要的朋友可以參考下
    2017-12-12
  • Object的相關(guān)方法 和 js遍歷對象的常用方法總結(jié)

    Object的相關(guān)方法 和 js遍歷對象的常用方法總結(jié)

    這篇文章主要介紹了Object的相關(guān)方法 和 js遍歷對象的常用方法,結(jié)合實(shí)例形式總結(jié)分析了Object對象操作的操作方法與js遍歷的三種常用方法,需要的朋友可以參考下
    2023-05-05
  • uniapp?實(shí)現(xiàn)自定義縮略滾動(dòng)條效果

    uniapp?實(shí)現(xiàn)自定義縮略滾動(dòng)條效果

    這篇文章主要介紹了uniapp?實(shí)現(xiàn)自定義縮略滾動(dòng)條,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-08-08
  • JS回調(diào)函數(shù)深入理解

    JS回調(diào)函數(shù)深入理解

    這篇文章主要介紹了JS回調(diào)函數(shù),結(jié)合實(shí)例形式深入分析了js回調(diào)函數(shù)的概念、原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • 前端大屏適配的三種解決方案總結(jié)

    前端大屏適配的三種解決方案總結(jié)

    在日常前端開發(fā)中,大屏項(xiàng)目是每個(gè)前端開發(fā)者必備技能,但是目前設(shè)備尺寸大小和分辨率都不相同,所以大屏適配成了一個(gè)頭疼的問題,所以下面這篇文章主要給大家介紹了關(guān)于前端大屏適配的三種解決方案,需要的朋友可以參考下
    2024-03-03
  • JavaScript自動(dòng)點(diǎn)擊鏈接 防止繞過瀏覽器訪問的方法

    JavaScript自動(dòng)點(diǎn)擊鏈接 防止繞過瀏覽器訪問的方法

    下面小編就為大家?guī)硪黄狫avaScript自動(dòng)點(diǎn)擊鏈接 防止繞過瀏覽器訪問的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01

最新評論

锡林浩特市| 连南| 安丘市| 定兴县| 白城市| 伊宁县| 宁津县| 安丘市| 甘谷县| 云霄县| 荃湾区| 崇州市| 扎赉特旗| 西和县| 海伦市| 治县。| 平罗县| 双桥区| 广灵县| 三原县| 乡宁县| 铁岭市| 苏尼特左旗| 林芝县| 酒泉市| 屯门区| 威宁| 阳山县| 新龙县| 中方县| 金湖县| 股票| 龙游县| 特克斯县| 新源县| 屏南县| 阿克| 榆林市| 尉氏县| 凤山县| 鸡西市|