你怎么一个HttpPostedFileBase转换为图像?(How do you convert a

2019-06-26 15:28发布

我使用ASP.NET MVC和我已经是上传文件的操作。 该文件被正确上传。 但我想图像的宽度和高度。 我想我需要的转换HttpPostedFileBaseImage ,然后再继续。 我怎么做?

并请让我知道如果有另一种更好的方式来获得图像的宽度和高度。

Answer 1:

我用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是要扩展到新的位图的原始图像的矩形(你需要手动宽高比处理)。 捕捉块是典型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);
}


Answer 2:

如果你是肯定的,来源是图像,不需要编辑,你可以描述很容易地做到这这里

[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; });

整个解决方案,可以发现这里



文章来源: How do you convert a HttpPostedFileBase to an Image?