C# 获取图片宽与高

该博客介绍了如何使用C#来获取网络和本地图片的宽度与高度。首先讲解了通过WebRequest获取网络图片的尺寸,接着阐述了读取本地图片的宽和高的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

获取网络图片宽与高

<span style="font-family:Comic Sans MS;"> /*
             c# 获取网络图片的宽与高
             */
            WebRequest request = WebRequest.Create(@"http://www.baidu.com/img/bdlogo.gif");
            request.Credentials = CredentialCache.DefaultCredentials;
            Stream s = request.GetResponse().GetResponseStream();
            byte[] b = new byte[74373];
            MemoryStream mes_keleyi_com = new MemoryStream(b);
            s.Read(b, 0, 74373);
            s.Close();

            System.Drawing.Image image = System.Drawing.Image.FromStream(mes_keleyi_com);
            Response.Write(string.Format("width:{0},height:{1}", image.Width, image.Height));
            Response.Write("<br/>");
            string path = Server.MapPath("images/1234.jpg");
            Response.Write("<br/>");</span>


获取本地图片宽与高

<span style="font-family:Comic Sans MS;"> /*
             * 获取本地图片的宽与高
             */
            System.Drawing.Image  localimage = System.Drawing.Image.FromFile(Server.MapPath("images/1234.jpg"));
            Response.Write(string.Format("local image width:{0},height:{1}",localimage.Width,localimage.Height));</span>


<think>嗯,用户现在问的是如何使用disintegration/imaging库来获取图片度和度。之前他们问过替代C库的纯Go图像处理包,我推荐了包括imaging在内的几个库。现在他们可能已经开始使用imaging,但在实际操作中遇到了如何获取图片尺寸的问题。 首先,我需要回想一下imaging库的文档和常用方法。imaging库主要用于图像处理,如调整大小、裁剪等,但基本操作如打开图片获取尺寸应该是支持的。通常,在Go的图像处理库中,image.Image接口会有Bounds方法,返回一个Rectangle,里面包含了图片的尺寸信息。所以用户需要知道如何通过打开图片后,调用Bounds()来获取。 接下来,我需要确定用户可能的实际应用场景。他们可能在处理图片上传、生成缩略图,或者需要根据图片尺寸进行一些动态调整。这时候获取是基本需求,用户可能已经成功用imaging打开图片,但不知道如何提取尺寸信息。或者他们可能遇到了错误,比如在调用某些方法时出现nil指针,因此需要确保正确错误处理。 然后,我需要检查用户提供的示例代码是否正确。比如,imaging.Open返回的图片对象是否是image.Image类型,以及是否需要处理错误。在之前的回答中,用户提供的示例代码省略了错误处理,但在实际应用中,必须处理错误,避免panic。因此,在回答中应该包含完整的错误检查步骤,确保用户不会忽略这一点。 另外,用户可能想知道是否有其他方法获取尺寸,比如不加载整个图片的情况下读取元数据,但这通常需要特定的解码器支持。对于大多数图像格式,imaging可能需要完全解码图片才能获取尺寸,而像标准库中的image.DecodeConfig可能可以在不解码整个图片的情况下获取尺寸。不过,用户的问题是针对imaging库,所以需要确认imaging是否支持,或者是否需要结合其他包。 不过,imaging本身可能并没有提供直接获取尺寸而不解码整个图像的方法,所以可能需要使用标准库的方法。但用户明确问的是使用imaging,所以应该专注于imaging的方法,即打开图片后通过Bounds获取。 然后,我需要考虑如何组织回答。首先,给出导入imaging库的说明,然后展示如何打开图片并处理错误,接着通过Bounds()方法获取尺寸。可能需要指出Bounds().Max.X和Bounds().Max.Y的含义,因为image.Rectangle的Max字段代表的是右下角的坐标,而Min通常是(0,0),所以Max.X和Max.Y即为度和度。 另外,是否需要提到不同图像格式的支持?比如,imaging支持JPEG、PNG等,但可能某些格式需要特定的解码器。不过,用户可能已经知道这一点,或者已经在使用支持的格式,所以可能不需要深入讨论,除非有潜在的问题。 最后,给出一个完整的示例代码,包括导入语句、错误处理、获取并打印出来。这样用户可以直接复制代码进行测试,确保他们能够顺利运行。同时提醒用户注意错误处理,避免因为文件不存在或格式不支持导致程序崩溃。 总结下来,回答的结构应该是:介绍使用imaging.Open打开图片,处理错误,然后通过img.Bounds().Max.X和Y获取,给出示例代码,并解释关键点。可能还需要对比标准库的方法,但用户的问题明确是关于imaging的,所以重点放在imaging的方法上。</think>以下是使用 **`disintegration/imaging`** 库获取图片度和度的具体方法: --- ### **步骤说明** 1. **导入库**:使用 `imaging.Open` 打开图片文件。 2. **获取尺寸**:通过 `img.Bounds()` 获取图片的边界矩形(`image.Rectangle`),其 `Max` 字段的 `X` 和 `Y` 值分别对应度和度。 3. **错误处理**:确保检查文件路径和格式的合法性。 --- ### **示例代码** ```go package main import ( "fmt" "github.com/disintegration/imaging" // 导入 imaging 库 ) func main() { // 打开图片文件(需检查错误) img, err := imaging.Open("input.jpg") if err != nil { panic(fmt.Sprintf("无法打开图片: %v", err)) } // 获取度和度 width := img.Bounds().Max.X height := img.Bounds().Max.Y fmt.Printf("图片度: %dpx, 度: %dpx\n", width, height) } ``` -- ### **关键点解释** 1. **`img.Bounds()`**: - 返回一个 `image.Rectangle` 结构,描述图片的边界范围。 - `Bounds().Max.X` 是度(单位:像素),`Bounds().Max.Y` 是度。 - 例如:对于一张 800x600 的图片,`Max.X=800`,`Max.Y=600`。 2. **支持格式**: - `imaging` 支持常见格式:JPEG、PNG、GIF、BMP、TIFF。 - 若图片格式不受支持(如 WebP),需改用其他库(如 `golang.org/x/image/webp`)。 --- ### **性能说明** - **优点**:直接读取图片并解码,简单可靠。 - **缺点**:如果仅需获取尺寸(不处理图像内容),解码整张图片可能略低效。此时可用标准库的 `image.DecodeConfig`(仅解析元数据): ```go file, _ := os.Open("input.jpg") config, _, _ := image.DecodeConfig(file) fmt.Printf(": %dpx, : %dpx", config.Width, config.Height) ``` -- ### **总结** - **使用场景**:如果已依赖 `imaging` 处理图片,直接用它获取尺寸即可。 - **轻量替代**:若仅需元数据,优先用 `image.DecodeConfig`(更效)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值