前言

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

实现方法:

在传统的.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要是你参数的名称,然后图片最后就成了这个样子。

总结

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