javaScript:压缩图片并上传

html代码:

<input id="file" type="file" name="filesName">

js代码:

    var fileElement = document.getElementById(‘#file‘);

    fileElement.onchange = function(){
        var file = event.target.files[0];
        var upload = new uploadThumbnail({
            // name:"imgFileName", //缺省为 ‘imgs‘
            // formName:"formName", //缺省为 ‘forms‘
            // max:[maxWidth,maxHeight], //缺省为 [400*400]
            file:file,
            url:"./thumbnail.php",
            dataType:"json", //缺省为 ‘text‘
            success:function( data ){
                console.info( data ); //打印接收的数据
                //this.newImgObj 为压缩后的图片对象
                document.body.append( this.newImgObj ) // 将图片加入页面
            }
        });
        upload.explain(); //在控制台打印说明
    }

uploadThumbnail 对象:

    (function(win,undefined){
        ‘use strict‘
        var uploadThumbnail = function( obj ){
            this.newImgObj = null;
            this.init( obj );
            this.success = obj.success || function () {};
        }
        uploadThumbnail.prototype = {
            constructor:uploadThumbnail,
            // 入口函数
            init:function( obj ){
                this.compressPictures( obj );
            },
            // 压缩图片 并将画布传入上传函数
            compressPictures:function( obj ){
                var objThis = this;
                // 压缩图片需要的一些元素和对象
                var reader = new FileReader(), newImg = new Image();
                // 缩放图片需要的canvas
                var canvas = document.createElement( ‘canvas‘ );
                var context = canvas.getContext( ‘2d‘ );
                if ( obj.file.type.indexOf( "image" )==0 ) {
                    reader.readAsDataURL( obj.file );
                    // 文件base64化,以便获知图片原始尺寸
                    reader.onload = function( e ) {
                        newImg.src = e.target.result;
                                        // base64地址图片加载完毕后
                        newImg.onload = function () {
                            // 图片原始尺寸
                            var originWidth = this.width;
                            var originHeight = this.height;
                            // 最大尺寸限制
                            var maxWidth, maxHeight;
                            try{
                                maxWidth = obj.max[0];
                                maxHeight = obj.max[1];
                            }catch( err ){
                                maxWidth = 400;
                                maxHeight = 400;
                            }
                            // 目标尺寸
                            var targetWidth = originWidth, targetHeight = originHeight;
                            // 图片尺寸超过400x400的限制
                            if ( originWidth > maxWidth || originHeight > maxHeight ) {
                                if ( originWidth / originHeight > maxWidth / maxHeight ) {
                                    // 更宽,按照宽度限定尺寸
                                    targetWidth = maxWidth;
                                    targetHeight = Math.round( maxWidth * ( originHeight / originWidth ) );
                                } else {
                                    targetHeight = maxHeight;
                                    targetWidth = Math.round( maxHeight * ( originWidth / originHeight ) );
                                }
                            }

                            // canvas对图片进行缩放
                            canvas.width = targetWidth;
                            canvas.height = targetHeight;
                            // 清除画布
                            context.clearRect( 0,0,targetWidth,targetHeight );
                            // 图片压缩
                            context.drawImage( newImg,0,0,targetWidth,targetHeight);

                            // 完成画布传入上传
                            objThis.upFile( obj,canvas );
                        };
                    };
                }else{
                    return false;
                }
            },
            upFile:function( obj,canvas ){
                var objThis = this;
                // canvas转为blob并上传
                canvas.toBlob(
                    function (blob) {
                        // 生成图片
                        var newImg = document.createElement("img"),
                        url = URL.createObjectURL(blob);
                        newImg.onload = function() {
                            URL.revokeObjectURL(url);
                        };
                        obj.img == true
                            ? newImg.src = canvas.toDataURL()
                            : newImg.src = url;
                        objThis.newImgObj = newImg;

                        // 创建表单数据
                        var formData = new FormData();
                        formData.append( obj.formName || ‘forms‘,blob,obj.name || ‘imgs‘ );

                        // 图片上传
                        var request  = new XMLHttpRequest();
                        // obj.async ? obj.async = true : obj.async = false;
                        request.open( "POST",obj.url,true );
                        request.send( formData );
                        request.onreadystatechange = function() {
                            if ( request.readyState == 4 && request.status == 200 ) {
                                if( obj.dataType=="JSON" || obj.dataType=="json" ){
                                    try{
                                        objThis.success( JSON.parse(request.responseText) )
                                    }catch( err ){
                                        console.info( "banfeng reminds you: Error in converting received data to ‘JSON‘ format" )
                                    }
                                }else{
                                    objThis.success( request.responseText )
                                }
                            }
                        };
                    },
                    file.type || ‘image/png‘,
                );

            },
            explain:function(){
                console.log( ‘new uploadThumbnail({‘ );
                console.log( ‘  name:imgFileName || "imgs",‘ );
                console.log( ‘  formName:formName || "forms",‘ );
                console.log( ‘  max:[maxWidth,maxHeight]  || [ 400*400 ],‘ );
                console.log( ‘  file:inputFile,‘ );
                console.log( ‘  url:URL,‘ );
                console.log( ‘  dataType:"json" || "text"‘ );
                console.log( ‘  success:functon(data){} Callback function on success‘ );
                console.log( ‘});‘ );
                console.log( "obj.newImgObj:Compressed image object" )
            }

        }
        win.uploadThumbnail = uploadThumbnail;
    }(window))

原文地址:https://www.cnblogs.com/wannian/p/10006565.html

时间: 2024-08-02 12:54:37

javaScript:压缩图片并上传的相关文章

ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结

相册 iphone的相册包含摄像头胶卷+用户计算机同步的部分照片.用户可以通过UIImagePickerController类提供的交互对话框来从相册中选择图像.但是,注意:相册中的图片机器路径无法直接从应用程序访问,只能通过终端用户去选择和使用相册图片 应用程序包 应用程序包可能会将图像与可执行程序.Info.plist文件和其他资源一同存储.我们可以通过本地文件路径来读取这些基于包的图像并在应用程序中显示它们. 沙盒 借助沙盒,我们可以把图片存储到Documents.Library.tmp文

html5压缩图片并上传

手机端图片有很大的,上传的时候很慢,这时候就要压缩一下了,有一个开源的js可以压缩图片的大小,开源地址如下:https://github.com/think2011/localResizeIMG3 代码如下: // 上传图片 function uploadFile(path) { var type = plus.storage.getItem("upload_goods_image"); //选择成功 $("#heisebg").removeClass("

如何有效实现前端压缩图片并上传功能

随着现在手机的像素越来越高,很多照片动辄几兆甚至十几兆,上传后在服务器端压缩已经越来越不能满足当今的需求.这对于许多技术人员来说,处理起来这样的问题往往不知道该怎么下手,那么下面就跟大家讲解一下如何在前端进行图片压缩后上传到服务器. 以上传单张图片为例,多张图片同理,多嵌套一层循环即可.代码实现如下: html: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta

使用PhoneGap裁剪和压缩图片并上传(安卓版)

安装phonegap的camera插件后,可以对从图片库选择图片进行裁剪或压缩操作,但插件本身有些问题,经过改进,现在可以顺利完成上述功能. 安装方法 1 首先使用命令行安装camera插件: phonegap plugin add org.apache.cordova.camera 2 安装成功后,下载下面的CameraLauncher.java文件,将插件包中的同名文件替换掉: http://phonegap.jiusem.net/camera/src/android/CameraLaunc

Xamarin.Android 压缩图片并上传到WebServices

随着手机的拍照像素越来越高,导致图片赞的容量越来越大,如果上传多张图片不进行压缩.质量处理很容易出现OOM内存泄漏问题. 最近做了一个项目,向webservices上传多张照片,但是项目部署出来就会出现闪退现象,后来经行调试发现图片没有进行压缩,一张图片大小为2M,然而webservices没法接搜多个大图片,所以需要改下配置文件,我这里改为40M. <system.web> <httpRuntime maxRequestLength = "40960" useFul

微信小程序压缩图片并上传到服务器(拿去即用)

这里注意一下,图片压缩后的宽度是画布宽度的一半 canvasToTempFilePath 创建画布的时候会有一定的时间延迟容易失败,这里加setTimeout来缓冲一下 这是单张图片压缩,多张的压缩暂时还没有成功,保存到服务器上后是空白的,如有大神望指点一二(>人<:) <canvas canvas-id='photo_canvas' style='width:1000rpx;height:{{canvas_h}}px' class='myCanvas'></canvas&g

js图片前端压缩多图上传(旋转其实已经好了只是手机端有问题要先压缩再旋转)

var filechooser = document.getElementById("choose"); // 用于压缩图片的canvas var canvas = document.createElement("canvas"); var ctx = canvas.getContext('2d'); // 瓦片canvas var tCanvas = document.createElement("canvas"); var tctx = tC

SSM配置Ueditor实现图片的上传&lt;一&gt;

最近想学点新的东西,于是琢磨着用SSM整合Ueditor来实现图片的上传!至于为什么选Ueditor,道理你懂得啦!百度开发的而且开源,能自定义自己想要的内容,版本更新什么的也比较勤快!接下来我准备记录下探索的过程! 1.下载 点击跳转到Ueditor下载界面 你可以到上面的地址下载Ueditor插件,选择UTF-8编码的Jsp版本. 2.构建工程 新建一个Maven工程,首先把ssm框架的基本的东西搭建好,如果你不清楚ssm基本框架,我博客里面有详细的搭建过程可以参考!在这我就直接上图了! 3

将UEditor的图片批量上传抠出来单独使用

在Web项目中,经常有这样一个需求,就是对图片的批量上传,利用form表单的file可以实现图片的上传,但是用户体验不好,而且不支持ajax提交,网上也有很多图片上传插件,有基于javascript的,也有基于flash的,但是给我的感觉,要么用户体验不好,要么收费的,那么能不能有一个比较好的方案呢?那就是Ueditor! UEditor是百度出品的一款富文本编辑器,里面也集成了一个基于Flash的图片上传插件,由于Ueditor是开源的,所以源代码很容易得到,经过我的一番研究,找到了它的图片上