如何在ASP.NET Core中实现给上传的图片添加水印功能?

2026-04-01 11:401阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1038个文字,预计阅读时间需要5分钟。

如何在ASP.NET Core中实现给上传的图片添加水印功能?

前言:因某些原因需要在对图片上进行文字水印、图片水印,这里做一个简单的记录。下面不多说,一起来看看详细的实现过程吧!

实现方法:在传统的.NET框架中,我们可以给图片添加文字水印和图片水印。

1. 使用System.Drawing命名空间中的Graphics类和Image类来实现。

2. 首先,创建一个Image对象,加载你想要添加水印的图片。

3. 创建一个Graphics对象,将Image对象作为参数传递给它。

4. 使用Graphics对象的DrawString方法来添加文字水印。

5. 使用Graphics对象的DrawImage方法来添加图片水印。

具体代码如下:

csharpusing System;using System.Drawing;

public class Watermark{ public static void Main() { // 加载原始图片 Image originalImage=Image.FromFile(path_to_your_image.jpg);

// 创建新的图片对象,大小为原始图片加上水印大小 Image watermarkImage=new Bitmap(originalImage.Width + 100, originalImage.Height + 100);

// 创建Graphics对象 using (Graphics graphics=Graphics.FromImage(watermarkImage)) { // 将原始图片绘制到水印图片的指定位置 graphics.DrawImage(originalImage, 0, 0);

如何在ASP.NET Core中实现给上传的图片添加水印功能?

// 设置文字水印 using (Font font=new Font(Arial, 20)) { graphics.DrawString(Watermark, font, Brushes.Red, new PointF(10, 10)); }

// 设置图片水印 using (Image watermarkImage2=Image.FromFile(path_to_watermark_image.png)) { graphics.DrawImage(watermarkImage2, new PointF(originalImage.Width + 10, 10)); } }

// 保存添加水印后的图片 watermarkImage.Save(path_to_save_watermarked_image.jpg); }}

以上代码实现了在图片上添加文字水印和图片水印的功能。你可以根据自己的需求修改代码,比如改变水印的位置、字体、颜色等。

前言

因某些原因需要在图片上添加文字水印、图片水印,所以这里做个简单的记录。下面话不多说了,来一起看看详细的实现过程吧

实现方法:

在传统的.NET框架中,我们给图片添加水印有的是通过HttpModules或者是HttpHandler,然后可以通过以下代码添加水印:

var image = new WebImage(imageBytes); image.AddTextWatermark( Settings.Instance.WatermarkText, "White", Settings.Instance.WatermarkFontSize, opacity: Settings.Instance.WatermarkTextOpacityPercentage );

但是在.NET Core中不允许你这么干了,因为没有WebImage这个类型了。在现在的.NET Core中我们都是通过IFormFile来上传文件,这包含了很多格式,那我们试一下吧。

首先我们一定要知道,我们要把图片保存到什么地方,我们在.NET Core中获取项目目录需要最基本的构造函数,如以下定义:

public readonly ILogger<ImageController> Logger = null; private IHostingEnvironment hostingEnv; public ImageController(ILogger<ImageController> logger,IHostingEnvironment env) { Logger = logger; this.hostingEnv = env; }

由于可以扩展使用下简单的日志框架,我们也可以把微软那套的日志框架给构造进来。.NET Core添加水印的代码可以这么写。

// Add watermark var watermarkedStream = new MemoryStream(); using (var img = Image.FromStream(stream)) { using (var graphic = Graphics.FromImage(img)) { var font = new Font(FontFamily.GenericSansSerif, 20, FontStyle.Bold, GraphicsUnit.Pixel); var color = Color.FromArgb(128, 255, 255, 255); var brush = new SolidBrush(color); var point = new Point(img.Width - 120, img.Height - 30); graphic.DrawString("cnblogs.com/zaranet", font, brush, point); img.Save(watermarkedStream, ImageFormat.Png); } img.Save(hostingEnv.WebRootPath+"/"+name); }

这里把传过来的内存流变成了Image也就是Bitmap,然后我们通过了graphic类的方法,变成了可修改的graphic类型,其中的方法大概有200多个。也就是画画~

其中的完整代码如下:

[HttpPost] public async Task<IActionResult> UploadImageAsync(IFormFile file) { try { if (null == file) { Logger.LogError("file is null."); return BadRequest(); } if (file.Length > 0) { var name = Path.GetFileName(file.FileName); if (name != null) { using (var stream = new MemoryStream()) { await file.CopyToAsync(stream); // Add watermark var watermarkedStream = new MemoryStream(); using (var img = Image.FromStream(stream)) { using (var graphic = Graphics.FromImage(img)) { var font = new Font(FontFamily.GenericSansSerif, 20, FontStyle.Bold, GraphicsUnit.Pixel); var color = Color.FromArgb(128, 255, 255, 255); var brush = new SolidBrush(color); var point = new Point(img.Width - 120, img.Height - 30); graphic.DrawString("cnblogs.com/zaranet", font, brush, point); img.Save(watermarkedStream, ImageFormat.Png); } img.Save(hostingEnv.WebRootPath+"/"+name); } return StatusCode(StatusCodes.Status200OK); } } } return BadRequest(); } catch (Exception e) { Logger.LogError(e, $"Error uploading image."); return StatusCode(StatusCodes.Status500InternalServerError); } }

最后,你可以使用PostMan进行测试。

Key要是你参数的名称,然后图片最后就成了这个样子。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对易盾网络的支持。

本文共计1038个文字,预计阅读时间需要5分钟。

如何在ASP.NET Core中实现给上传的图片添加水印功能?

前言:因某些原因需要在对图片上进行文字水印、图片水印,这里做一个简单的记录。下面不多说,一起来看看详细的实现过程吧!

实现方法:在传统的.NET框架中,我们可以给图片添加文字水印和图片水印。

1. 使用System.Drawing命名空间中的Graphics类和Image类来实现。

2. 首先,创建一个Image对象,加载你想要添加水印的图片。

3. 创建一个Graphics对象,将Image对象作为参数传递给它。

4. 使用Graphics对象的DrawString方法来添加文字水印。

5. 使用Graphics对象的DrawImage方法来添加图片水印。

具体代码如下:

csharpusing System;using System.Drawing;

public class Watermark{ public static void Main() { // 加载原始图片 Image originalImage=Image.FromFile(path_to_your_image.jpg);

// 创建新的图片对象,大小为原始图片加上水印大小 Image watermarkImage=new Bitmap(originalImage.Width + 100, originalImage.Height + 100);

// 创建Graphics对象 using (Graphics graphics=Graphics.FromImage(watermarkImage)) { // 将原始图片绘制到水印图片的指定位置 graphics.DrawImage(originalImage, 0, 0);

如何在ASP.NET Core中实现给上传的图片添加水印功能?

// 设置文字水印 using (Font font=new Font(Arial, 20)) { graphics.DrawString(Watermark, font, Brushes.Red, new PointF(10, 10)); }

// 设置图片水印 using (Image watermarkImage2=Image.FromFile(path_to_watermark_image.png)) { graphics.DrawImage(watermarkImage2, new PointF(originalImage.Width + 10, 10)); } }

// 保存添加水印后的图片 watermarkImage.Save(path_to_save_watermarked_image.jpg); }}

以上代码实现了在图片上添加文字水印和图片水印的功能。你可以根据自己的需求修改代码,比如改变水印的位置、字体、颜色等。

前言

因某些原因需要在图片上添加文字水印、图片水印,所以这里做个简单的记录。下面话不多说了,来一起看看详细的实现过程吧

实现方法:

在传统的.NET框架中,我们给图片添加水印有的是通过HttpModules或者是HttpHandler,然后可以通过以下代码添加水印:

var image = new WebImage(imageBytes); image.AddTextWatermark( Settings.Instance.WatermarkText, "White", Settings.Instance.WatermarkFontSize, opacity: Settings.Instance.WatermarkTextOpacityPercentage );

但是在.NET Core中不允许你这么干了,因为没有WebImage这个类型了。在现在的.NET Core中我们都是通过IFormFile来上传文件,这包含了很多格式,那我们试一下吧。

首先我们一定要知道,我们要把图片保存到什么地方,我们在.NET Core中获取项目目录需要最基本的构造函数,如以下定义:

public readonly ILogger<ImageController> Logger = null; private IHostingEnvironment hostingEnv; public ImageController(ILogger<ImageController> logger,IHostingEnvironment env) { Logger = logger; this.hostingEnv = env; }

由于可以扩展使用下简单的日志框架,我们也可以把微软那套的日志框架给构造进来。.NET Core添加水印的代码可以这么写。

// Add watermark var watermarkedStream = new MemoryStream(); using (var img = Image.FromStream(stream)) { using (var graphic = Graphics.FromImage(img)) { var font = new Font(FontFamily.GenericSansSerif, 20, FontStyle.Bold, GraphicsUnit.Pixel); var color = Color.FromArgb(128, 255, 255, 255); var brush = new SolidBrush(color); var point = new Point(img.Width - 120, img.Height - 30); graphic.DrawString("cnblogs.com/zaranet", font, brush, point); img.Save(watermarkedStream, ImageFormat.Png); } img.Save(hostingEnv.WebRootPath+"/"+name); }

这里把传过来的内存流变成了Image也就是Bitmap,然后我们通过了graphic类的方法,变成了可修改的graphic类型,其中的方法大概有200多个。也就是画画~

其中的完整代码如下:

[HttpPost] public async Task<IActionResult> UploadImageAsync(IFormFile file) { try { if (null == file) { Logger.LogError("file is null."); return BadRequest(); } if (file.Length > 0) { var name = Path.GetFileName(file.FileName); if (name != null) { using (var stream = new MemoryStream()) { await file.CopyToAsync(stream); // Add watermark var watermarkedStream = new MemoryStream(); using (var img = Image.FromStream(stream)) { using (var graphic = Graphics.FromImage(img)) { var font = new Font(FontFamily.GenericSansSerif, 20, FontStyle.Bold, GraphicsUnit.Pixel); var color = Color.FromArgb(128, 255, 255, 255); var brush = new SolidBrush(color); var point = new Point(img.Width - 120, img.Height - 30); graphic.DrawString("cnblogs.com/zaranet", font, brush, point); img.Save(watermarkedStream, ImageFormat.Png); } img.Save(hostingEnv.WebRootPath+"/"+name); } return StatusCode(StatusCodes.Status200OK); } } } return BadRequest(); } catch (Exception e) { Logger.LogError(e, $"Error uploading image."); return StatusCode(StatusCodes.Status500InternalServerError); } }

最后,你可以使用PostMan进行测试。

Key要是你参数的名称,然后图片最后就成了这个样子。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对易盾网络的支持。