ying-study icon indicating copy to clipboard operation
ying-study copied to clipboard

17. 图片压缩题

Open KRISACHAN opened this issue 4 years ago • 2 comments

需要对上传的图片进行压缩,要求图片总像素不大于 400(20 20), 假如输入一张 3080 的图片,问长边应该压缩到多少,如何计算?

KRISACHAN avatar Aug 05 '20 14:08 KRISACHAN

解法1

const 最大面积 = 400
const 图片宽度 = 30
const 图片高度 = 80
const 获取最终结果 = (最大面积, 宽度, 高度) => {
    let 最终宽度 = 宽度
    let 最终高度 = 高度
    if (最终宽度 * 最终高度 <= 最大面积) {
        return {
            最终宽度,
            最终高度
        }
    }
    while (最终宽度 * 最终高度 > 最大面积) {
        let 一半的宽度 = 最终宽度 / 2
        let 一半的高度 = 最终高度 / 2
        if ((一半的宽度 * 一半的高度) > 最大面积) {
            最终宽度 = 一半的宽度 + 一半的宽度 / 2
            最终高度 = 一半的高度 + 一半的高度 / 2
        } else if ((一半的宽度 * 一半的高度) === 最大面积) {
            最终宽度 = 一半的宽度
            最终高度 = 一半的高度
            return {
                最终宽度,
                最终高度
            }
        } else {
            最终宽度 = 一半的宽度
            最终高度 = 一半的高度
        }
    }
    return {
        最终宽度,
        最终高度 
    }
}

解法2

const 获取最终结果2 = (最大面积, 宽度, 高度) => {
    let 最终宽度 = 宽度
    let 最终高度 = 高度
    let 压缩系数 = 1
    let 每次减少的值 = 0.001
    if (最终宽度 * 最终高度 <= 最大面积) {
        return {
            最终宽度,
            最终高度
        }
    }
    while (最终宽度 * 最终高度 > 最大面积) {
        最终宽度 = (压缩系数 - 每次减少的值) * 最终宽度
        最终高度 = (压缩系数 - 每次减少的值) * 最终高度
    }
    // console.log(最终宽度 * 最终高度)
    return {
        最终宽度,
        最终高度 
    }
}

KRISACHAN avatar Aug 05 '20 14:08 KRISACHAN

题目要求不够明确,怎么回答?

ok2fly avatar Aug 05 '20 14:08 ok2fly