欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 【JS压缩图片】js压缩图片至指定大小

【JS压缩图片】js压缩图片至指定大小

2025/5/3 16:18:11 来源:https://blog.csdn.net/qq_43614372/article/details/147672039  浏览:    关键词:【JS压缩图片】js压缩图片至指定大小

yaSuoImg.js

/*** 加载图片* @param {URL} url 图片地址* @returns {Promise.<Image>}*/
const loadImageAsync = (url) => {return new Promise((resolve, reject) => {const image = new Image();image.src = url;image.onload = function () {resolve(image);};image.onerror = function (err) {reject(new Error("出错 " + err));};});
}/*** 图片压缩* @param {File} file 拾取的图片文件File* @param {Number} [maxSizeKB=300] 超过maxSizeKB启动压缩(KB)* @param {String} [imgType="webp"] 压缩后的图片格式,推荐webp,既无损压缩* @param {Number} [opy=.9] 清晰度 0-1 推荐0.9,既不失真,又可压缩图片内存* @return {Promise.<Base64URLString>}*/
export const compress = async (file, maxSizeKB = 300, imgType = 'webp', opy = .9) => {const canvas            = document.createElement("canvas"),context           = canvas.getContext("2d"),image             = await loadImageAsync(URL.createObjectURL(file)),{ height, width } = image;if (file.size > maxSizeKB * 1024) {let   rate       = 0;                 // 压缩率 const fileSizeKB = file.size / 1024;  // 文件大小KB, file.size给的是字节Byteif (fileSizeKB > maxSizeKB) { // 当图片大小超标,才进行压缩rate = (fileSizeKB - maxSizeKB) / fileSizeKB; // 计算压缩率}// 纠正因子,不加会导致压缩出的文件太小const factor        = 0,cvWidth       = width * (1 - rate + factor),cvHeight      = height * (1 - rate + factor);canvas.height = cvHeight;canvas.width  = cvWidth;context.clearRect(0, 0, cvWidth, cvHeight);context.drawImage(image, 0, 0, cvWidth, cvHeight);} else {canvas.height = height;canvas.width  = width;opy           = .7context.clearRect(0, 0, width, height);context.drawImage(image, 0, 0, width, height);}URL.revokeObjectURL(file)//释放内存return canvas.toDataURL(`image/${imgType}`, opy);
} 

import { compress } from "/yaSuoImg.js";
const  imgBlobSrc = await compress(file);
``

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词