当前位置:首页 > 行业动态 > 正文

如何在C中为网站指定位置的特定格式图片添加水印?

### C#实现站点指定位置图片加水印:该程序用C#编写,能在站点指定位置对特定格式图片添加水印,通过操作图像文件达成。

在C#中,给站点指定位置的某种格式的图片添加水印可以通过以下步骤实现:

准备工作

确保你已经安装了必要的库,对于图像处理,System.Drawing命名空间提供了基本的功能,如果你使用的是.NET Core或.NET 5+,可能需要安装System.Drawing.Common包。

dotnet add package System.Drawing.Common

加载图片

使用Image.FromFile方法加载指定位置的图片。

using System;
using System.Drawing;
public class ImageWatermarking
{
    public static void Main(string[] args)
    {
        string imagePath = "path/to/your/image.jpg"; // 替换为实际图片路径
        Image originalImage = Image.FromFile(imagePath);
    }
}

创建水印文字或图像

你可以创建一个包含水印文字的Bitmap对象,或者直接使用另一个图像作为水印。

文字水印示例:

public static Bitmap CreateTextWatermark(string text, Font font, Color textColor)
{
    Size textSize = TextRenderer.MeasureText(text, font).ToSize();
    Bitmap watermark = new Bitmap(textSize.Width, textSize.Height);
    using (Graphics g = Graphics.FromImage(watermark))
    {
        g.Clear(Color.Transparent);
        g.DrawString(text, font, new SolidBrush(textColor), 0, 0);
    }
    return watermark;
}

图像水印示例:

public static Bitmap CreateImageWatermark(Image watermarkImage)
{
    return new Bitmap(watermarkImage);
}

将水印添加到原始图片上

使用Graphics对象的DrawImage方法将水印绘制到原始图片上。

public static Image AddWatermarkToImage(Image originalImage, Bitmap watermark, Point location)
{
    using (Graphics g = Graphics.FromImage(new Bitmap(originalImage)))
    {
        // 设置水印透明度
        float[][] blendValues = { new float[] { 0f, 0f, 0f, 0.5f }, new float[] { 1f, 1f, 1f, 1f } };
        ColorMap[] colorMap = { new ColorMap(0, Blend.PositionZero), new ColorMap(1, Blend.PositionOne) };
        ImageAttributes attributes = new ImageAttributes();
        attributes.SetRemapTable(new ColorMap[blendValues.GetLength(0)] { new ColorMap(colorMap) });
        // 绘制水印
        g.DrawImage(watermark, location, 0, 0, watermark.Width, watermark.Height, Unity, null, attributes);
    }
    return new Bitmap(originalImage);
}

保存带水印的图片

将带有水印的图片保存到指定位置。

public static void SaveWatermarkedImage(Image watermarkedImage, string outputPath)
{
    watermarkedImage.Save(outputPath);
}

完整示例代码

以下是一个完整的示例代码,将文字水印添加到图片上并保存。

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Text;
using System.IO;
public class ImageWatermarking
{
    public static void Main(string[] args)
    {
        string imagePath = "path/to/your/image.jpg"; // 替换为实际图片路径
        string outputPath = "path/to/save/watermarked_image.jpg"; // 替换为输出图片路径
        string watermarkText = "Sample Watermark";
        Font watermarkFont = new Font("Arial", 24, FontStyle.Bold);
        Color watermarkColor = Color.White;
        Point watermarkLocation = new Point(10, 10); // 水印位置
        Image originalImage = Image.FromFile(imagePath);
        Bitmap watermark = CreateTextWatermark(watermarkText, watermarkFont, watermarkColor);
        Image watermarkedImage = AddWatermarkToImage(originalImage, watermark, watermarkLocation);
        SaveWatermarkedImage(watermarkedImage, outputPath);
    }
    public static Bitmap CreateTextWatermark(string text, Font font, Color textColor)
    {
        Size textSize = TextRenderer.MeasureText(text, font).ToSize();
        Bitmap watermark = new Bitmap(textSize.Width, textSize.Height);
        using (Graphics g = Graphics.FromImage(watermark))
        {
            g.Clear(Color.Transparent);
            g.DrawString(text, font, new SolidBrush(textColor), 0, 0);
        }
        return watermark;
    }
    public static Image AddWatermarkToImage(Image originalImage, Bitmap watermark, Point location)
    {
        using (Graphics g = Graphics.FromImage(new Bitmap(originalImage)))
        {
            float[][] blendValues = { new float[] { 0f, 0f, 0f, 0.5f }, new float[] { 1f, 1f, 1f, 1f } };
            ColorMap[] colorMap = { new ColorMap(0, Blend.PositionZero), new ColorMap(1, Blend.PositionOne) };
            ImageAttributes attributes = new ImageAttributes();
            attributes.SetRemapTable(new ColorMap[blendValues.GetLength(0)] { new ColorMap(colorMap) });
            g.DrawImage(watermark, location, 0, 0, watermark.Width, watermark.Height, Unity, null, attributes);
        }
        return new Bitmap(originalImage);
    }
    public static void SaveWatermarkedImage(Image watermarkedImage, string outputPath)
    {
        watermarkedImage.Save(outputPath);
    }
}

FAQs

Q1: 如果我想调整水印的透明度,应该怎么做?

A1: 你可以通过修改AddWatermarkToImage方法中的blendValues数组来调整透明度,将0.5f改为0.3f会使水印更透明。

Q2: 如何添加图像作为水印而不是文字?

A2: 只需将CreateTextWatermark方法替换为CreateImageWatermark方法,并传递一个Image对象作为参数即可。

小编有话说

通过上述步骤,你可以轻松地在C#中为图片添加水印,无论是文字还是图像水印,都可以通过调整参数和位置来满足不同的需求,希望这篇教程对你有所帮助!

0