canvas压缩图片上传

UniApp H5图片上传:从选择到上传的完整链路拆解(含Canvas压缩组件源码) 本文深入解析UniApp H5图片上传全流程,涵盖从基础API调用到Canvas高级压缩技术的完整解决方案。针对H5环境特有的兼容性问题,提供详细的性能优化实践和源码实现,帮助开发者高效处理图片上传、压缩等核心功能,特别适用于拍照上传等移动端场景。 阅读详情

图片预览

使用html5中FileReader读取文件base64信息

var input = document.querySelector('input');
var preview = document.querySelector('.preview');

input.onchange = function(){
    var file = input.files[0];
    //创建一个文件读取者
    var reader = new FileReader();
    //读取文件base64信息
    reader.readAsDataURL(file);
    //读取成功
    reader.onload = function(e){
        var img = new Image();
        img.src = e.target.result;
        preview.appendChild(img)
  }
}

效果图

原生XMLHttpRequest上传文件

html代码

<input type="file">
<button disabled="disabled">确认上传</button>
<div class="preview"><img src="" alt=""></div>
<div class="show"></div>
<script>
    var input = document.querySelector('input');//文件表单元素
    var btn = document.querySelector('button');//上传按钮
    var preview = document.querySelector('.preview > img');//图片预览区
    var show = document.querySelector('.show');//图片显示区

    input.onchange = function(){
        var file = this.files[0];
        //创建FileReader对象读取文件base64信息
        var reader = new FileReader();
        reader.readAsDataURL(file);
        reader.onload = function(e){
            preview.src = e.target.result;//预览图
        }
        btn.removeAttribute('disabled');//上传按钮可点击
        //点击上传
        btn.onclick = function(){
            var xhr = new XMLHttpRequest();
            //创建formData对象
            var formData = new FormData();
            //加入上传文件数据
            formData.append('file', file);
            xhr.open('post', '/upload', true);
            xhr.onreadystatechange = function(){
                //文件上传成功
                if(xhr.readyState === 4 && xhr.status === 200){
                    //后台返回数据,包含文件存储路径
                    var resObj = JSON.parse(xhr.responseText);
                    preview.src = '';//清除预览图
                    input.value = '';//清空input值
                    btn.setAttribute('disabled', 'disabled');//上传按钮不可点击
                    //图片显示区
                    var img = new Image();
                    img.src = resObj.filePath;
                    img.style.display = 'block';
                    show.appendChild(img);
                }
            }
            //上传文件
            xhr.send(formData);
        }
    }
        
</script>

koa2后台代码,使用koa-body中间件

const Router = require('koa-router');
const router = new Router();
const koaBody = require('koa-body');
const fs = require('fs');

router.use(koaBody({
    multipart: true,
    formidable: {
        maxFileSize: 200 * 1024 * 1024 // 设置上传文件大小最大限制,默认2M
    }
}));

router.post('/', async ctx => {
    try{
        let file = ctx.request.body.files.file; // 获取上传文件
        let reader = fs.createReadStream(file.path); // 创建可读流
        let ext = file.name.split('.').pop(); // 获取上传文件扩展名
        let filePath = `public/upload/${Date.now().toString()}.${ext}`;//存储路径
        let writer = fs.createWriteStream(filePath); // 创建可写流
        reader.pipe(writer); // 可读流通过管道写入可写流
        return ctx.body = {
            msg: '上传成功',
            filePath: filePath.slice(7)
        }
    }catch(error){
        return;
    }
})


module.exports = router;

用canvas将图片进行裁切再上传

思路是先判断原文件大小,然后用canvas裁切,然后canvas转成dataURL,再将dataURL转成blob对象,然后上传

dataURL转blob方法

//dataUrl转blob
function dataURLtoBlob(dataurl) {
    var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
        bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
    while(n--){
        u8arr[n] = bstr.charCodeAt(n);
    }
    return new Blob([u8arr], {type:mime});
}

canvas裁切

