一尘不染

图像调整大小算法

algorithm

我想编写一个函数来缩小图像以适合指定范围。例如,我想调整2000x2333图像的大小以适合1280x800。必须保持纵横比。我想出了以下算法:

NSSize mysize = [self pixelSize]; // just to get the size of the original image
int neww, newh = 0;
float thumbratio = width / height; // width and height are maximum thumbnail's bounds
float imgratio = mysize.width / mysize.height;

if (imgratio > thumbratio)
{
    float scale = mysize.width / width;
    newh = round(mysize.height / scale);
    neww = width;
}
else
{
    float scale = mysize.height / height;
    neww = round(mysize.width / scale);
    newh = height;
}

它似乎有效。好吧…似乎。但是后来我尝试将1280x1024图像的大小调整为1280x800边界,结果是1280x1024(显然不适合1280x800)。

有谁知道该算法如何工作?


阅读 208

收藏
2020-07-28

共1个答案

一尘不染

我通常这样做的方法是查看原始宽度和新宽度之间的比率以及原始高度和新高度之间的比率。

之后,以最大比例缩小图像。例如,如果您想将800x600的图像调整为400x400的图像,则宽度比将为2,高度比将为1.5。按2的比例缩小图像可得到400x300的图像。

NSSize mysize = [self pixelSize]; // just to get the size of the original image
int neww, newh = 0;
float rw = mysize.width / width; // width and height are maximum thumbnail's bounds
float rh = mysize.height / height;

if (rw > rh)
{
    newh = round(mysize.height / rw);
    neww = width;
}
else
{
    neww = round(mysize.width / rh);
    newh = height;
}
2020-07-28