在C#中修改图片尺寸而不改变其原有比例,可以通过计算目标尺寸来保持图片的宽高比。以下是一个示例代码,展示了如何使用System.Drawing
命名空间中的类来实现这一功能:
引入必要的命名空间:
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
定义方法以调整图片尺寸:
public class ImageResizer
{
public static void ResizeImage(string inputImagePath, string outputImagePath, int maxWidth, int maxHeight)
{
using (Image image = Image.FromFile(inputImagePath))
{
// 计算新的尺寸,保持宽高比
int newWidth = image.Width;
int newHeight = image.Height;
double aspectRatio = (double)image.Width / image.Height;
if (newWidth > maxWidth || newHeight > maxHeight)
{
if (image.Width > image.Height)
{
newWidth = maxWidth;
newHeight = (int)(maxWidth / aspectRatio);
}
else
{
newHeight = maxHeight;
newWidth = (int)(maxHeight * aspectRatio);
}
// 如果新的宽度或高度仍然超出限制,则进一步调整
if (newWidth > maxWidth)
{
newWidth = maxWidth;
newHeight = (int)(maxWidth / aspectRatio);
}
if (newHeight > maxHeight)
{
newHeight = maxHeight;
newWidth = (int)(maxHeight * aspectRatio);
}
}
// 创建一个新的Bitmap对象,并设置新的尺寸
using (Bitmap newImage = new Bitmap(newWidth, newHeight))
{
using (Graphics graphics = Graphics.FromImage(newImage))
{
// 设置高质量插值模式
graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
// 绘制调整后的图片
Rectangle rect = new Rectangle(0, 0, newWidth, newHeight);
graphics.DrawImage(image, rect);
// 保存新的图片
newImage.Save(outputImagePath, GetImageFormat(outputImagePath));
}
}
}
}
private static ImageFormat GetImageFormat(string filePath)
{
string extension = Path.GetExtension(filePath).ToLower();
switch (extension)
{
case ".jpg":
case ".jpeg":
return ImageFormat.Jpeg;
case ".png":
return ImageFormat.Png;
case ".bmp":
return ImageFormat.Bmp;
case ".gif":
return ImageFormat.Gif;
default:
throw new NotSupportedException("Unsupported image format.");
}
}
}
调用方法:
class Program
{
static void Main(string[] args)
{
string inputImagePath = "path_to_your_input_image.jpg";
string outputImagePath = "path_to_your_output_image.jpg";
int maxWidth = 800;
int maxHeight = 600;
ImageResizer.ResizeImage(inputImagePath, outputImagePath, maxWidth, maxHeight);
Console.WriteLine("Image resized successfully.");
}
}
注意事项
- 依赖项:确保你的项目引用了
System.Drawing.Common
包(对于.NET Core或.NET 5+项目)。 - 异常处理:在实际应用中,你可能需要添加更多的异常处理代码来处理文件读取、写入失败等情况。
- 性能:对于大图片或批量处理,考虑使用更高效的图像处理库,如
ImageSharp
。
这个示例代码展示了如何读取一个图片文件,调整其尺寸以保持宽高比,并将调整后的图片保存到指定路径。
© 版权声明
文中内容均来源于公开资料,受限于信息的时效性和复杂性,可能存在误差或遗漏。我们已尽力确保内容的准确性,但对于因信息变更或错误导致的任何后果,本站不承担任何责任。如需引用本文内容,请注明出处并尊重原作者的版权。
THE END
暂无评论内容