C#给图片加水印的简单实现方法

下面给您详细讲解“C#给图片加水印的简单实现方法”的完整攻略。

1.安装必要的开发环境

为了进行本文的演示,我们需要安装Visual Studio开发环境、.NET框架和C#语言工具。

2.新建C#控制台应用程序项目

打开Visual Studio,点击菜单栏的“文件”-“新建”-“项目”,在弹出的对话框中选择“控制台应用程序”项目,起一个项目名称并确定,然后在“程序.cs”文件中编写代码。

3.引入相关的命名空间

我们需要引入以下的命名空间:

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

4.加载原图像

首先,我们需要加载一张图片,并得到该图片的宽度和高度:

Bitmap bmp = new Bitmap("原图像的路径");
int width = bmp.Width;
int height = bmp.Height;

5.创建用于绘制文字的画刷和字体

下面我们需要创建一个用于绘制文字的画刷:

SolidBrush brush = new SolidBrush(Color.Black);

然后,我们需要创建一个字体对象:

Font font = new Font("Arial", 18);

注意字体的名称和大小可以根据实际情况进行设置。

6.绘制水印文字到图像上

在绘制水印之前,我们可以先对图片进行一些处理,比如压缩、裁剪等。接下来,我们将绘制水印文字到图片上:

Graphics graphics = Graphics.FromImage(bmp);
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.DrawString("水印文字", font, brush, new Point(width - 200, height - 50));
graphics.Save();

在这里,我们使用Graphics类的DrawString方法将水印文字绘制到图片的右下角位置,并调用Save方法将修改后的图片保存。

7.示例说明

以下是两个示例说明,分别是给多张图片添加文字水印和图片水印:

示例1:给多张图片添加文字水印

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

namespace Watermark
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] files = System.IO.Directory.GetFiles("图片目录的路径", "*.jpg");
            string savePath = "图片保存目录的路径";
            string watermarkText = "水印文字";
            Font font = new Font("微软雅黑", 18, FontStyle.Bold);
            SolidBrush brush = new SolidBrush(Color.FromArgb(128, 255, 255, 255));

            foreach (string file in files)
            {
                Image image = Image.FromFile(file);
                Graphics graphics = Graphics.FromImage(image);
                graphics.SmoothingMode = SmoothingMode.HighQuality;
                SizeF sizeF = graphics.MeasureString(watermarkText, font);
                graphics.DrawString(watermarkText, font, brush, new PointF(image.Width - sizeF.Width - 10, image.Height - sizeF.Height - 10));
                image.Save(savePath + "\\" + System.IO.Path.GetFileName(file));
            }
        }
    }
}

示例2:给多张图片添加图片水印

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

namespace Watermark
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] files = System.IO.Directory.GetFiles("图片目录的路径", "*.jpg");
            string savePath = "图片保存目录的路径";
            Random random = new Random();

            foreach (string file in files)
            {
                Image image = Image.FromFile(file);
                Image watermark = Image.FromFile(@"图片水印的路径");
                Graphics graphics = Graphics.FromImage(image);
                graphics.SmoothingMode = SmoothingMode.HighQuality;
                int x = random.Next(image.Width - watermark.Width);
                int y = random.Next(image.Height - watermark.Height);
                graphics.DrawImage(watermark, new Rectangle(x, y, watermark.Width, watermark.Height), 0, 0, watermark.Width, watermark.Height, GraphicsUnit.Pixel);
                image.Save(savePath + "\\" + System.IO.Path.GetFileName(file));
            }
        }
    }
}

以上就是C#给图片加水印的简单实现方法的完整攻略,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#给图片加水印的简单实现方法 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • C#类继承中构造函数的执行序列示例详解

    以下是“C#类继承中构造函数的执行序列示例详解”的完整攻略。 1. 构造函数的执行序列 在C#中,当一个派生类(子类)的对象被创建时,其继承树上所有基类(父类)中的构造函数也会被调用。构造函数的调用顺序如下: 调用基类的构造函数 执行派生类自身的构造函数 下面通过示例来详细讲解: public class BaseClass { public BaseCla…

    C# 2023年6月7日
    00
  • C#中怎样从指定字符串中查找并替换字符串?

    在C#中,我们可以使用Replace方法来查找和替换指定字符串中的内容。它的语法结构如下所示: string.Replace(string oldValue, string newValue); 其中,oldValue参数是要查找并替换的旧字符串值,newValue参数是要替换成的新字符串值。 以下是一个示例,我们希望将字符串中的”hello”替换为”hi”…

    C# 2023年6月6日
    00
  • 解决import包时报 Java 程序包不存在的问题

    在Java开发中,我们经常需要引入其他包中的类或接口。但有时候在import包时会出现Java程序包不存在的问题。以下是解决import包时报Java程序包不存在的问题的完整攻略。 环境准备 在解决import包时报Java程序包不存在的问题前,需要确保以下环境已经准备好: JDK已经安装并配置好了环境变量。 项目中已经添加了需要引入的包的依赖。 解决imp…

    C# 2023年5月15日
    00
  • C#实现对象的序列化和反序列化

    C#实现对象的序列化和反序列化 在C#中,我们可以使用对象的序列化和反序列化将对象转换为字节流,并将其保存到文件中或发送到网络。在本文中,我们将介绍如何使用C#实现对象的序列化和反序列化。 什么是对象序列化? 序列化是指将一个对象转换为字节流的过程。序列化后的对象可以保存在文件中或通过网络发送。当我们需要在不同的应用程序或服务器之间传输数据时,序列化是一种非…

    C# 2023年5月31日
    00
  • WCF中使用nettcp协议进行通讯的方法

    下面是关于“WCF中使用nettcp协议进行通讯的方法”的完整攻略,包含两个示例。 1. 什么是nettcp协议 nettcp协议是一种用于WCF通信的传输协议。nettcp协议是一种高性能、可靠的协议,适用于在同一局域网内的通信。nettcp协议使用二进制编码,可以提高通信效率。 2. 配置WCF服务使用nettcp协议 以下是配置WCF服务使用nettc…

    C# 2023年5月15日
    00
  • C# TextWriter.Flush – 刷新文本编写器

    C#中的TextWriter类是一个抽象类,它定义了一组用于向文本流进行写入的方法和属性。其中Flush方法是一个用于清空缓冲区的方法,该方法会将缓冲区的所有数据立即写入到流中,确保数据已经被完全输出。 Flush方法的使用方法 Flush方法的使用方法非常简单,只需要调用Flush方法即可。示例代码如下: using System; using Syste…

    C# 2023年4月19日
    00
  • C# 中的”智能枚举”之如何在枚举中增加行为(示例代码)

    在 C# 中的智能枚举是指使用 C# 的枚举类型 Enum,通过使用扩展方法,在枚举类型中增加行为方法,从而提高代码的可读性和可维护性。下面我们来详细讲解如何在枚举中增加行为。 1.枚举类型定义 在开始之前,我们先定义一个示例的枚举类型,如下所示: public enum LanguageType { [Description("C#")…

    C# 2023年6月6日
    00
  • 利用C#编写一个Windows服务程序的方法详解

    Title: 利用C#编写一个Windows服务程序的方法详解 介绍 Windows服务是在后台运行的程序,可以在计算机启动时自动启动,不需要用户登陆即可运行。本文将详细讲解如何利用C#编写一个Windows服务程序。 步骤 1.创建Windows服务项目 打开Microsoft Visual Studio,选择“新建项目”,在左侧菜单中选择“Visual.…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部