Vue前端压缩图片后上传,拍照上传最佳实践

news/2025/1/11 9:58:04/

文章目录

  • 一、前言
  • 二、使用shrinkpng进行图片压缩
    • 2.1 安装依赖包
    • 2.2 引入包
    • 2.3 开始编码
  • 总结


一、前言

最近有一个需求,通过手机拍照后上传图片到服务器,大家应该都知道,现在的手机像素实在是太高了,随便拍一张都是10M以上,直接上传到服务器一方面是浪费存储空间,另外就是特别浪费流量,如果网络不好还很慢。所以想寻求一种前端压缩图片的方案。
在这里插入图片描述
在网上找了很多方式效果都不好,要么是根本无法实现功能,要么就是兼容性不好。不过最终找到一个比较完美的插件。
点击可以直接到主页:shrinkpng,话不多说,现在直接讲解怎么使用。

本文基于VueVantUINPM进行演示。


二、使用shrinkpng进行图片压缩

2.1 安装依赖包

通过下面的命令将shrinkpng库添加到我们自己的项目

npm install shrinkpng

2.2 引入包

在需要的Vue文件中加入如下代码

import { shrinkImage } from "shrinkpng"

2.3 开始编码

在vantui里面使用到van-uploader组件, :before-read="beforeRead"是核心语句,在beforeRead方法里面进行图片的压缩。

<van-cell><van-uploader :after-read="onRead" :before-delete="beforeDelete" v-model="preImg" :before-read="beforeRead"/>
</van-cell>

beforeRead方法实现如下,其中file是一个文件对象,通过shrinkImage方法就能将这个文件进行压缩。

compressImg(file) {return shrinkImage(file, {quality: 15});
},
beforeRead(file) {return this.compressImg(file);
},

quality是压缩质量,1-100之间.通过我自己的项目情况,配置为15基本上就能满足我的要求。将10M+的图片基本上压缩到1M以内。

总结

以上就是今天要讲的内容,本文介绍了Vue前端压缩图片后上传,拍照上传最佳实践,很多时候走了很多弯路都行不通,不过探索的过程还是很美好。希望本篇关于shrinkpng的使用能够提供给有需要的小伙伴。


http://www.ppmy.cn/news/129923.html

相关文章

yolov5脚本------标签label自动筛选

标签自动筛选 第一种 import warnings warnings.filterwarnings(ignore) warnings.simplefilter(ignore) import torch import cv2 import numpy as np import torchvision.transforms as transformsfrom models.common import DetectMu

attempt to unlock lock, not locked by current thread by node id异常

Redission分布式锁进行unlock操作时&#xff0c;会提示这个异常&#xff0c;源码如下&#xff1a; Overridepublic void unlock() {Boolean opStatus get(unlockInnerAsync(Thread.currentThread().getId()));if (opStatus null) {throw new IllegalMonitorStateException(&q…

attempt to unlock lock, not locked by current thread by node id

attempt to unlock lock, not locked by current thread by node id: ee1333c7-c195-4d3a-80af-f39f3f8e17df thread-id: 69 当时的代码是这样写的 public void execute() {String timerName HairDetectionJob.class.getName() Thread.currentThread().getStackTrace()[1].ge…

【RK3288 android6 4个摄像头固定映射】

【RK3288 android6 4个摄像头固定映射】 需求&#xff1a; RK3288 Android6 UNIK 需要增加餐盘和摄像头的固定映射关系 方法&#xff1a; 将餐盘层号和usb的设备号绑定&#xff0c;即固定usb口&#xff0c;创建固定名称的usb设备文件 kernel From 03f90bb48715fe4da182d1dd…

2022-03-22

easy_ya 来源&#xff1a;2022红明谷杯 from Crypto.Util.number import * import osfrom flag import flag def gen():e 3while True:try:p getPrime(512)q getPrime(512)n p*qphi (p-1)*(q-1)d inverse(e,phi)return p,q,d,n,eexcept:continuereturn p,q,d,n,e gen(…

使用FileInputStream类出现文件找不到的问题,thread “main“ java.io.FileNotFoundException: tx.jpg (系统找不到指定的文件。)

出现错误的代码形式&#xff1a; FileInputStream finew FileInputStream(new File("tx.jpg"));出错的提示&#xff1a; 一定是想用相对路径&#xff0c;导致的出错。 解决办法&#xff1a; 将图片放在Project的根目录下。 比如说&#xff1a;我的目标文件是tx.jpg …

[L4D]目录Missions中任务与地图关系

目录用途是存放地图任务 dropdownmission.res(菜单) "BtnDeadCenter"{"ControlName" "L4D360HybridButton""fieldName" "BtnDeadCenter""xpos" "0""ypos" "180"&quo…

ctfshow---sql注入(214-253)

目录​​​​​​​ web214 web215 web216 web217 web218 web219 web220 web221 web222 web223 web224 web225 web226 web227 web228-229-230 web231 web232 web233-234 web235-236 web237 web238 web239 web240 web241 web242 web243 web244 web24…