gpt4 book ai didi

image - 如何将 HttpPostedFileBase 转换为图像?

转载 作者:行者123 更新时间:2023-12-02 16:18:41 24 4
gpt4 key购买 nike

我正在使用 ASP.NET MVC,并且我有一个上传文件的操作。文件正在正确上传。但我想要图像的宽度和高度。我想我需要先将 HttpPostedFileBase 转换为 Image 然后继续。我该怎么做?

如果有其他更好的方法来获取图像的宽度和高度,请告诉我。

最佳答案

我使用Image.FromStream如下:

Image.FromStream(httpPostedFileBase.InputStream, true, true)

请注意,返回的ImageIDisposable

您需要引用 System.Drawing.dll 才能使其正常工作,并且 Image 位于 System.Drawing 命名空间中.

调整图像大小

我不确定你想做什么,但如果你碰巧正在制作缩略图或类似的东西,你可能会对做类似的事情感兴趣......

try {
var bitmap = new Bitmap(newWidth,newHeight);
using (Graphics g = Graphics.FromImage(bitmap)) {
g.SmoothingMode = SmoothingMode.HighQuality;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.CompositingQuality = CompositingQuality.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(oldImage,
new Rectangle(0,0,newWidth,newHeight),
clipRectangle, GraphicsUnit.Pixel);
}//done with drawing on "g"
return bitmap;//transfer IDisposable ownership
} catch { //error before IDisposable ownership transfer
if (bitmap != null) bitmap.Dispose();
throw;
}

其中 clipRectangle 是您希望缩放到新位图的原始图像的矩形(您需要手动处理宽高比)。 catch block 是构造函数内典型的 IDisposable 用法;您保留新的 IDisposable 对象的所有权,直到它返回为止(您可能需要使用代码注释来记录它)。

另存为 Jpeg

不幸的是,默认的“另存为 jpeg”编码器不会公开任何质量控制,并且选择非常低的默认质量。

但是,您也可以手动选择编码器,然后可以传递任意参数:

ImageCodecInfo jpgInfo = ImageCodecInfo.GetImageEncoders()
.Where(codecInfo => codecInfo.MimeType == "image/jpeg").First();
using (EncoderParameters encParams = new EncoderParameters(1))
{
encParams.Param[0] = new EncoderParameter(Encoder.Quality, (long)quality);
//quality should be in the range [0..100]
image.Save(outputStream, jpgInfo, encParams);
}

关于image - 如何将 HttpPostedFileBase 转换为图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1171696/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com