图片转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){
   
    // 走接口上传
}
目录
相关文章
|
10天前
|
前端开发 容器
CSS-Flex布局
CSS Flex弹性布局是移动端/响应式开发的核心方案,通过「容器+项目」模型实现灵活空间分配与对齐。本文详解核心概念、容器/项目属性,并结合评论框代码实战拆解,助新手快速掌握justify-content、align-items、flex:1等关键用法。(239字)
176 5
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
AI Compass前沿速览:Gemini 3、Grok 4.1、GPT-5.1、千问、Lumine-3D开世界AI智能体
AI Compass前沿速览:Gemini 3、Grok 4.1、GPT-5.1、千问、Lumine-3D开世界AI智能体
|
前端开发 JavaScript 开发者
实用技巧:提高前端开发效率的5个方法
提高前端开发效率是每个开发者都追求的目标。本文将介绍5个实用的技巧,帮助前端开发者提升工作效率:使用代码片段加速开发、合理利用浏览器开发者工具、充分利用现有框架和库、使用自动化构建工具、保持学习和不断优化工作流程。
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
本文介绍了Spring Boot中静态资源的访问位置、如何进行静态资源访问测试、自定义静态资源路径和静态资源请求映射,以及如何处理自定义静态资源映射对index页面访问的影响。提供了两种解决方案:取消自定义静态资源映射或编写Controller来截获index.html的请求并重定向。
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
|
安全 JavaScript Shell
vite中环境变量的使用与配置,非常实用详细!
【8月更文挑战第2天】vite中如何使用环境变量?根据当前的代码环境产生值的变化的变量就叫做环境变量。本文将详细介绍vite中如何使用环境变量
1911 1
|
存储 SQL 关系型数据库
MySQL 利用 frm 文件和 ibd 文件恢复表结构和表数据
MySQL 利用 frm 文件和 ibd 文件恢复表结构和表数据
2903 0
|
存储 Linux 分布式数据库
|
前端开发 Java Windows
JDK1.8下载、安装和环境配置教程(详细)
JDK1.8下载、安装和环境配置教程(详细)
34572 1
JDK1.8下载、安装和环境配置教程(详细)
uniapp之图片压缩
传入图片地址,返回图片base64内容
747 0
|
Linux
【Linux系统查看日志的命令有哪些?】
在Linux系统中,查看日志文件是诊断和解决问题的重要步骤之一。系统管理员可以通过查看日志文件来检查系统的运行状况,发现和解决潜在的问题。
800 0