//处理图片
function drawImg(file){
    return new Promise((resolve, reject) => {
        let reader = new FileReader();
        reader.readAsDataURL(file);
        reader.onload = function(e){
            let imgSrc = e.target.result;
            let img = new Image();
            img.src = imgSrc;
            img.onload = function(){
                console.log(this.width, this.height);
                let originWidth = this.width;   //图片原宽度
                let originHeight = this.height;
                let targetWidth = originWidth;  //图片裁剪目标宽度
                let targetHeight = originHeight;
                let quality = 0.8;     //图片质量0-1之间(默认0.92)
                if(originWidth < 2000 && file.size >= 1*1024*1024){     //如果图片宽度小于2000px且大小大于1m
                    quality = 0.6;
                }else if(originWidth >= 2000){      //如果图片宽度大于2000px
                    targetWidth = Math.round(originWidth * 0.6);
                    targetHeight = Math.round(originHeight * 0.6);
                    quality = 0.6;
                }
                let canvas = document.createElement('canvas');
                let ctx = canvas.getContext('2d');
                //画板大小
                canvas.width = targetWidth;
                canvas.height = targetHeight;
                //清除画板
                ctx.clearRect(0, 0, targetWidth, targetHeight);
                //绘画
                ctx.drawImage(img, 0, 0, targetWidth, targetHeight);
                //canvas转dataURL
                let dataUrl = canvas.toDataURL(file.type, quality);
                let blob = dataURLtoBlob(dataUrl);    //得到blob对象
                let formData = new FormData();
                formData.append('file', blob, file.name);
                resolve(formData);
            }
        }
    })
}

参考文章

参考文章

参考文章

参考文章

 

通过Canvas及File API缩放并上传图片完整示例 只上传了html,后台代码没有上传,如果需要请到我的博客查看《通过Canvas及File API缩放并上传图片完整示例》 立即下载

相关推荐

Nodejs实现图片上传、压缩预览、定时删除功能

前言 我们程序员日常都会用到图片压缩,面对这么常用的功能,肯定要尝试实现一番。 第一步,node基本配置 这里我们用到的是koa框架,它可是继express框架之后又一个更富有表现力、更健壮的web框架。 1、引入基本配置 const Koa = require('koa');// koa框架 const Router = require('koa-router');// 接口必备 const cors = require('koa2-cors'); // 跨域必备 const tinify = require('tinify'); // 图片压缩 const serve = require

前端js实现canvas压缩图片并上传

可以减少用户的等待时间,提升使用体验,目前手机拍摄的图片文件大小一般在几 M 左右,文件直接上传时会有卡顿现象

铁锤妹妹的博客 6095

JS图片压缩上传 canvas 压缩图片

1.运用 canvas 实现 图片上传压缩 2.包含 将图片转为Base64位 以及转为Blob对象

利用canvas压缩图片并上传

最近项目太太太紧张,一个月才憋出了这篇自认为有点干货的文章,先拿出来晒一晒,本文所有代码地址都可以到github下载。 接下来 直奔主题: 背景:去年开发一个IM即时聊天系统,需要发送图片的功能。那么图片肯定不能太大,但是目前手机端随便拍个照片都得个5M以上了,直接传上去的话那就太耗费线上资源了。怎么能把图片占用空间变小并且又能不太失真呢,那就用canvas试试! 思路: 1、从设备选择图片 2、读取文件 。2.1、转换file文件为base64 。2.2、获取文件拍摄方向信息 3、利用canvas

weixin_42159569的博客 2296

ESWA投稿全流程避坑指南:从LaTeX模板到审稿状态查询(附最新资源链接)

本文提供了一份详尽的ESWA期刊投稿全流程指南,涵盖从LaTeX模板深度适配、Cover Letter撰写,到Editorial Manager系统操作、审稿状态解析等关键环节。重点解析了投稿准备中的常见“雷区”与文件合规性要求,并分享了收到审稿意见后的高效修改与回复策略,旨在帮助研究者规避流程陷阱,提升投稿效率与成功率。

9o8p7i6u5y的博客 838

zedboard(5)spi轮询和中断

一个SPI可以有几个从设备 在程序中使用 s32 XSpiPs_SetSlaveSelect(XSpiPs *InstancePtr, u8 SlaveSel) 选择。其实就是吧对应设备的ss拉低。 备注:只选一个ss,可以不用指定。(感觉,还没测试) 这是xspips.c中定义的函数,发送和接收有 XSpiPs_Transfer 和 XSpiPs_PolledTransfer 两个函数,分别采用中断和轮询模式。    一、轮询模式 米联客参考代码,SpiPs_Init中部分和官方例程流程一样,Spi

