如何筛选超出特定宽高比的图像

huangapple go评论70阅读模式
英文:

How do I filter images that exceeds an aspect ratio

问题

我正在尝试创建一个C#程序,该程序会获取一个目录路径,并对图像进行迭代,然后对于每个图像,它应该检查该图像是否适用于Instagram帖子,而且我不需要裁剪它。

关于Instagram帖子比例的一些信息:

  1. 正方形:1:1
  2. 竖直:4:5
  3. 水平:1.91:1

我正在使用以下方法来查找图像的宽高比:

static string FindAspectRatio(int width, int height)
{
    int gcd = FindGcd(width, height);
    string ratio = $"{width / gcd}:{height / gcd}";
    return ratio;
}

private static int FindGcd(int x, int y)
{
    int gcd = 1;
    int temp;

    if (x > y)
    {
        temp = x;
        x = y;
        y = temp;
    }

    for (int i = 1; i < (x + 1); i++)
    {
        if (x % i == 0 && y % i == 0)
            gcd = i;
    }

    return gcd;
}

然后,我添加了3个条件检查,用于检查每个图像的Instagram比例。问题是,有时宽高比不是4:5,但高度比Instagram允许的垂直帖子的最大宽高比稍短,这种情况下我不需要应用程序告诉我应该裁剪该图像。是否有任何方法可以实现这一点,以便应用程序可以准确地告诉何时应该裁剪图像?

if (aspectRatio == "4:5" || aspectRatio == "1:1" || aspectRatio == "16:9")
{
    continue;
}

请注意,上述代码已经完成了对Instagram的三种常见帖子比例的检查,但如果您希望进行更精确的检查,以确定何时应该裁剪图像,您可能需要添加更多的逻辑来处理边缘情况。这可能需要更复杂的算法和规则。

英文:

I'm trying to make a C# program that gets a directory path and iterate on images, then for each image it should check if that Image it's a fit for instagram post and I don't need to crop it.

Some infos about instagram post ratios:

  1. Square: 1:1
  2. Vertical: 4:5
  3. Horizontal 1.91:1.

I'm using these methods to find image aspect ratio

static string FindAspectRatio(int width, int height)
    {
        int gcd = FindGcd(width, height);
        string ratio = $&quot;{width / gcd}:{height / gcd}&quot;;
        return ratio;
    }

private static int FindGcd(int x, int y)
    {
        int gcd = 1;
        int temp;

        if (x &gt; y)
        {
            temp = x;
            x = y;
            y = temp;
        }

        for (int i = 1; i &lt; (x + 1); i++)
        {
            if (x % i == 0 &amp;&amp; y % i == 0)
                gcd = i;
        }

        return gcd;
    }

then I added 3 if checks for instagram ratios to check with each image.
The problem is that sometimes the aspect ratio is not 4:5 but the height is a bit shorter than max aspect ratio instagram allows for vertical posts and on that case I don't need the app to tell me that I should crop that image. Is there anyway to achieve this so the app can exactly tell when an image should be cropped?

if (aspectRatio == &quot;4:5&quot; || aspectRatio == &quot;1:1&quot; || aspectRatio == &quot;16:9&quot;)
{
    continue;
}

答案1

得分: 1

以下是翻译好的代码部分:

static bool InstaRatioValid(decimal ratio)
{
    if (ratio >= 0.80M && ratio <= 1.92M)
    {
        return true;
    }
    return false;
}

static decimal FindAspectRatio(int width, int height)
{
    decimal ratio = Math.Round((decimal)width / height, 2, MidpointRounding.ToZero);
    return ratio;
}

希望这对你有帮助!

英文:

Okay I was able to solve it by experimenting with different values,

static bool InstaRatioValid(decimal ratio)
{
    if(ratio &gt;= 0.80M &amp;&amp; ratio &lt;= 1.92M)
    {
        return true;
    }
    return false;
}

static decimal FindAspectRatio(int width, int height)
{
    decimal ratio = Math.Round((decimal)width / height, 2,MidpointRounding.ToZero);
    return ratio;
}

huangapple
  • 本文由 发表于 2023年6月8日 20:24:25
  • 转载请务必保留本文链接:https://go.coder-hub.com/76431841.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定