js 压缩图片 上传

感谢,参考了以下作者的绝大部分内容

https://blog.csdn.net/tangxiujiang/article/details/78755292

https://blog.csdn.net/u011415782/article/details/79978608

大概的流程就是

点击file选择图片

js将图片解读出base64编码,然后通过js将base64编码转为压缩后的base64

然后通过ajax或者form把压缩后的base64编码提交到服务器(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 = ‘‘;      //存储图片的imgBase64
      // 检查是否是图片
      if( !fileFormat.match(/.png|.jpg|.jpeg/) ) {
        alert(‘上传错误,文件格式必须为:png/jpg/jpeg‘);
        return;
      }
      var that = this;
      // 调用函数,对图片进行压缩
      compress(fileObj,function(imgBase64){
        imgBase64str = imgBase64;//存储转换后的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("请添加正面照");
        return;
      }
      $.post(
        "php路径",
        {
          cardzbase:cardzbase
        },
        function (data) {
          alert(data.msg);
        }
      );

    });
  })
  // 对图片进行压缩
  function compress(fileObj, callback){
    if ( typeof (FileReader) === ‘undefined‘) {
      console.log("当前浏览器内核不支持base64图标压缩");
      //调用上传方式不压缩
      directTurnIntoBase64(fileObj,callback);
    } else {
      var reader = new FileReader();
      reader.onload = function (e) { //要先确保图片完整获取到,这是个异步事件

        var image = new Image();
        image.src=e.target.result;
        image.onload = function(){
          square = 0.2,   //定义画布的大小,也就是图片压缩之后的像素
                  canvas = document.createElement(‘canvas‘), //创建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);  //在给定矩形内清空一个矩形
          context.drawImage(this, 0, 0, imageWidth, imageHeight);
          var data = canvas.toDataURL(‘image/jpeg‘,0.6);
          //压缩完成执行回调

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

    }
  }
  // 不对图片进行压缩,直接转成base64
  function directTurnIntoBase64(fileObj,callback){
    var r = new FileReader();
    // 转成base64
    r.onload = function(){
      //变成字符串
      imgBase64 = r.result;
      //console.log(imgBase64);
      callback(imgBase64);
    }
    r.readAsDataURL(fileObj);    //转成Base64格式
  }
</script>

php

<?php
/**
     * [将Base64图片转换为本地图片并保存]
     * @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) {
                // 上传错误提示错误信息
//                $this->error($upload->getError());
                $da[‘msg‘] = "上传异常";
            } else {
                $infoz_info = $this->base64_image_content($infoz,"Uploads/verifyinfo/");
                if($infof_info==false){
                    $da[‘msg‘] = "上传失败";
                }else{
                    //自己的业务...
                }
            }
        }else{
            $da[‘msg‘] = "非法请求";
        }
        $this->ajaxReturn($da);
    }

原文地址:https://www.cnblogs.com/zonglonglong/p/11622959.html

时间: 2024-11-06 11:03:22

js 压缩图片 上传的相关文章

html5+js压缩图片上传

最近在折腾移动站的开发,涉及到了一个手机里面上传图片.于是经过N久的折腾,找到一个插件,用法如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 <!DOCTYPE HTML> <html lang="zh-C

js压缩图片上传

1.实现,自己看代码去 // 图片压缩 // 接收三个参数: // file:是读取的文件,需要input type="file"获取或者通过js获取 // rate:压缩比例:按照原来图片的百分比 // maxSize: 压缩后的最大文件 // rate有则使用rate,最大限制拦截,会判断rate后是否大于maxSize,如果大于,则剪切,不大于,这rate // fileType:返回内容的类型:file即压缩后的第一个参数,blob是blob文件,base64是base64文件

megapix-image插件 使用Canvas压缩图片上传

<!DOCTYPE html > <html> <head> <title>通过Canvas及File API缩放并上传图片</title> <script src="/Scripts/Jquery/jquery-1.8.3.min.js" type="text/javascript"></script> <script src="/Scripts/MegaPixIm

JS实现图片上传预览效果:方法一

<script type="text/javascript"> //处理file input加载的图片文件 $(document).ready(function(e) { //判断浏览器是否有FileReader接口 if(typeof FileReader =='undefined') { /*$("#images_show").css({'background':'none'}).html('亲,您的浏览器还不支持HTML5的FileReader接口

纯js实现图片上传

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head><title>本地图片预览</title><

HTML5 file API加canvas实现图片前端JS压缩并上传 (转载)

一.图片上传前端压缩的现实意义 对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验. 这种体验包括两方面: 由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅,同时大大降低了网络异常导致上传失败风险. 最最重要的体验改进点:省略了图片的再加工成本.很多网站的图片上传功能都会对图片的大小进行限制,尤其是头像上传,限制5M或者2M以内是非常常见的.然后现在的数码设备拍摄功能都非常出众,一张原始图片超过2M几乎是标配,此时如果用户想把手机或相机中的某个得意图片

html + js 实现图片上传,压缩,预览及图片压缩后得到Blob对象继续上传问题

先上效果 上传图片后(设置了最多上传3张图片,三张后上传按钮消失) 点击图片放大,可以使用删除和旋转按钮 (旋转功能主要是因为ios手机拍照后上传会有写图片被自动旋转,通过旋转功能可以调正) html页面 需要引入weui.min.css 不然没法渲染样式, 将下面的代码放在需要上传文件的地方就行了,如果不需要图片旋转功能, 可以直接删掉那个div, 改不改js无影响 addPhoto.html <!--图片缩略图--> <div class="weui-cells weui-

node.js实现图片上传(包含缩略图)

图片上传 使用multiparty插件实现上传 安装multiparty npm i --save multiparty 代码实现 const multiparty = require('multiparty'); let form = new multiparty.Form({uploadDir: upload.path}); 构造参数说明 encoding 设置接收数据编码,默认是utf-8 maxFieldsSize 限制字段可以分配的内存量,默认2M maxFields 限制在发出错误事

js实现图片上传及预览----------------------&gt;&gt;兼容ie6-8 火狐以及谷歌

<head runat="server"> <title>图片上传及预览(兼容ie6/7/8 firefox/chrome)</title> <script src="../Scripts/jquery-1.4.2.min.js" type="text/javascript"></script> </head> <body> <form id="f