美文网首页
图片压缩组件

图片压缩组件

作者: Ropynn | 来源:发表于2019-12-19 15:50 被阅读0次
  • 图片压缩
export const pictureCompression = (file, callback) => {
    const reader = new FileReader();

    const img = new Image();

    reader.onload = (e) => (img.src = e.target.result);

    reader.readAsDataURL(file);

    const canvas = document.createElement('canvas');
    const canvasContext = canvas.getContext('2d');

    img.onload = () => {
        // 图片原始尺寸
        let originWidth = img.width;
        let originHeight = img.height;
        // 最大尺寸限制
        let maxWidth = 600;
        let maxHeight = 600;
        // 目标尺寸
        let targetWidth = originWidth;
        let targetHeight = originHeight;
        // 图片尺寸超过400x400的限制
        if (originWidth > maxWidth || originHeight > maxHeight) {
            if (originWidth / originHeight > maxWidth / maxHeight) {
                // 更宽,按照宽度限定尺寸
                targetWidth = maxWidth;
                targetHeight = Math.round(maxWidth * (originHeight / originWidth));
            } else {
                targetHeight = maxHeight;
                targetWidth = Math.round(maxHeight * (originWidth / originHeight));
            }
        }
        canvas.width = targetWidth;
        canvas.height = targetHeight;

        // 清除画布
        canvasContext.clearRect(0, 0, targetWidth, targetHeight);
        // 图片压缩
        canvasContext.drawImage(img, 0, 0, targetWidth, targetHeight);

        if (canvas.toBlob) {
            // canvas转为blob并上传
            canvas.toBlob(function(blob) {
                callback(blob);
            }, file.type || 'image/png');
        } else {
            callback(file);
        }
    };
};
  • 图片压缩
export const pictureCompressionPromise = (file) => {
    const reader = new FileReader();

    const img = new Image();

    reader.onload = (e) => (img.src = e.target.result);

    reader.readAsDataURL(file);

    const canvas = document.createElement('canvas');
    const canvasContext = canvas.getContext('2d');

    return new Promise((resolve) => {
        img.onload = () => {
            // 图片原始尺寸
            let originWidth = img.width;
            let originHeight = img.height;
            // 最大尺寸限制
            let maxWidth = 600;
            let maxHeight = 600;
            // 目标尺寸
            let targetWidth = originWidth;
            let targetHeight = originHeight;
            // 图片尺寸超过400x400的限制
            if (originWidth > maxWidth || originHeight > maxHeight) {
                if (originWidth / originHeight > maxWidth / maxHeight) {
                    // 更宽,按照宽度限定尺寸
                    targetWidth = maxWidth;
                    targetHeight = Math.round(maxWidth * (originHeight / originWidth));
                } else {
                    targetHeight = maxHeight;
                    targetWidth = Math.round(maxHeight * (originWidth / originHeight));
                }
            }
            canvas.width = targetWidth;
            canvas.height = targetHeight;

            // 清除画布
            canvasContext.clearRect(0, 0, targetWidth, targetHeight);
            // 图片压缩
            canvasContext.drawImage(img, 0, 0, targetWidth, targetHeight);

            if (canvas.toBlob) {
                // canvas转为blob并上传
                canvas.toBlob(function(blob) {
                    resolve(blob);
                }, file.type || 'image/png');
            } else {
                resolve(file);
            }
        };
    });
};

相关文章

  • iOS 图片压缩方法

    iOS 图片压缩方法 更多图片处理方法见图片组件 BBWebImage iOS 图片压缩方法 两种图片压缩方法 两...

  • 图片压缩组件

    图片压缩 图片压缩

  • 组件分享之后端组件——用于日常图片压缩的组件库caire

    组件分享之后端组件——用于日常图片压缩的组件库caire 背景 近期正在探索前端、后端、系统端各类常用组件与工具,...

  • iOS 图片压缩方法

    两种图片压缩方法 两种图片压缩方法:压缩图片质量(Quality),压缩图片尺寸(Size)。 压缩图片质量 通过...

  • iOS 图片压缩限制大小最优解

    iOS 图片压缩限制大小最优解 图片的两种压缩方法 1.1 压缩图片质量 1.2 压缩图片尺寸 压缩图片使图片文件...

  • vue图片上传,预览,压缩组件

    代码还在优化,后续会进行更新,该组件引用了element-ui的弹出框样式,使用axios库进行ajax请求,向后...

  • iOS 图片压缩限制大小最优解

    概要: 图片的两种压缩方法1.1 压缩图片质量1.2 压缩图片尺寸压缩图片使图片文件小于指定大小2.1 压缩图片质...

  • iOS 图片压缩限制大小

    一、两种图片压缩方法 两种压缩图片的方法:压缩图片质量(Quality),压缩图片尺寸(Size)。 压缩图片质量...

  • iOS 图片压缩方法

    两种图片压缩方法 两种压缩图片的方法:压缩图片质量(Quality),压缩图片尺寸(Size)。 压缩图片质量 N...

  • 图片压缩方法

    两种图片压缩方法 压缩图片质量(quality)、压缩图片尺寸(size) 压缩图片质量 或 前者可以控制压缩比例...

网友评论

      本文标题:图片压缩组件

      本文链接:https://www.haomeiwen.com/subject/ayomnctx.html