首页 > 其他分享 >.NET Core中给上传图片的添加水印

.NET Core中给上传图片的添加水印

时间:2024-05-25 20:29:28浏览次数:25  
标签:Core image System 水印 file using NET Drawing

一.安装System.Drawing.Common库

工具->NuGet 包管理->程序包管理控制台

输入命令

Install-Package System.Drawing.Common

二.代码案例实现

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;


namespace Web.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class UploadController : ControllerBase
    {
        [HttpPost]
        public void UploadFile([FromForm] FileViewModel fileViewModel)
        {
            string outputImagePath = @"C:\Users\Desktop\watermark.jpg"; // 输出图片路径
            string watermarkText = "水印文字 2024"; 
            AddWatermark(fileViewModel.file, outputImagePath, watermarkText);
        }
        void AddWatermark(IFormFile file, string outputImagePath, string watermarkText)
        {
            using (Image image = IFormFileToImage(file))
            using (Graphics graphic = Graphics.FromImage(image))
            {
                Font font = new Font("Arial", 20, FontStyle.Bold, GraphicsUnit.Pixel);
                Color color = Color.FromArgb(128, 128, 128); // 浅灰色
                SolidBrush brush = new SolidBrush(color);
                PointF point = new PointF(image.Width - 160, image.Height - 35); // 水印位置

                // 设置文字抗锯齿
                graphic.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;

                // 绘制水印
                graphic.DrawString(watermarkText, font, brush, point);

                // 保存图片
                image.Save(outputImagePath, ImageFormat.Png);
            }
        }
        /// <summary>
        /// IFormFile文件转Image
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        Image IFormFileToImage(IFormFile file)
        {
            using (var memoryStream = new MemoryStream())
            {
                file.CopyTo(memoryStream);
                memoryStream.Position = 0;
                return Image.FromStream(memoryStream);
            }
        }
    }

    public class FileViewModel
    {
        public IFormFile file { get; set; }
    }
}

三.上传图片

四.实现效果

右下角 ‘水印文字 2024’就是刚刚打的水印

标签:Core,image,System,水印,file,using,NET,Drawing
From: https://blog.csdn.net/qq_45082171/article/details/139142781

相关文章

  • 大模型的灵魂解读:Anthropic AI的Claude3 Sonnet可解释性研究
    大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调重新阅读。而最新科技(Mamba,xLSTM,KAN)则提供了大模型领域最新技术跟踪。若对于构建生产级别架构则可以关注AI架构设计专栏。技......
  • Modbus TCP转Profinet网关配置案例
    本案例采用XD-ETHPN20网关做为ModbusTCP通信协议设备与Profinet通信协议设备连接的桥梁。ModbusTCP是一种基于TCP/IP协议的工业通信协议,而Profinet则是用于太网通信的协议。ModbusTCP转Profinet网关可实现这两种不同协议之间的数据交换和传输,极大地方便了工业生产现场的自动化......
  • 面试题剖析:Netty编解码如何解决拆包沾包问题?
    今天我们要聊的主题是Netty的编解码机制,特别是如何解决TCP的拆包和沾包问题。如果你曾在处理网络数据传输时遇到数据包混乱的情况,那么你已经体验过拆包和沾包的“乐趣”了。别担心,Netty提供了一系列强大的解码器,帮助我们轻松应对这些问题。本文将详细介绍这些解码器的工作原......
  • 2024永久免费破解版CorelDRAW汉化百度云网盘下载
     CorelDRAW®GraphicsSuite2024无疑是一款配备齐全的专业设计工具包,它以其卓越的性能和丰富的功能,为设计师们提供了高效且令人惊艳的矢量插图、布局、照片编辑和排版项目。这款软件套件不仅功能强大,而且价格实惠,用户可以通过订阅的方式获得持续的价值。订阅CorelDRAW®Gr......
  • aspnetcore插件开发dll热加载 二
    这一篇文章应该是个总结。投简历的时候是不是有人问我有没有abp的开发经历,汗颜!在各位大神的尝试及自己的总结下,还是实现了业务和主机服务分离,通过dll动态的加载卸载,控制器动态的删除添加。项目如下: 演示效果: 下面就是代码部分:重点1.IActionDescriptorChangeProvider......
  • 虚拟机liunx网络设置---NET模式
    本机环境是:1、cd/etc/sysconfig/network-scripts/2、viifcfg-ens333、查看VMware设置本机的子网掩码和网关4、修改ifcfg-ens33的配置文件修改的内容是: BOOTPROTO=staticONBOOT=yesIPADDR=192.168.37.200NETMASK=255.255.255.0GATEWAY=192.168.37.2DNS1=114.11......
  • YOLOv9改进策略 | 图像去雾 | 利用图像去雾网络UnfogNet辅助YOLOv9进行图像去雾检测(全
     一、本文介绍本文给大家带来的改进机制是利用UnfogNet超轻量化图像去雾网络,我将该网络结合YOLOv9针对图像进行去雾检测(也适用于一些模糊场景),我将该网络结构和YOLOv9的网络进行结合同时该网络的结构的参数量非常的小,我们将其添加到模型里增加的计算量和参数量基本可以忽略不......
  • 部署kubernetes集群机器
    前言:部署Kubernetes集群机器是一项涉及多个步骤和要求的重要任务。以下是一些关于部署Kubernetes集群机器前言的要点:简介:Kubernetes(通常简称为K8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。通过Kubernetes,您可以轻松地在集群中运行和管理多个容器......
  • net 静态方法与非静态方法
    usingSystem;namespaceConsoleApp1{publicclassProgram{/*静态方法(static):特点:1.生命周期,一旦创建--应用结束才会销毁2.可全局使用3.效率高用处:用户登陆信息,系统......
  • 基于YOLOv5+LPRNet进行车牌检测及识别
    欢迎大家点赞、收藏、关注、评论啦,由于篇幅有限,只展示了部分核心代码。文章目录一项目简介二、功能三、系统四.总结一项目简介  一、项目背景随着智能交通系统的不断发展,车牌检测与识别技术成为了其中不可或缺的一部分。准确、快速地识别车牌信息对于交通......