我们需要能够优雅地将任何照片/图像调整到精确的宽度/高度,而不会使图像歪斜。我们可以使用第三方解决方案,也可以使用内置的.NET功能来处理这个问题。我认为必须有一个简单的解决方案,而不必编写复杂的算法。
示例场景(我们希望将所有上传内容调整为200x100像素)
尺寸为1250x800的风景照片:
将宽度调整为200px将按比例将高度设置为128px,以便从顶部和底部裁剪出额外的28px。
尺寸为1250x500的风景照片:
将宽度按比例调整为200px,将高度调整为80px,这样我们就需要先捕获它并按高度调整大小。将高度设置为100px将按比例将宽度设置为250px。额外的50px需要从照片的两侧裁剪掉。
尺寸为800x950的人像照片:
将宽度调整为200px将按比例将高度调整为238px,以便从顶部和底部裁剪出额外的138px。
答案 0 :(得分:1)
如果我在家,我会把你的代码交给你。
但是,您可以在这里找到类似于您所需的内容: http://www.codeproject.com/KB/aspnet/resizeimg_emanuele_briano.aspx
<强> 修改 强>
这是一个更好的链接。 http://www.codeproject.com/KB/graphics/ImageResizingManager.aspx
答案 1 :(得分:1)
您可以使用Bitmap class执行此操作,如下所示:
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的this overload将原始图像的剪切部分绘制到新图像。
}
}
答案 2 :(得分:0)
我不会裁剪任何东西。例如,在第一种情况下,我会首先调整高于所需宽高比的边缘。如果你在如此小的尺寸上改变宽高比,东西就不会很好地缩放,所以我不会惹它。
将1250x800图像调整为156.25x100。然后,生成的图像可以在200x100帧内居中。如果这是执行任务的用户,您可以使用一些预览选项,让他们看看他们的缩放图像是否符合所需的范围
答案 3 :(得分:0)
GDI +在ASP.NET中运行良好。 (WPF曾经,但现在没有。)
将图像拟合到给定矩形的算法并不太棘手:计算出图像和目标的宽度/高度比,然后根据宽度或高度调整大小。显然你选择哪个取决于你是想要适应目标还是覆盖目标。
此外,我发现基于堆栈的方法可以很好地表示转换:
http://www.hackification.com/2008/10/29/stack-based-processing-part-2/
答案 4 :(得分:0)
前一段时间我遇到了同样的事情。这是我过去做的文章high quality image resize with .net。 JPG图像效果最佳。使用GIF图像效果不佳。
我经常搜索以寻找高质量调整大小的解决方案。如果您有奇数分辨率,许多代码会产生像素化图像。
您可以选择裁剪或拥有空白区域。我选择做裁剪因为我不喜欢白色空间。看起来很难看。如果您将图像居中并裁剪为顶部和底部或左侧和右侧,则大部分时间都可以正常工作。
这是关于cropping image的简短文章。
我有正在使用的工作代码,但目前无法实现。也许我稍后会添加自己的代码。
答案 5 :(得分:0)
您可以在这篇文章中看到有人刚刚创建了示例应用程序来调整图像大小。
他们还提供了Class Image Resizer供参考。