Kiss丶小坏 5891

前端FileReader预览、canvas压缩图片并上传

压缩图片预览并上传 思路 用户通过input框选择图片 使用FileReader进行图片预览 将图片绘制到canvas画布上 使用canvas画布的能力进行图片压缩 将压缩后的Base64(DataURL)格式的数据转换成Blob对象进行上传(待更新) 认识上传文件元素 input type=‘file’ 包含一个选择文件按钮和文字,file类型的input会有files属性,保存着文件的相关信息。 文件信息 由传入的file对象组成 <body> <input type=

CodePrincess的博客 1394

基于溶解气体分析(DGA)的变压器DGA数据故障诊断含代码含数据

在拥有可靠的DGA数据的前提下,结合机器学习分类算法,可以实现变压器的故障诊断。在此数据集的基础上,用随机森林跑出的结果如图。

Jason_Orton的博客 2704

上传前利用canvas图片压缩

【代码】上传前利用canvas图片压缩。

weixin_44957344的博客 229

生信分析实战指南:Linux环境下EMBOSS的安装与核心功能详解

本文详细介绍了在Linux环境下安装和使用EMBOSS工具包的实战指南,涵盖源码编译、包管理器安装和Conda安装三种方法,并演示了序列比对、序列特征提取和引物设计等核心功能。EMBOSS作为生物信息学领域的开源工具集,适用于序列分析、蛋白质结构预测等多种任务,帮助研究人员高效完成生信分析工作。

weixin_29202213的博客 465

昇腾910B+MindIE部署Qwen模型避坑指南:从镜像下载到推理测试全流程

本文详细介绍了在昇腾910B硬件环境中使用MindIE推理工具部署Qwen系列模型的全流程指南。从环境准备、镜像下载到模型部署与性能优化,提供一站式解决方案,帮助开发者高效完成AI模型推理任务。

weixin_29219189的博客 766

Canvas实现图片压缩上传

