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

问题描述 投票:0回答:1

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

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);
c# image compression image-size
1个回答
0
投票

试试这个代码 - 它通过比较ImageCodecInfoImageFormat.Guid选择合适的ImageCodecInfo.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;
    }

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

© www.soinside.com 2019 - 2024. All rights reserved.