图片上传预览(包含大小压缩)

之前开发了一个图片上传的页面。但是由于主要是用于微信中,调用手机摄像头拍照,照片都是M为单位,太耗流量,于是进行修改。

原本采用的直接是上传文件的方式,现改为使用canvas进行绘图,传递照片base64字符串。

调整后的代码:

页面HTML:

<input type="file" capture="camera" accept="image/*" name="img1" id="img1" style="display:block;height:100%;width:100%;" /> 

<img id="imgdata1" class="imgdata" style="display:inline-block">

<canvas id="canvas1" style="display:none"></canvas>

input 用于点击拍照或读取图像文件

img 用于照片预览

canvas 用于绘制图像

input事件绑定:

$("#img1").on(‘change‘, function(event) {
    event.preventDefault();
    var file = $(this)[0].files[0];
    var ldot = file.name.lastIndexOf(".");
    var type = file.name.substring(ldot + 1);
    if (!type.match(/jpg|gif|png|bmp/i)){
            return alert("您上传的图片格式不正确,请重新选择!");
            };
       var  img = new Image();
       img.src = _URL.createObjectURL(file);
       img.onload = function () {
           var  picScale=this.width/this.height; /*picScale参数为原图宽*高,绘制图像时使用 防止图像拉伸变形 */
           var reader = new FileReader();
            reader.readAsDataURL(file);
            reader.onload = function(e) {
            createCanvas(this.result,picScale,1);
}
        };
}); 

绘制图像,预览显示:

function createCanvas(src,picScale,index) {    /*因为我页面中有两张图片,所以增加了index参数进行判断*/
    var imagedata;
    var cav;
    if(index==1){
        imagedata=$("#imgdata1");
        cav="canvas1";
    }else{
        imagedata=$("#imgdata2");
        cav="canvas2";
    }
    /*console.log(picScale);*/
    var canvas = document.getElementById(cav);
    var cxt = canvas.getContext(‘2d‘);
    canvas.width = 400*picScale;
    canvas.height = 400;
    var img = new Image();
    img.src = src;
    img.onload = function() {
    cxt.drawImage(img, 0, 0,400*picScale,400); /*画布绘制大小 显示将拉伸 固定高度,宽度用高度*比例*/
    imagedata.show().attr(‘src‘, canvas.toDataURL("image/jpeg", 0.9)); /*0.9为质量压缩比例 范围0-1*/
} } 

图像上传:

function upload(){    var url = yourURL;

        $.ajax({
        url: url,
        type: "POST",
        data: {
            "imgStr1": canvas1.toDataURL("image/jpeg", 0.9).split(‘,‘)[1],/*不包含头的图片base64字符串*/
            "imgStr2": canvas2.toDataURL("image/jpeg", 0.9).split(‘,‘)[1]
            },
        beforeSend: function() {
                console.log(‘beforeSend‘);
                               },
        success: function(result){
if(result != ‘‘){
                    var jsonObj = jQuery.parseJSON(result);
                    if(jsonObj.code == ‘0‘){
                        var sim = parseFloat(jsonObj.data.sim)*100;
                        $("#simtext2").text(sim + "%");
                    }else{
                        alert(jsonObj.message);
                    }
                }
                console.log(result);
        } }); 

} 
时间: 2025-01-14 11:47:44

图片上传预览(包含大小压缩)的相关文章

JavaScript 图片上传预览效果

图片上传预览是一种在图片上传之前对图片进行本地预览的技术.使用户选择图片后能立即查看图片,而不需上传服务器,提高用户体验.但随着浏览器安全性的提高,要实现图片上传预览也越来越困难.不过群众的智慧是无限的,网上已经有很多变通或先进的方法来实现.例如ie7/ie8的滤镜预览法,firefox 3的getAsDataURL方法.但在opera.safari和chrome还是没有办法实现本地预览,只能通过后台来支持预览.在研究了各种预览方法后,作为总结,写了这个程序,跟大家一起分享.上次写的简便无刷新文

js:s上次预览,上传图片预览,图片上传预览

<!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> <meta http-equiv="Content-

html,图片上传预览,input file获取文件等相关操作

input file常用方法: var obj=document.getElementById("upimage"); var file=obj.files[0];//获取文件数据 var path=obj.value;//获取文件当前路径 var size=obj.files[0].size;//获取文件大小 var prefix=path.substring( path.lastIndexOf('\\')+1 );//获取文件名的前缀名(文件格式) var suffix=path.

js前端实现多图图片上传预览

<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>测试页面</title> <script type="text/javascript"> //下面用于

多图片上传预览功能

//下面用于多图片上传预览功能 function setImagePreviews(avalue) { var docObj = document.getElementById("doc"); var dd = document.getElementById("dd"); dd.innerHTML = ""; var fileList = docObj.files; for (var i = 0; i < fileList.length;

移动端 js 实现图片上传 预览

方法一: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>测试页面</title> <script type="text/javascript"> /

H5 实现图片上传预览

1 <!DOCTYPE html> 2 <html> 3 4 <head> 5 <meta charset="utf-8" /> 6 <title>图片上传预览</title> 7 <style> 8 .check_box{ 9 position: relative; 10 width: 100px; 11 height: 100px; 12 margin: 20px; 13 display: flex

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

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

Javascript之图片上传预览

使用Javascript之图片上传预览,我们无需上传到服务器中,兼容所有浏览器. 关键方法是使用微软库filter:progid:DXImageTransform.Microsoft.AlphaImageLoader来生成本地图片预览图的. <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <

移动端图片上传预览

前天要做wap版的图片上传预览,找了好半天才找到比较适合的插件,我在该插件的基础上修改了一些东西,比如:上传后的图片删除后不能再添加.不能限制上传图片的数量. input虽然有multiple(多选),但是android目前是不支持的. 该插件控制不了不能上传同一张图片,暂时没有思路解决这个问题(:′д`)ゞ 1 <!DOCTYPE html> 2 <html lang="zh-cn"> 3 4 <head> 5 <meta charset=&