图片转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){
   
    // 走接口上传
}
目录
相关文章
|
4月前
|
人工智能
图片生成很好用
图片展示了一张图表,图中通过不同的颜色和数据点展示了某项技术或产品在不同维度上的表现情况。标题“AI也很好用”表明该图表可能是在说明人工智能技术的实用性和效果。不过,由于缺少具体的数据和背景信息,无法提供更详细的解读。
图片生成很好用
|
4月前
图片的大小
【10月更文挑战第7天】
111 1
|
编解码 开发工具 Android开发
.9图片的那点事儿
.9图片的那点事儿
202 0
|
Web App开发 存储 iOS开发
一日一技:把webp图片保存为png
一日一技:把webp图片保存为png
280 0
|
存储 编解码 前端开发
input上传图片并同步获取图片分辨率
🎈作为一名前端开发,页面交互少不了图片上传,但有时候我们需要对上传图片做一些限制,如尺寸要求和像素分辨率要求,所以这里我们一起来看看前端上传图片如何获取图片的分辨率。
437 0
|
Java API Maven
一行代码搞定图片缩略图处理
不知道大家现在工作中还有没有使用过Java处理图片的。强哥在大学毕业后,从事服务端WEB开发,就很少接触图片处理。有接触图片的,大多也就是图片的上传下载。所以,对Java处理图片相关的技术也都没怎么接触。
一行代码搞定图片缩略图处理
|
存储 小程序 API
小程序实现图片上传,预览以及图片base64位处理
小程序实现图片上传,预览以及图片base64位处理
570 0
小程序实现图片上传,预览以及图片base64位处理
|
BI 数据安全/隐私保护
图片地址是BASE64的图片上传(头像上传)
1 package controller; 2 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5 import java.
1192 0
|
缓存 Android开发
图片
●图片加载,缓存,处理 Picasso (一个强大的图片下载与缓存的库) Fresco (一个用于管理图像和他们使用的内存的库) Glide (一个图片加载和缓存的库,使用的App有:网易新闻) Picasso-transformations (...
1427 0

热门文章

最新文章