欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

如何在ASP.NET Core中给上传图片功能添加水印实例代码

程序员文章站 2022-03-21 13:57:45
前言 因某些原因需要在图片上添加文字水印、图片水印,所以这里做个简单的记录。下面话不多说了,来一起看看详细的实现过程吧 实现方法: 在传统的.net框架中,我们给图片...

前言

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

实现方法:

在传统的.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进行测试。

如何在ASP.NET Core中给上传图片功能添加水印实例代码

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

如何在ASP.NET Core中给上传图片功能添加水印实例代码

总结

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