图片转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){
   
    // 走接口上传
}
目录
相关文章
|
9月前
|
编解码 iOS开发
图片,视频上传&视频内容旋转
图片,视频上传&视频内容旋转
|
机器学习/深度学习 计算机视觉
【图片操作】提取GIF的图片帧
gif是我们日常生活中常用的一种图片,它介于视频和图片之间。我们可以用图片的内存体验到一些视频的感觉。但是有时候我们会想把gif的图片全部提取出来,今天我们就来实现一下这个操作。
332 0
|
11月前
|
Web App开发 存储 iOS开发
一日一技:把webp图片保存为png
一日一技:把webp图片保存为png
124 0
|
存储 编解码 前端开发
input上传图片并同步获取图片分辨率
🎈作为一名前端开发,页面交互少不了图片上传,但有时候我们需要对上传图片做一些限制,如尺寸要求和像素分辨率要求,所以这里我们一起来看看前端上传图片如何获取图片的分辨率。
302 0
|
Java API Maven
一行代码搞定图片缩略图处理
不知道大家现在工作中还有没有使用过Java处理图片的。强哥在大学毕业后,从事服务端WEB开发,就很少接触图片处理。有接触图片的,大多也就是图片的上传下载。所以,对Java处理图片相关的技术也都没怎么接触。
一行代码搞定图片缩略图处理
|
缓存 Java 数据安全/隐私保护
给图片加水印?这是我见过最简单的实现方式
大家好,我是指北君。 在项目中经常有需要在图片上添加水印的需求以及在某些场合下需要身份证图片,这时就可以对身份证上加水印防止被用于其他用途,java 在处理图片水印时不需要额外的第三方包,使用 BufferedImage 和 Graphics2D 就可以搞定
给图片加水印?这是我见过最简单的实现方式
没有图片增加默认图片,有图片路径,但是没有图片文件解决方案
没有图片增加默认图片,有图片路径,但是没有图片文件解决方案
126 0
|
Python
将8位的tif图片改为png图片
将8位的tif图片改为png图片
180 0
|
存储 小程序 API
小程序实现图片上传,预览以及图片base64位处理
小程序实现图片上传,预览以及图片base64位处理
437 0
小程序实现图片上传,预览以及图片base64位处理
|
C# 移动开发
将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小)
原文:将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小) WPF的XAML文档(Main.xaml):                                   CS代码:(Main.
997 0