ying-study
ying-study copied to clipboard
17. 图片压缩题
需要对上传的图片进行压缩,要求图片总像素不大于 400(20 20), 假如输入一张 3080 的图片,问长边应该压缩到多少,如何计算?
解法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 {
最终宽度,
最终高度
}
}
题目要求不够明确,怎么回答?