你如何将HttpPostedFileBase转换为图像?

Abd*_*med 46 image httppostedfilebase asp.net-mvc-file-upload

我正在使用ASP.NET MVC,我有一个上传文件的动作.该文件正在正确上载.但我想要图像的宽度和高度.我想我需要将其转换HttpPostedFileBaseImage第一个然后继续.我怎么做?

如果有另一种更好的方法来获得图像的宽度和高度,请告诉我.

Eam*_*nne 98

我用Image.FromStream如下:

Image.FromStream(httpPostedFileBase.InputStream, true, true)
Run Code Online (Sandbox Code Playgroud)

请注意,返回的ImageIDisposable.

您需要一个引用才能System.Drawing.dll使其工作,并且ImageSystem.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;
}
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)


And*_*643 6

如果您确定源是图像而不需要编辑,则可以按照此处的说明轻松完成

[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);
    }
}
Run Code Online (Sandbox Code Playgroud)

要保护文件是图像,请通过将MIME类型的accept属性添加到输入标记来向View添加javascript验证

<input type="file" accept="image/*">
Run Code Online (Sandbox Code Playgroud)

和jQuery验证脚本

$.validator.addMethod('accept', function () { return true; });
Run Code Online (Sandbox Code Playgroud)

整个解决方案可以在这里找到