C# 图像缩小总是会向我的图像添加 Photoshop 不会的伪影

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

这里有很多关于缩小图像大小的代码的帖子,但是对于所有这些帖子,我都遇到了这个人工制品问题,而在 Photoshop 中手动执行此操作时却没有遇到这种问题。

我还能做些什么来解决这个问题吗?我注意到,从 Photoshop 导出位图时,我可以使导出“渐进式”,是否有类似的东西可以在 C# 中有所帮助?

Photoshop 将 1080p 缩小为 480p:

从 SO 的大小调整为 1080p 到 480p:

图像的其余部分类似,但这里的衣领是我的代码收到的噪音的一个很好的例子。

我目前的功能:

public static Bitmap ResizeImage(Image image, int width, int height)
        {

                
                var destRect = new System.Drawing.Rectangle(0, 0, width, height);
                var destImage = new System.Drawing.Bitmap(width, height);

                destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);

                using (var graphics = System.Drawing.Graphics.FromImage(destImage))
                {
                    graphics.CompositingMode = CompositingMode.SourceCopy;
                    graphics.CompositingQuality = CompositingQuality.HighQuality;
                    graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                    graphics.SmoothingMode = SmoothingMode.HighQuality;
                    graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;

                    using (var wrapMode = new System.Drawing.Imaging.ImageAttributes())
                    {
                        wrapMode.SetWrapMode(WrapMode.TileFlipXY);
                        graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, System.Drawing.GraphicsUnit.Pixel, wrapMode);
                    }
                }

                return destImage;

        }

以下是1920x1080的原图供参考:

c# image-processing scaling image-resizing
1个回答
0
投票

第二张图片看起来有相当严重的jpeg 伪影。这通常可以从高对比度边缘附近的大量噪声中明显看出。

Photoshop 可能还使用更高级的缩小滤镜,但其效果应该只影响边缘或其他高频特征,并且差异应该比示例图像中的大量噪点微妙得多。

请参阅如何设置 jpeg 压缩级别,以控制保存图像时应用的压缩量,从而控制噪声量:

        var jpgEncoder = GetEncoder(ImageFormat.Jpeg);  
        var myEncoderParameters = new EncoderParameters(1);    
        myEncoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 95L);  
        myBitmap.Save(myFilePath, jpgEncoder, myEncoderParameters);

请注意,不同的 jpeg 编码器库可能会产生略有不同的结果。内置编码器应该“足够好”,但有第三方库声称质量/文件大小稍好。另请注意,jpeg 格式本身确实很旧,因此,如果您更关心质量/大小而不是兼容性,那么肯定有更好的格式可供选择。

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