我甚至没有完全理解。任何人都可以形容我们想要什么以及如何做到这一点。
你能指导我吗?答案 0 :(得分:2)
如果必须保持纵横比,那只意味着您需要将高度和宽度缩放完全相同的量。这是一个相当容易满足的要求 - 您只需计算所需的比例并将其应用于这两个维度。
为了确保图像仅按向下缩放,您只检查超出上限的限制,并在这些情况下进行缩放。例如,如果高度和宽度均小于1001,并且像素数小于500,000,则根本不需要进行缩放。
检查其他要求的上限如下:
首先,如果高度大于1000,只需按1000/height
缩放高度和宽度。这会将高度降低到1,000并相应地调整宽度。
接下来,如果宽度大于1000,只需按1000/width
缩放高度和宽度(由于高度可能已经缩放)。这会将宽度降低到1,000,并再次通过按比例缩小高度来保持纵横比。
最后,您需要检查像素数,计算结果为height * width
。高度和宽度均为1,000或更小,您的像素数可能仍高达一百万。
如果超过500,000,则以像素数低于该值的方式缩放高度和宽度。因为它是二维值,所以您可以按500,000 / (height * width)
的平方根进行缩放。
因此,就伪代码而言,你正在寻找类似的东西:
if h > 1,000:
scale = 1,000 / h
h = h * scale # will be 1,000
w = w * scale
if w > 1,000:
scale = 1,000 / w
h = h * scale
w = w * scale # will be 1,000
if h * w > 500,000:
scale = sqrt (500,000 / (h * w))
h = h * scale
w = w * scale
检查带有一些样本值的第三部分代码(800 x 700,给出560,000像素)会产生以下结果:
800 * sqrt (500K/560K) -> 755
700 * sqrt (500K/560K) -> 611
755 * 611 -> 499,055 pixels, so scaled down okay.
Ratio of 755/611 is same (roughly) as 800/700.