如何在C中为网站指定位置的特定格式图片添加水印?
- 行业动态
- 2025-01-27
- 1
### 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#中为图片添加水印,无论是文字还是图像水印,都可以通过调整参数和位置来满足不同的需求,希望这篇教程对你有所帮助!
本站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本站,有问题联系侵删!
本文链接:https://www.xixizhuji.com/fuzhu/127388.html