1

我有以下代码行,它将我的HttpPostedFileBase并将其转换为图像。

我弄乱了编码器参数以尝试调整图像大小,但似乎无法做到这一点。

将图像大小调整为 250x250 的最佳方法是什么?

我也希望它把图像的中间作为 250x250 矩形而不是随机的某个地方。

什么是最节省空间的方式来转换和保存图像,因为它将进入数据库?

请注意,model.Image它的类型是HttpPostedFileBase.

var image = Image.FromStream(model.Image.InputStream, true, true);

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)50);

    //quality should be in the range [0..100]
    using (var ms = new MemoryStream())
    {
        // Convert Image to byte[]
        image.Save(ms, ImageFormat.Jpeg);
        byte[] imageBytes = ms.ToArray();

        // Convert byte[] to Base64 String
        string base64String = Convert.ToBase64String(imageBytes);
        image64 = base64String;
    }
}
4

1 回答 1

1

最好的方法是使用像ImageResizer这样已建立的库;这样,您就可以避免重新发明轮子。如果您担心空间效率(文件大小),请使用最大压缩的 JPEG 格式。请注意,使用 JPEG 的有损编码会大大降低图像质量。如果您想使用无损编码,请尝试 PNG。根据我的经验,在 .NET 中压缩 PNG 图像非常困难。我前一阵子徒劳地搜索了一个可以做到这一点的库,但我发现的只是胖客户端 Windows 应用程序。

于 2014-03-14T16:02:13.600 回答