.net core 给图片流加水印

第一步肯定是要引入包啦, 站在巨人的肩膀上最舒服了.

System.Drawing.Common 这个这个.

我是直接在控制器里面操作的, 然后再转成流上传到OSS;

但是有一些方法可能会提示 仅能在windowns上使用(结果真的也是发布到linux确实不能用);

流程是这样的: 首先前端上传图片,以流的形式, 先把流转成图片, 加水印, 完了以后再把图片转成流, 然后上传到OSS(这一步这里没有, 但是简单阿里有给例子)

   if (input.File.ContentType.Contains("image"))
            {
                using (var stream = new MemoryStream())
                {
                    await input.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, 18, FontStyle.Italic, GraphicsUnit.Pixel);
                            var color = Color.FromArgb(0, 255, 0, 0);
                            var brush = new SolidBrush(Color.FromArgb(50, 100, 100, 100));
                            //graphic.RotateTransform(-45);
                            DrawTextOnImage(graphic, "  我是水印", font, brush, -500, 180, 100, img.Size);
                            img.Save(memoryStream, ImageFormat.Png);
                            await watermarkedStream.CopyToAsync(memoryStream);
                            graphic.Dispose();
                        }
                    }
                }
            }
            else
            {
                await input.File.CopyToAsync(memoryStream);
            }

调整水印的数量样式等等

  /// <summary>
        /// 生产水印
        /// </summary>
        /// <param name="grPhoto">水印图片</param>
        /// <param name="strText">水印文字</param>
        /// <param name="font">字体</param>
        /// <param name="brush">笔刷(字体颜色)</param>
        /// <param name="xStartPos">起始位置</param>
        /// <param name="xSpace">x空位</param>
        /// <param name="ySpace">y空位</param>
        /// <param name="imageSize">原始图片</param>
        private void DrawTextOnImage(Graphics grPhoto, string strText, Font font, Brush brush, int xStartPos, int xSpace, int ySpace, Size imageSize)
        {
            using var strFormat = new StringFormat();
            strFormat.Alignment = StringAlignment.Center;
            grPhoto.RotateTransform(-30);
            for (float y = xStartPos; y < imageSize.Height * 1.5; y += ySpace)
            {
                var ypos = y;
                for (float x = xStartPos; x <= imageSize.Width * 1.5; x += xSpace)
                {
                    var xpos = x;
                    grPhoto.DrawString(strText, //string of text
                        font, //font
                        brush, //Brush
                        xpos, ypos, //position
                        strFormat);
                }
            }
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值