博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手机端图片压缩裁剪上传
阅读量:6344 次
发布时间:2019-06-22

本文共 5141 字,大约阅读时间需要 17 分钟。

  hot3.png

说明

项目需要,手机通过扫码打开页面上传商品图片,手机拍出来的图片一般都是长方形,而我们的商品图片则需要正方形.    解决方案是长宽哪个长就截取哪边.这个我用的是提交图片截取坐标到服务器上再截取.这里用到的是cropper这个插件.    现在手机拍照像素都比较高,图片太大,上传不方便,这时候就需要在上传前压缩下图片.之前有找到一个叫resize.min.js的压缩插件,发现有问题,PC上测试没问题,iphone 上测试大于4M以上的图片返回的base64不正常,无法显示图片.后来使用html5ImgCompress,倒是没发现这个问题!!    出于VUE是后来为了样式才加上的,所有变成jquery与vue一锅炖,显得有点乱哈~

###html端

选 择 图 片

js端

var vm = new Vue({        el: '#app',        data: {            fileData: '', //图片文件            coord: '' //坐标串        },        methods: {            choiceImg: function () {                this.$dialog.loading.open('图片加载中...');            },            submitUpload: function(){                var that = this;                var formData = new FormData();                formData.append("logo",this.fileData);                formData.append('coord', this.coord);                $.ajax({                    url: "服务器路径",                    type: 'POST',                    data: formData,                    processData: false,                    contentType: false,                    beforeSend: function () {                        if(!that.fileData){                            that.$dialog.toast({                                mes: '未选择图片!',                                timeout: 1500,                                icon: 'error'                            });                            return false;                        }                        that.$dialog.loading.open('图片上传中...');                    },                    complete: function () {                        that.$dialog.loading.close();                    },                    success: function (res) {                        console.log(res);                        if(res.r){                            var icon = 'success';                        }else{                            var icon = 'error';                        }                        that.$dialog.toast({                            mes: res.i,                            timeout: 1500,                            icon: icon,                            callback: () => {                                window.location.reload();                            }                        })                    },                    error: function (res) {                        console.log(res);                        that.$dialog.toast({                            mes: '上传失败',                            timeout: 1500,                            icon: 'error'                        })                    }                });            }        }    });    /** base64转成文件,网上找的,看起来有点老了 */    function dataURItoBlob(dataURI) {        var byteString;        if (dataURI.split(',')[0].indexOf('base64') >= 0) {            byteString = atob(dataURI.split(',')[1]);        }else {            byteString = unescape(dataURI.split(',')[1]);        }        var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];        var ia = new Uint8Array(byteString.length);        for (var i = 0; i < byteString.length; i++) {            ia[i] = byteString.charCodeAt(i);        }        return new Blob([ia], {type:mimeString});    }    $(function () {        var $image = $('#image');        //jquery监听图片选择        $('input[type=file]').on('change', function () {            var file = $(this)[0].files[0];            new html5ImgCompress(file, {                before: function(file) {                    console.log('单张: 压缩前...');                },                done: function (file, base64) {                    console.log('单张: 压缩成功...');                    $image.cropper('destroy');                    $image.attr('src', base64);                    vm.fileData = dataURItoBlob(base64);                    $image.cropper({                        viewMode: 1,                        aspectRatio: 1 / 1,                        height: 600,                        width: 600,                        autoCropArea: true,                        dragCrop: false,                        rotatable: false,                        zoomable: false,                        zoomOnTouch: false,                        zoomOnWheel: false,                        cropBoxResizable: false,                        minCropBoxWidth: 600,                        minCropBoxHeight: 600,                        crop: function (e) {                            console.log(e.x);                            console.log(e.y);                            console.log(e.width);                            console.log(e.height);                            vm.coord = JSON.stringify(e);                            vm.$dialog.loading.close();                        }                    });                },                fail: function(file) {                    console.log('单张: 压缩失败...');                },                complete: function(file) {                    console.log('单张: 压缩完成...');                },                notSupport: function(file) {                    alert('浏览器不支持!');                }            });        });    })

上传前

提交前的页面

上传并刷新页面后

提交后

转载于:https://my.oschina.net/geomen/blog/1358770

你可能感兴趣的文章
杨老师课堂之基于注解的SSH整合案例
查看>>
首个由国内发起的分布式消息领域的国际标准OpenMessaging一周年回顾
查看>>
KNOPPIX 8.5.0 发布,光盘启动的 GNU/Linux
查看>>
Coursera深度学习(DeepLearning.ai)编程题&笔记
查看>>
OpenGL ES 实践
查看>>
git将本地项目发布到远端
查看>>
容器技术干货┃K8s存储篇之PV(PVC)
查看>>
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 18 章 服务器设置和操作_18.11. 在Windows上注册Event Log...
查看>>
CentOS7 上搭建多节点 Elasticsearch集群
查看>>
Linux编译安装MySQL
查看>>
判断DOM元素是否出现再浏览器窗口中
查看>>
ListView、TreeView和DataGrid。
查看>>
设计模式---工厂模式(DesignPattern_FactoryMethod)
查看>>
[UWP]不怎么实用的Shape指南:自定义Shape
查看>>
Java Web之Tomcat调优
查看>>
WPF ScrollViewer(滚动条) 自定义样式表制作 图文并茂
查看>>
「镁客早报」微软收购聊天机器人公司XOXO;美国FCC开启首轮高频段5G频谱拍卖...
查看>>
Hello.js参考2
查看>>
10天搞定域名备案(全记录)
查看>>
SocketIo+SpringMvc实现文件的上传下载
查看>>