接到产品需求,问能不能将前端上传的图片压缩?像移动端上传图片,一般都是超清、高清图片,大小也有10M,甚至一张图片大小有15M左右,这样大的图片上传到腾讯云或者阿里云(没使用服务器上传图片)一方面上传速度慢,影响体验,另一方面体积太大占空间,图片压缩避免了,网上搜到了很多这方面介绍的网址,大多数都是用canvas来实现(不说了,马上开干)!。 实现过程 (...

nostrud ipsum6 347

保姆级教程:用微信小程序+OneNet MQTT API,5分钟搞定温湿度数据实时展示

本文提供了一份详细的教程,教你如何利用微信小程序和OneNet MQTT API在5分钟内实现温湿度数据的实时展示。从OneNet平台配置到小程序数据绑定,手把手指导零基础开发者快速搭建监控系统,涵盖API调用、数据解析和界面设计等关键步骤。

weixin_30298497的博客 370

uni-app 图片上传组件 canvas压缩

前段时间刚入坑uni-app,就被分配到做图片上传的组件 地位卑微,只能肝,先看看效果图 单张图片上传 多张图片上传 点击图片的效果 上代码: <template> <view class="uploadImage" :class="styleClass"> <view class="list-box" :class="onePicClass" :style="{ minHeight: height + 'rpx'}"> <vi

weixin_39357177的博客 1885

【实战圣经】YOLOv8-pose姿态估计模型从训练到RK3588部署:让边缘端骨骼识别速度突破60FPS

本教程从“模型训练-转换-边缘部署”全链路拆解了YOLOv8-pose姿态估计方案在RK3588上的落地过程,每一步都经过实战验证。无论是智能健身的动作实时纠正,还是工业设备的关键部件姿态检测,这套流程都能让你以最低成本实现高精度、高实时性的姿态估计应用。如果你在实践中遇到模型转换报错、部署性能不达标等问题,可聚焦某一环节深入优化——毕竟,让AI在边缘端“精准捕捉每一个关键点”,才是技术驱动场景创新的核心。

m0_71589036的博客 251

机器人控制算法九之 位姿描述与空间变换

机器人控制算法九之 位姿描述与空间变换

yohnyang的博客 1034

谈谈图片上传及canvas压缩的流程

我们通常在做图片上传的时候都会遇上这样的情况,一是后端接口限制上传图片的大小,或者是即使后端没有限制大小,因为图片太大在前端渲染时太慢,造成页面加载体验较差。因此我们很有必要对上传的图片进行压缩。 本文在gitthub做了收录:github.com/Michael-lzg… 本文主要包括以下流程: 用户通过input框选择图片 使用FileReader进行图片预览 将图片绘制到canvas画布上 使用canvas画布的能力进行图片压缩 将压缩后的Base64(DataURL)...

Michael_lzg的博客 533

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

H5压缩图片上传(FileReader +canvas)

因为最近项目做一个webApp的页面,需要上传图片,总结了一下,思路如下: 一、监听一个input (type='file') 的 change 事件,然后拿到文件的 file; <input id="img-input" class="upload-input" type="file" accept="image/*" id="imgbox" multiple/>...

aek7426的博客 203

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

处理图片上传 并利用canvas压缩 且转化为base64,

vue上传图片,并压缩,转化base64

tutou_cute的博客 634

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ueditor使用canvas在图片上传前进行压缩

之前就看到H5使用canvas就可以在前端使用JS压缩图片,这次接到任务要把这个功能嵌入到ueditor里面去,以节省流量,减轻服务器压力。 H5使用canvas进行压缩的代码有很多,核心原理就是创建Image对象,导入canvas,限制canvas大小,然后导出为base64,生成二进制对象,最后将二进制对象进行上传。 我们要修改的文件在ueditor.all.js里,第24352行: U...

weixin_30535167的博客 295

压缩图片上传 —— canvas和ajax

1、 图片加载完毕,把图片绘制到canvas上去 2、转换为Bold对象或File对象 3、ajax上传,一定要加name // ajax上传图片——文件流方式 export function upload(base64, name) { return new Promise((resolve, reject) => { Toast.loading({ durat...

xiaoququ的博客 279

HTML5 fileReader对象实现图片上传(支持一次上传多张图片),并用canvas进行前端压缩

首先页面布局的代码是这样的 将type="file"的input绝对定位到上传图片的图标上,并且将opacity设置为0,即可实现样式效果。 multiple代表可支持一次上传多张图片 accept=“image/*” :代表会打开图库或者照相机 但是在Chrome和Safari等Webkit浏览器下却出现了响应滞慢的问题,可能要等 6~10s 才能弹出文件选择对话框,简直不能忍呀。 在IE和Firefox中则没有发现响应延迟的问题 解决办法:accept=“image/gif,image/jpeg,ima

Flowering_Vivian的博客 896

Vue中用canvas对图片上传前压缩

Vue中用canvas对图片上传前压缩

I大俊 1356

H5 canvas实现客户端压缩图片上传

现在手机随随便便拍个照都是5、6MB,如果用户提交图片,即占服务器资源,上传速度又慢,影响用户体验度,所以一般都会对图片进行处理。 之前用php写过一个压缩图片程序,是先将图片上传到服务器之后,在服务器端进行压缩,效果不是很理想。 后来想想,还是决定要在客户端压缩,依靠H5的canvas来对图片在本地进行压缩处理,将图片处理成为base64编码,然后发送到后台,后台再做处理然后存储就好了(这样...

zhenhuaYang 的个人博客 6170

h5 input type=file ios拍照相片旋转90度修正 前端图片利用canvas处理压缩 vue图片上传优化处理

直接进入正题 input type=file 是前端处理图片上传的必要途径 这里说一下 第一个需求 如果用户点击type=file的按钮 只想完成调用照相功能 而不用选取照片功能 其实 input type=file标签上还是有很多 特殊好玩的属性的 我们列举一下 <input type="file" accept="image/*" capture="camera"...

gaoqiang1112的博客 4410

前端 canvas压缩图片上传

学习随笔*HTML代码**JS代码* HTML代码 <input type="file" name="" id="upload"> JS代码 // 获取input元素 const upload = document.getElementById('upload') upload.addEventListener('change', (e) => changeCallback(e)) // 选择文件后执行的回调 func

weixin_45762331的博客 280
上一篇: 使用发布订阅模式简单实现类似vue的双向数据绑定
下一篇: koa2中一些常用中间件
samfung09
博客等级 码龄9年 15粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值