ASP.NET 图片调整大小

3
我们需要能够优雅地调整任何照片/图像的宽度/高度,而不会扭曲图像。我们可以使用第三方解决方案,也可以使用内置的.NET功能来处理此问题。我认为必须有一个简单的解决方案,而不必编写复杂的算法。
示例场景(我们希望所有上传的文件都被调整为200x100像素):
横向照片,尺寸为1250x800:
将宽度调整为200px将按比例将高度放置在128px处,因此额外的28px将从顶部和底部裁剪掉。
横向照片,尺寸为1250x500:
将宽度调整为200px将按比例把高度放到80px处,因此我们需要捕捉并先通过高度进行调整。将高度设置为100px将按比例将宽度放置在250px处。额外的50px需要从照片的两侧裁剪掉。
纵向照片,尺寸为800x950:
将宽度调整为200px将按比例将高度放置在238px处,因此额外的138px将从顶部和底部裁剪掉。

1
你是想实际更改图像并将其保存到那些新的尺寸,还是仅在img标签中显示具有这些新的尺寸,并让浏览器对其进行缩放? - Jacob G
你真的想让新图片恰好是200X100吗?还是你只是想将重新调整大小的图片适应于一个200x100的框中? - wcm
1
我认为最好添加空白而不是裁剪来达到所需的尺寸。这样,您就不会在图像中丢失任何重要内容。 - mxmissile
这将完全按照您的要求执行:Build(uploadFile, destFile, new ResizeSettings("width=200&height=100&crop=atuo"));。请访问网站(http://imageresizing.net)了解更多信息。 - Lilith River
您还可以在上传后通过向图像URL添加查询字符串来调整图像大小:"image.jpg?width=200&height=100&crop=auto"。C# HttpModule是免费的、开源的,并得到支持 - Lilith River
6个回答

1
你可以使用位图类来实现这个功能,像这样:
using (Bitmap original= new Bitmap(...)) {   //A stream or a filename
    //Calculate the desired size using original.Height and original.Width

    Bitmap newImage = new Bitmap(newWidth, newHeight);

    using(Graphics g = Graphics.FromImage(newImage) {

调用 g.DrawImage 的 此重载,将原始图像的裁剪部分绘制到新图像中。

    }
}

1

0

我不会裁剪任何东西。例如,在您的第一个案例中,我会先调整高于所需宽高比的边缘大小。如果在这样小的尺寸下更改宽高比,图像将无法很好地缩放,因此我不会对其进行更改。

将1250x800的图像调整为156.25x100。然后,可以将结果图像居中在200x100的框架内。如果这是用户执行的任务,则可以提供一些预览选项,让他们查看其缩放后的图像是否符合所需范围。


0

GDI+ 在 ASP.NET 中表现良好。(WPF 以前也可以,但现在不行了)。

将图像适应到给定矩形的算法并不太复杂:计算图像和目标的宽度/高度比率,然后根据宽度或高度进行调整大小。显然,您选择的方式取决于您是想适应目标还是覆盖目标。

此外,我发现基于堆栈的方法可以很好地表示变换:

http://www.hackification.com/2008/10/29/stack-based-processing-part-2/


0

我之前也遇到了同样的问题,这是我用来进行.net高质量图像调整大小的文章。JPG格式的图片效果最好。GIF格式的图片效果不佳。

我搜索了很多关于高质量调整大小的解决方案,但许多代码在处理奇怪分辨率的图片时会使图像出现马赛克。

你可以选择裁剪或留白。我选择了裁剪,因为我不喜欢留白。它看起来很丑陋。如果将图片居中并裁剪顶部和底部或左侧和右侧,大多数情况下都能很好地工作。

这是一篇关于裁剪图片的简短文章。

我有一个正在使用的可行代码,但我现在无法获取它。也许以后我会添加自己的代码。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接