最佳调整大小和或​​作物逻辑(Best resize and or crop logic)

2019-09-01 07:31发布

我已经遇到了几次,并认为这将是很好的把它放在那里。 什么是你最好的图像大小调整和/或作物逻辑。 这个想法是,有些方法被称为与目标图像,尺寸和作物标志 - 这将返回或保存关闭或任何所需的图像。

煤矿如下。 从VB转换为C#所以是还会有小错误,但逻辑是什么,我们正在寻找。

// INIT
// On/off
bool WeAreCropping = true;

// Get some dimensions
int TargetWidth = RequestedWidth;
int TargetHeight = RequestedHeight;
int SourceWidth = SourceImage.Width;
int SourceHeight = SourceImage.Height;
int ResizeWidth = TargetWidth;
int ResizeHeight = TargetHeight;

// GET RESIZE VALUES
// Are we cropping?
if (WeAreCropping) {

    // Get source and target aspect ratio
    double SourceAspectRatio = SourceWidth / SourceHeight;
    double TargetAspectRatio = TargetWidth / TargetHeight;

    // Compare aspect ratios to find out if we should we resize by 
    // width or height or nothing
    if (TargetAspectRatio < SourceAspectRatio) {
        ResizeWidth = TargetHeight / SourceHeight * SourceWidth;
    }
    else if (TargetAspectRatio > SourceAspectRatio) {
        ResizeHeight = TargetWidth / SourceWidth * SourceHeight;
    }
    else {
      // Same aspect ratio
    }


}
else {

    // If the target image is bigger than the source
    if (TargetWidth > SourceWidth && TargetHeight > SourceHeight) {
        TargetWidth = SourceWidth;
        TargetHeight = SourceHeight;
    }

    double Ratio = 0;

    // What ratio should we resize it by
    if (SourceWidth / TargetWidth > SourceHeight / TargetHeight) {
        Ratio = SourceWidth / TargetWidth;
    }
    else {
        Ratio = SourceHeight / TargetHeight;
    }

    ResizeWidth = Math.Ceiling(SourceWidth / Ratio);

    ResizeHeight = Math.Ceiling(SourceHeight / Ratio);
}

// TIME TO DO SUMFINK
// Resize the image using ResizeWidth and ResizeHeight
// Do it

if (WeAreCropping) {
    // Crop the resized image at the center TargetWidth and TargetHeight
    // Do it
}

我怀疑这可能是更优雅所以也许你可以做的更好。

Answer 1:

我说你应该使用标准的几何类型,如RectangleSize 。 那么你或许应该还支持使用情况下,当来电者想在一些较大的矩形以适应图像,但仍希望保持原始图像大小比。

一种方式来实现调整大小,你可以找到这里 。



Answer 2:

这可能是一个有点比你需要更多地参与,但对于一些先进的种植技术的例子, 检查了这一点 。



文章来源: Best resize and or crop logic