在ASP.NET Core中给上传图片功能添加水印
程序员文章站
2022-04-28 12:42:39
在传统的.NET框架中,我们给图片添加水印有的是通过HttpModules或者是HttpHandler,然后可以通过以下代码添加水印: 但是在.NET Core中不允许你这么干了,因为没有WebImage这个类型了。在现在的.NET Core中我们都是通过IFormFile来上传文件,这包含了很多格 ......
在传统的.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要是你参数的名称,然后图片最后就成了这个样子。