【问题标题】:set watermark on an image with high quality在高质量的图像上设置水印
【发布时间】:2021-01-22 08:26:10
【问题描述】:

我有一个在图像上设置水印的处理程序。问题是质量不是很好。 代码如下:

    byte[] imageBytes = null;

    using (Graphics G = Graphics.FromImage(ImageToWatermark))
    {
        using (ImageAttributes IA = new ImageAttributes())
        {
            ColorMatrix CM = new ColorMatrix();
            CM.Matrix33 = Opacity;
            IA.SetColorMatrix(CM);
            G.DrawImage(Watermark, new Rectangle(WatermarkPosition, Watermark.Size), 0, 0, Watermark.Width, Watermark.Height, GraphicsUnit.Pixel, IA);
        }
    }

    using (MemoryStream memoryStream = new MemoryStream())
    {
        ImageToWatermark.Save(memoryStream, GetImageFormat(context.Request.PhysicalPath));
        imageBytes = memoryStream.ToArray();
    }

如何设置结果的质量?

【问题讨论】:

  • “质量不太好”是什么意思?
  • .jpg 质量低(像素化)。

标签: c# asp.net


【解决方案1】:

如果您的图像格式是 Jpeg,那么您可以使用此示例方法手动设置输出质量以保存到磁盘:

    public void SaveJpg(string path, Bitmap img, long quality) {
        // Encoder parameter for image quality
        EncoderParameter qualityParam = new EncoderParameter(Encoder.Quality, quality);

        // Jpeg image codec
        ImageCodecInfo jpegCodec = this.getEncoderInfo("image/jpeg");

        EncoderParameters encoderParams = new EncoderParameters(1);
        encoderParams.Param[0] = qualityParam;

        img.Save(path, jpegCodec, encoderParams);
    }

或者,在您的情况下,使用以下代码:

using (MemoryStream memoryStream = new MemoryStream())
    {
        EncoderParameter qualityParam = new EncoderParameter(Encoder.Quality, 80); // edit image quality here
        ImageCodecInfo jpegCodec = this.getEncoderInfo("image/jpeg");
        EncoderParameters encoderParams = new EncoderParameters(1);
        encoderParams.Param[0] = qualityParam;

        ImageToWatermark.Save(memoryStream, encoderParams);
        imageBytes = memoryStream.ToArray();
    }

一般来说,60 到 100 的质量应该会产生足够好的 Jpeg 图像用于屏幕输出。

【讨论】:

  • 我没有将结果图像保存在我的服务器上,而是在运行时创建带有水印的图像。
  • @Coderock.net 可能这就是解决方案。保存不仅保存在磁盘上,还保存在流上。试试这个,或者类似的。
猜你喜欢
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多