Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以在WebImage类中设置jpeg图像的压缩级别?_C#_Asp.net Mvc_Image Uploading - Fatal编程技术网

C# 是否可以在WebImage类中设置jpeg图像的压缩级别?

C# 是否可以在WebImage类中设置jpeg图像的压缩级别?,c#,asp.net-mvc,image-uploading,C#,Asp.net Mvc,Image Uploading,是否可以在WebImage类中设置jpeg图像的压缩级别?或者我必须为此使用图像类吗?您必须先使用图像来压缩它。压缩后,您可以在WebImage上使用此功能 下面是一个示例,我将base64转换为图像,但尝试理解压缩逻辑(80L是压缩级别): 专用ImageCodeInfo GetEncoder(ImageFormat格式) { ImageCodecInfo[]codecs=ImageCodecInfo.GetImageDecoders() 您可以将流保存在WebImage(流)中看起来不像你必

是否可以在
WebImage
类中设置jpeg图像的压缩级别?或者我必须为此使用
图像
类吗?

您必须先使用图像来压缩它。压缩后,您可以在WebImage上使用此功能

下面是一个示例,我将base64转换为图像,但尝试理解压缩逻辑(80L是压缩级别):

专用ImageCodeInfo GetEncoder(ImageFormat格式) { ImageCodecInfo[]codecs=ImageCodecInfo.GetImageDecoders()


您可以将流保存在WebImage(流)中

看起来不像你必须使用
Image
如果你足够关心它,你可以打开一个pull请求来实现它!不……这没那么重要。我只是问了一下,因为用
WebImage
类重新命名、调整大小并将上传图像转换为jpeg的代码量/大小比用类短得多e> Image
类。唯一的缺点是我找不到一种方法来设置图像的压缩级别。我想我将不得不使用
Image
类。但是如果我这样做,我最终将使用两倍于我在内存中使用流两倍的内存。或者我错了吗?如果我理解正确,那么我会这样做使用
Image
类进行压缩,其余使用
WebImage
进行压缩?在本例中,MemoryStream用作管理映像流的工具。如果尝试使用相同的MemoryStream管理流,可能会出错。您可以使用Image或WebImage,但需要使用“中间件”进行压缩。
public MemoryStream Base64ToJpeg(string imgFoto)
{
    Image imagemASerAjustada = null;
    Bitmap bmpTemporario = null;
    MemoryStream imagemCompactadaStream = new MemoryStream();
    EncoderParameters myEncoderParameters = new EncoderParameters(1);
    try
    {
        // removemos o cabeçalho a respeito do tipo da imagem
        string base64 = imgFoto.Substring(imgFoto.IndexOf(',') + 1);
        base64 = base64.Trim('\0');
        // convertemos em um array de bytes
        byte[] img = Convert.FromBase64String(base64);

        // transformamos a base64 em imagem
        imagemASerAjustada = Image.FromStream(new MemoryStream(img));
        // convertemos a imagem em Bitmap
        bmpTemporario = new Bitmap(imagemASerAjustada, new Size(140, 140));
        ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
        // Create an EncoderParameters object.
        // An EncoderParameters object has an array of EncoderParameter
        // objects. In this case, there is only one
        // EncoderParameter object in the array.
        Encoder myEncoder = Encoder.Quality;
        using (EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 80L))
        { 
            myEncoderParameters.Param[0] = myEncoderParameter;
            bmpTemporario.Save(imagemCompactadaStream, jpgEncoder, myEncoderParameters);
        }
        return imagemCompactadaStream;
    }
    catch
    {
        throw;
    }
    finally
    {
        if (imagemCompactadaStream.Length > 0)
        { 
            imagemASerAjustada.Dispose();
            bmpTemporario.Dispose();
            myEncoderParameters.Dispose();
        }
    }
}
    foreach (ImageCodecInfo codec in codecs)
    {
        if (codec.FormatID == format.Guid)
        {
            return codec;
        }
    }
    return null;
}