图片转base64、判断图片大小、图片压缩、图片上传

简介: 文章主要介绍 `js` 实现压缩上传图片转base64,其他的框架(如React、Vue、Angular)也可借此参考。**这个方法真实可用,已在实际项目中运行**。

文章主要介绍 js 实现压缩上传图片转base64,其他的框架(如React、Vue、Angular)也可借此参考。这个方法真实可用,已在实际项目中运行

逻辑功能包含图片转base64、判断图片大小、图片压缩、图片上传,

逻辑步骤

第1步,调用 FileReader 的 reader.readAsDataURL(img),在其onload事件中, 将用户选择的图片读入 Image 对象。

第2步,在image对象的 onload 事件中, 通过 canvas 的 canvas.getContext('2d') 的 drawImage 方法, 将 Image 改变大小绘制到canvas上。

第3步, 通过 canvas.toDataURL("image/jpeg", 1), 将图片变成base64字符串。

注:图片转base64、判断图片大小、图片压缩、图片上传的各部分代码,可以拆分单独处理(如:可单独提取图片压缩代码)。

执行代码

html

<input id="sendImage" title="this is imgUpload" type="file" accept="image/* "onchange="imgChange(this)" />

<img id="img_show" src="">

js

function imgChange(e) {
   
    if (e.files.length != 0) {
   
        var file = e.files[0],
        fileType = file.type,
        reader = new FileReader();

        if (!reader) {
   
            e.value = '';
            return;
        };

        reader.onload = function(ev) {
   
            var result = ev.target.result;
            var data = img_compress(file, result);
            // 接下来可以做图片展示 -> 图片上传
            img_show(data);       
            img_upload(data);
        };

        reader.readAsDataURL(file);
    }
}

/**
 * 图片大小判断、图片压缩处理
 * @param file,图片信息
 * @param result,img base64
 */
function img_compress(file, result) {
   
    var size = file.size;
    var fileType = file.type;
    // 图片大小超过 5M ,压缩处理
    if (size > 1024 * 5000 ) {
   
        var img = new Image(); 
        img.src = result;
        img.onload = function(e) {
   
            var scale = 1;  
            // 判断宽度、高度尺寸,只要有一个不符合,便进行压缩
            if ((<any>this).width > 300 || (<any>this).height > 300) {
     
                if ((<any>this).width > (<any>this).height) {
    
                    scale = 300 / (<any>this).width; 
                } else {
     
                    scale = 300 / (<any>this).height; 
                }  
            }
            // 生成canvas
            var canvas = document.createElement("canvas"), drawer = canvas.getContext("2d");
            //按最大高度等比缩放
            if (scale != 1) {
   
                img.width *= scale;
                img.height *= scale;
            }
            // 复制canvas宽高
            canvas.width = img.width;
            canvas.height = img.width * (img.height / img.width);
            // 绘制图像
            drawer.drawImage(img, 0, 0, canvas.width, canvas.height);
            // 使用toDataURL生成图片base64
            var tmp_code = result = canvas.toDataURL(fileType);
            if (tmp_code!='data:,') {
   
                result = tmp_code;
            }
        }; 
    }
    return result;
}

/**
 * 图片展示,处理页面展示图片
 * @param result,img base64
 */
function img_show(img_base64) {
   
    if (img_base64 != 'data:,') {
   
        $("#img_show").val(image_base64);
    }
}

/**
 * 图片上传,将base64通过接口上传
 * @param result,img base64
 */
function img_upload(image_base64){
   
    // 走接口上传
}
目录
相关文章
|
6月前
|
人工智能 自然语言处理 API
图片转音乐模型来了!Image to Music V2 :只需上传一张照片,自动转换成与图片内容匹配的音频!
图片转音乐模型来了!Image to Music V2 :只需上传一张照片,自动转换成与图片内容匹配的音频!
279 1
|
编解码 iOS开发
图片,视频上传&视频内容旋转
图片,视频上传&视频内容旋转
保存微信文章中的图片为jpeg格式
保存微信文章中的图片为jpeg格式
114 0
保存微信文章中的图片为jpeg格式
|
存储 编解码 前端开发
input上传图片并同步获取图片分辨率
🎈作为一名前端开发,页面交互少不了图片上传,但有时候我们需要对上传图片做一些限制,如尺寸要求和像素分辨率要求,所以这里我们一起来看看前端上传图片如何获取图片的分辨率。
408 0
|
Java API Maven
一行代码搞定图片缩略图处理
不知道大家现在工作中还有没有使用过Java处理图片的。强哥在大学毕业后,从事服务端WEB开发,就很少接触图片处理。有接触图片的,大多也就是图片的上传下载。所以,对Java处理图片相关的技术也都没怎么接触。
一行代码搞定图片缩略图处理
|
存储 小程序 API
小程序实现图片上传,预览以及图片base64位处理
小程序实现图片上传,预览以及图片base64位处理
534 0
小程序实现图片上传,预览以及图片base64位处理
没有图片增加默认图片,有图片路径,但是没有图片文件解决方案
没有图片增加默认图片,有图片路径,但是没有图片文件解决方案
158 0
|
C# 移动开发
将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小)
原文:将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小) WPF的XAML文档(Main.xaml):                                   CS代码:(Main.
1035 0
|
安全 数据安全/隐私保护
|
前端开发 JavaScript
Canvas自定义图片大小及蒙版与生成gif图
Html的Canvas主要通过js脚本做一些图形化操作。Canvas是一个矩形区域,您可以控制其每一像素。canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。