1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
      <output id="hzk7v"></output>
    2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
    3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>

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

       更新时间2019年02月20日 10:10:06   作者张子浩   我要评论

      这篇文章主要给大家介绍了关于如何在ASP.NET Core中给上传图片功能添加水印的相关资料文中通过示例代码介绍的非常详细对大家的学习或者工作具有一定的参考学习价值需要的朋友们下面来一起学习学习吧

      前言

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

      实现方法

      在传统的.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添加水印的代码可以这么?#30784;?/p>

      // 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要是你参数的名称然后图片最后?#32479;?#20102;这个样?#21360;?/p>

      总结

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

      相关文章

      最新评论

      3dԻв

        1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
          <output id="hzk7v"></output>
        2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
        3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>

            1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
              <output id="hzk7v"></output>
            2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
            3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>