繁体   English   中英

压缩图像大小并返回图像c#

[英]Compress Image size and return image c#

我正在做一个传递图像的函数,它将压缩图像并返回该图像对象。 以下是我的代码:

public Image CompressImage(Image img)
{
    ImageCodecInfo jpegCodec = null;
    EncoderParameter imageQualitysParameter = new EncoderParameter(
                System.Drawing.Imaging.Encoder.Quality, 50L);
    ImageCodecInfo[] alleCodecs = ImageCodecInfo.GetImageEncoders();

    EncoderParameters codecParameter = new EncoderParameters(1);
    codecParameter.Param[0] = imageQualitysParameter;
    for (int i = 0; i < alleCodecs.Length; i++)
    {
        if (alleCodecs[i].MimeType == "image/jpeg")
        {
            jpegCodec = alleCodecs[i];
            break;
        }
    }
    Image img1;
    using (Stream memory = new MemoryStream())
    {
        img.Save(memory, jpegCodec, codecParameter);
        img1 = Image.FromStream(memory);
        memory.Close();
        memory.Dispose();
    }
    return img1;
}

但是当我将其保存在内存流中时,它显示错误

EnexolImageConversionApp.exe中发生了'System.ArgumentException'类型的未处理异常

附加信息:参数无效。

在线

img.Save(memory, jpegCodec, codecParameter);

试试这个代码-它选择合适ImageCodecInfo通过比较ImageFormat.GuidImageCodecInfo.FormatID

    using System.Drawing.Imaging;
    using System.IO;

    public static byte[] SaveImageToByteArray(Image image, int jpegQuality = 90)
    {
        using (var ms = new MemoryStream())
        {
            var jpegEncoder = GetEncoder(ImageFormat.Jpeg);
            var encoderParameters = new EncoderParameters(1);
            encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, (long)jpegQuality);
            image.Save(ms, jpegEncoder, encoderParameters);
            return ms.ToArray();
        }
    }

    private static ImageCodecInfo GetEncoder(ImageFormat format)
    {
        var codecs = ImageCodecInfo.GetImageDecoders();
        foreach (ImageCodecInfo codec in codecs)
        {
            if (codec.FormatID == format.Guid)
            {
                return codec;
            }
        }

        return null;
    }

最后一步将是从接收到的字节数组中再次加载图像。 为了更好地理解问题,请提供异常详细信息,包括stacktrace。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM