C# 为什么';生成的水印图像比原始图像大很多?

C# 为什么';生成的水印图像比原始图像大很多?,c#,vb.net,image,watermark,drawimage,C#,Vb.net,Image,Watermark,Drawimage,我使用下面的代码生成带水印的图像,问题是,生成的文件总是比原始文件大,即使生成的文件的尺寸更小,例如: original.jpg(1920*1440)=1.11MB generated.jpg(960*720)=1.77MB 我错过什么了吗 C#: VB: JPEG格式有一个质量因子。您可以定义结果图像的压缩量。压缩得越多,质量就越差。您可以在Save方法中设置质量级别 请看下面的示例: 不同质量级别的示例可在此处找到:JPEG格式有一个质量因子。您可以定义结果图像的压缩量。压缩得越多,质量就

我使用下面的代码生成带水印的图像,问题是,生成的文件总是比原始文件大,即使生成的文件的尺寸更小,例如:

original.jpg(1920*1440)=1.11MB

generated.jpg(960*720)=1.77MB

我错过什么了吗

C#:

VB:


JPEG格式有一个质量因子。您可以定义结果图像的压缩量。压缩得越多,质量就越差。您可以在
Save
方法中设置质量级别

请看下面的示例:


不同质量级别的示例可在此处找到:

JPEG格式有一个质量因子。您可以定义结果图像的压缩量。压缩得越多,质量就越差。您可以在
Save
方法中设置质量级别

请看下面的示例:


不同质量等级的样品可在此处找到:

您需要指定质量,例如:

var jpgEncoder = GetEncoder(ImageFormat.Jpeg);
var jpgParameters = new EncoderParameters(1);
jpgParameters.Param[0] = new EncoderParameter(Encoder.Quality, 80L);
indexedImage.Save(target + "\\" + NewName, jpgEncoder, jpgParameters);
使用这种方法:

private ImageCodecInfo GetEncoder(ImageFormat format)
{
    ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();

    foreach (ImageCodecInfo codec in codecs)
    {
        if (codec.FormatID == format.Guid)
            return codec;
    }
    return null;
}

您需要指定质量,例如:

var jpgEncoder = GetEncoder(ImageFormat.Jpeg);
var jpgParameters = new EncoderParameters(1);
jpgParameters.Param[0] = new EncoderParameter(Encoder.Quality, 80L);
indexedImage.Save(target + "\\" + NewName, jpgEncoder, jpgParameters);
使用这种方法:

private ImageCodecInfo GetEncoder(ImageFormat format)
{
    ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();

    foreach (ImageCodecInfo codec in codecs)
    {
        if (codec.FormatID == format.Guid)
            return codec;
    }
    return null;
}

我添加了:
g.InterpolationMode=InterpolationMode.Low
大小还是一样的,1.77MB!我添加了:
g.InterpolationMode=InterpolationMode.Low
大小还是一样的,1.77MB@费罗:这实际上超出了我的“生产代码”,但谢谢;-)。您应该始终在回答中包含代码的关键部分,因为“链接可能会消失”…@fero:这实际上超出了我的“生产代码”,但谢谢;-)。你应该在回答中包含代码的关键部分,因为“链接可能会消失”。。。