在C#开发中,处理图片时经常需要获取图片的宽度和高度,Image对象作为GDI+中处理图像的核心类,提供了直接读取尺寸的属性,开发者可以通过简单的代码实现尺寸获取的需求。

通过Image对象的属性直接获取尺寸
Image类自带了Width和Height两个属性,分别对应图片的宽度和高度,单位是像素。只要成功加载了Image对象,就可以直接调用这两个属性获取数值。
从本地文件路径加载图片获取尺寸
如果图片存储在本地磁盘,可以通过Image.FromFile方法加载图片得到Image对象,再读取对应的属性。
using System;
using System.Drawing;
namespace ImageSizeDemo
{
class Program
{
static void Main(string[] args)
{
// 本地图片路径
string imagePath = @"C:testsample.jpg";
try
{
// 加载图片得到Image对象
using (Image img = Image.FromFile(imagePath))
{
// 读取宽度和高度
int width = img.Width;
int height = img.Height;
Console.WriteLine($"图片宽度:{width}像素,图片高度:{height}像素");
}
}
catch (Exception ex)
{
Console.WriteLine($"获取图片尺寸失败:{ex.Message}");
}
}
}
}
从流中加载图片获取尺寸
如果图片是通过网络请求或者文件流的形式存在,不需要先保存到本地,可以直接从流中加载Image对象,再获取尺寸。
using System;
using System.Drawing;
using System.IO;
namespace ImageSizeDemo
{
class Program
{
static void Main(string[] args)
{
string imagePath = @"C:testsample.jpg";
try
{
// 使用文件流加载图片
using (FileStream fs = new FileStream(imagePath, FileMode.Open, FileAccess.Read))
{
using (Image img = Image.FromStream(fs))
{
int width = img.Width;
int height = img.Height;
Console.WriteLine($"图片宽度:{width}像素,图片高度:{height}像素");
}
}
}
catch (Exception ex)
{
Console.WriteLine($"获取图片尺寸失败:{ex.Message}");
}
}
}
}
注意事项
- 使用
Image.FromFile加载图片时,文件会被锁定,直到Image对象被释放,因此建议使用using语句确保资源及时释放,避免文件占用问题。 - 如果图片路径不存在或者图片格式不支持,加载Image对象时会抛出异常,实际开发中需要做好异常处理。
Width和Height属性返回的是像素值,不是物理尺寸,如果需要获取物理尺寸(如厘米、英寸),还需要结合图片的水平和垂直分辨率进行计算。- 除了Image类,Bitmap类继承自Image类,同样支持这两个属性,处理位图时也可以直接使用Bitmap对象获取尺寸。
实际场景示例
比如在上传图片时对尺寸做校验,限制上传的图片宽度不能超过1920像素,就可以用如下代码实现:
using System;
using System.Drawing;
namespace ImageSizeDemo
{
class Program
{
static void Main(string[] args)
{
string uploadImagePath = @"C:uploaduser_photo.jpg";
int maxWidth = 1920;
try
{
using (Image img = Image.FromFile(uploadImagePath))
{
if (img.Width > maxWidth)
{
Console.WriteLine($"图片宽度{img.Width}超过限制{maxWidth},不允许上传");
}
else
{
Console.WriteLine("图片尺寸符合要求,可以上传");
}
}
}
catch (Exception ex)
{
Console.WriteLine($"校验图片尺寸失败:{ex.Message}");
}
}
}
}