本地上传图片预览

<!DOCTYPE html >
<html >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>图片上传本地预览,获得图片的base64(可压缩)</title>
<style type="text/css">
  .upload_image {  width: 800px;  }
</style>
<script type="text/javascript" src="jquery.min.js"></script>

</head>
<body>
<div id="preview">
    <img id="imghead" width=200 height=200 border=0 src=‘‘>
</div>
    <canvas id="uploadImg" hidden></canvas>
    <input type="file" id="fileUp" multiple hidden />
    <label for="fileUp">点击上传图片</label>
    <button id=‘sub‘>提交</button>

<script type="text/javascript">
    var imgUpload = {
      imgBase64Arr: [],
      html : ‘‘,
      onSelect: function(files) {
        var i =0;
        $("#preview").html(‘<div class="upload_loading"></div>‘);
          var funAppendImage = function() {
            file = files.files[i];
            if (file) {
              var reader = new FileReader()
              reader.onload = function(e) {
                imgUpload.html = imgUpload.html + ‘<div id="uploadList_‘ + i + ‘" class="upload_append_list"><p class="img-outbox"><strong>‘ + file.name + ‘</strong>‘ +
                  ‘<a href="javascript:" class="upload_delete" title="删除" data-index="‘ + i + ‘">删除</a><br />‘ +
                  ‘<img id="uploadImage_‘ + i + ‘" src="‘ + e.target.result + ‘" class="upload_image" /></p>‘ +
                  ‘<span id="uploadProgress_‘ + i + ‘" class="upload_progress"></span>‘ +
                  ‘</div>‘;
                i++;
                funAppendImage();
              }
              reader.readAsDataURL(file);
            } else {
              $("#preview").html(imgUpload.html);
              $(".upload_delete").click(function(){
                imgUpload.funDelteimg($(this).parents(".img-outbox"));
                // console.log(files.files[parseInt($(this).attr("data-index"))])
                // imgUpload.funDelteimg(files.files[parseInt($(this).attr("data-index"))]);
               }
              )
            }
          };
        funAppendImage();
      },
      funDelteimg: function(_this){
        console.log(_this)
        $(_this).remove();//只能删除dom,无法删除内存中的files.files
      },
      funCanvas : function(width, height, ratio, file){//重新绘制图片,获得img的base64
        var canvas = document.getElementById("uploadImg");
        var cxt = canvas.getContext(‘2d‘);
        canvas.width = width;
        canvas.height = height;
        var img = new Image();
        img.src = file;
        cxt.drawImage(img, 0, 0, width, height);
        var imgBase = canvas.toDataURL("image/jpeg", ratio);
        imgUpload.imgBase64Arr.push(imgBase);

        return imgUpload.imgBase64Arr;

      },
    }

    //文件上传
    $("#fileUp").change(function(){
      imgUpload.onSelect(this)
    })

    //获得所有img的 src,可以传给后端
    $("#sub").click(function(){
      var getBase = $(".upload_image");

      getBase.each(function(){//重新绘制图片,减小base64字符串的长度
        imgUpload.funCanvas(640, 400, 0.6, $(this).attr("src"));
      })
      console.log(imgUpload.imgBase64Arr)
    })

</script>
</body>
</html>

  这里图片上传的思路:获得上传后的img,将file的img 转成base64 ,作为前端预览,也可以将base64的字符串,传到后端,由后端生成图片,在传到后端前,可以将其base64的字符串压缩一下,这里的采取的一个方法就是用canvas的重新绘制图片,然后在canvas里就会有 新的base64字符串。

时间: 2024-12-10 17:12:33

本地上传图片预览的相关文章

用HTML5的File API做上传图片预览功能

用HTML5的File API做上传图片预览功能 前几天做了一个项目,涉及到上传本地图片的功能,正好之前了解过 html5 可以上传本地图片,然后再网上看了一些demo结合自己的需求,终于搞定了.(PS : 不得不承认我这个人有多懒,没有需求的时候我向来不主动去学习).移动端完全支持哦!已测试. 下面给大家看看代码吧怎么实现的 第一:HTLM部分(这里不去做漂亮的样式了我们注重学习功能) <input type="file" id="fileElem" mul

jquery实现上传图片预览(需要浏览器支持html5)

jquery实现上传图片预览(需要浏览器支持html5) <!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> <m

前端实现input[type=&#39;file&#39;]上传图片预览效果

众所周知JavaScript在设计上处于安全角度考虑,是不允许读写本地文件的(原因请自行百度): 但是在实际项目应用中,经常会使用到上传图片,并且可以让用户直接预览图片.对于此种做法有两种方法可以实现:一是前后台交互,后台将图片地址返回前端: 二是,我今天写的内容,使用FileReader对象--允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容:此种方法可以优化图片加载速度,减少方法一占用带宽的问题: 但是,此种方法兼容性存在问题,主要是IE浏览器(ie10以上没问题

兼容ie[6-9]、火狐、Chrome、opera、maxthon3、360浏览器的js本地图片预览

html代码: <div id="divPreview"> <img id="imgHeadPhoto" src="Images/Headphoto/noperson.jpg" style="width: 160px; height: 170px;border: solid 1px #d2e2e2;" alt="" /> </div> <asp:FileUpload

JavaScript实现简单的前端上传图片预览

JavaScript实现简单的前端上传图片预览 <div class="file_upload"> <div id="portrait"></div> <input type="file" name="" id="" onchange="showPerview(this)"> </div> <script type=&qu

HTML5拖拽上传图片预览

参考博文1:http://blog.csdn.net/testcs_dn/article/details/8695532 参考博文2:http://justcoding.iteye.com/blog/2105760 1.文件API:(File API) file类型的的表单控件选择的每一个文件都是一个file对象,而FileList对象则是这些file对象的集合列表,代表所选择的所有文件.file对象继承于Blob对象,该对象表示二进制原始数据,提供slice方法,可以访问到字节内部的原始数据块

HTML5时代的纯前端上传图片预览及严格图片格式验证函数(转载)

原文地址:http://www.2cto.com/kf/201401/274752.html 一.要解决什么样的问题? 在写这个函数之前,有们童鞋在群里问如何纯前端严格验证图片格式.这在html5时代之前,那是不可能实现的,必须要上传到后台,由后台脚本读取文本流后进一步验证.这样就造成了一定的服务器资源浪费.但是html5时代,这个工作我们完全可以交给前端来做了. 另一方面,html5时代,许多我们原来的图片预览方案都失效了.究其原因,其实是现代浏览器出于对用户隐私的保护,file控件不再提供真

HTML5 上传图片预览

html5出现之前如果需要上传图片预览 一般都是先上传到服务器然后远程预览 html5出现之后   有个filereader 解决了这问题 //选中图片之后 $("#fileAddPic").on('change', function (e) { var files = e.target.files || e.dataTransfer.files; onSelect(files); }) //选中图片之后 function onSelect(file) { file = file[0]

HTML5上传图片预览

笔记一下!!! <!DOCTYPE html> <html> <head> <title>HTML5上传图片预览</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script src="http://www.codefans.net/ajaxjs/jquery-1.6.2.m