在传统的.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来上传文件,这包含了不少格式,那咱们试一下吧。async
首先咱们必定要知道,咱们要把图片保存到什么地方,咱们在.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多个。也就是画画~this
其中的完整代码以下:spa
[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要是你参数的名称,而后图片最后就成了这个样子。code