我使用ASP.NET MVC和我已经是上传文件的操作。 该文件被正确上传。 但我想图像的宽度和高度。 我想我需要的转换HttpPostedFileBase
到Image
,然后再继续。 我怎么做?
并请让我知道如果有另一种更好的方式来获得图像的宽度和高度。
我使用ASP.NET MVC和我已经是上传文件的操作。 该文件被正确上传。 但我想图像的宽度和高度。 我想我需要的转换HttpPostedFileBase
到Image
,然后再继续。 我怎么做?
并请让我知道如果有另一种更好的方式来获得图像的宽度和高度。
我用Image.FromStream
到如下:
Image.FromStream(httpPostedFileBase.InputStream, true, true)
注意,返回的Image
是IDisposable
。
你需要一个参考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
是要扩展到新的位图的原始图像的矩形(你需要手动宽高比处理)。 捕捉块是典型IDisposable
构造内使用; 您维护新的所有权IDisposable
对象时,它返回到(您可能需要文档与代码注释)。
不幸的是,默认的“保存为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);
}
如果你是肯定的,来源是图像,不需要编辑,你可以描述很容易地做到这这里
[HttpPost]
public void Index(HttpPostedFileBase file)
{
if (file.ContentLength > 0)
{
var filename = Path.GetFileName(file.FileName);
System.Drawing.Image sourceimage =
System.Drawing.Image.FromStream(file.InputStream);
}
}
为了确保该文件是图像,添加JavaScript验证通过添加接受MIME类型属性输入标签查看
<input type="file" accept="image/*">
和jQuery验证脚本
$.validator.addMethod('accept', function () { return true; });
整个解决方案,可以发现这里