给图片添加水印

许久没写代码了,许久没上博客园了,许久没有写博文了。

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace MarkPicWithFileName
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DirectoryInfo dic = new DirectoryInfo(@"C:\Users\kerry\Desktop\handbag");
            FileInfo[] files = dic.GetFiles();
            foreach (FileInfo f in files)
            {
                Image img = Image.FromFile(f.FullName);
                string newFileName=@"C:\Users\kerry\Desktop\handbag\new\" + f.Name;
                Utils.AddImageSignText(img, newFileName, f.Name.Replace(".JPG", string.Empty).Replace(".jpg", string.Empty), 1, 100, "微软雅黑", 24);
               
                //Utils .AddImageSignText (
            }
        }

         }

    public class Utils
    {
        /// <summary>
        /// 增加图片文字水印
        /// </summary>
        /// <param name="filename">文件名</param>
        /// <param name="watermarkText">水印文字</param>
        /// <param name="watermarkStatus">图片水印位置</param>
        public static void AddImageSignText(Image img, string filename, string watermarkText, int watermarkStatus, int quality, string fontname, int fontsize)
        {
            //System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(img);
            //    .FromFile(filename);
            Graphics g = Graphics.FromImage(img);
            Font drawFont = new Font(fontname, fontsize, FontStyle.Regular, GraphicsUnit.Pixel);
            SizeF crSize;
            crSize = g.MeasureString(watermarkText, drawFont);

            float xpos = 0;
            float ypos = 0;

            switch (watermarkStatus)
            {
                case 1:
                    xpos = (float)img.Width * (float).01;
                    ypos = (float)img.Height * (float).01;
                    break;
                case 2:
                    xpos = ((float)img.Width * (float).50) - (crSize.Width / 2);
                    ypos = (float)img.Height * (float).01;
                    break;
                case 3:
                    xpos = ((float)img.Width * (float).99) - crSize.Width;
                    ypos = (float)img.Height * (float).01;
                    break;
                case 4:
                    xpos = (float)img.Width * (float).01;
                    ypos = ((float)img.Height * (float).50) - (crSize.Height / 2);
                    break;
                case 5:
                    xpos = ((float)img.Width * (float).50) - (crSize.Width / 2);
                    ypos = ((float)img.Height * (float).50) - (crSize.Height / 2);
                    break;
                case 6:
                    xpos = ((float)img.Width * (float).99) - crSize.Width;
                    ypos = ((float)img.Height * (float).50) - (crSize.Height / 2);
                    break;
                case 7:
                    xpos = (float)img.Width * (float).01;
                    ypos = ((float)img.Height * (float).99) - crSize.Height;
                    break;
                case 8:
                    xpos = ((float)img.Width * (float).50) - (crSize.Width / 2);
                    ypos = ((float)img.Height * (float).99) - crSize.Height;
                    break;
                case 9:
                    xpos = ((float)img.Width * (float).99) - crSize.Width;
                    ypos = ((float)img.Height * (float).99) - crSize.Height;
                    break;
            }

            //            System.Drawing.StringFormat StrFormat = new System.Drawing.StringFormat();
            //            StrFormat.Alignment = System.Drawing.StringAlignment.Center;
            //
            //            g.DrawString(watermarkText, drawFont, new System.Drawing.SolidBrush(System.Drawing.Color.White), xpos + 1, ypos + 1, StrFormat);
            //            g.DrawString(watermarkText, drawFont, new System.Drawing.SolidBrush(System.Drawing.Color.Black), xpos, ypos, StrFormat);
            g.DrawString(watermarkText, drawFont, new SolidBrush(Color.White), xpos + 1, ypos + 1);
            g.DrawString(watermarkText, drawFont, new SolidBrush(Color.Black), xpos, ypos);

            ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
            ImageCodecInfo ici = null;
            foreach (ImageCodecInfo codec in codecs)
            {
                if (codec.MimeType.IndexOf("jpeg") > -1)
                {
                    ici = codec;
                }
            }
            EncoderParameters encoderParams = new EncoderParameters();
            long[] qualityParam = new long[1];
            if (quality < 0 || quality > 100)
            {
                quality = 80;
            }
            qualityParam[0] = quality;

            EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qualityParam);
            encoderParams.Param[0] = encoderParam;

            if (ici != null)
            {
                img.Save(filename, ici, encoderParams);
            }
            else
            {
                img.Save(filename);
            }
            g.Dispose();
            //bmp.Dispose();
            img.Dispose();
        }
   
    }
}

转载于:https://www.cnblogs.com/jinzhao/archive/2011/01/10/1932118.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297437.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea2020.2.2怎么创建web项目_创建Vue3.0的项目

1. 查看Vue的环境版本Vue -V如果版本低于4.0&#xff0c;则需要升级Vue的版本npm install -g vue/cli2. 创建Vue 3.0的项目3. VS Code 的环境配置安装Extension&#xff1a;ESLint&#xff0c; Vetur。VS Code基于ESLint的Auto Save功能&#xff0c;可以很好的格式化代码&#…

揭秘奢侈品代工厂内幕:千元以上的大牌墨镜,成本甚至不过百!

▲ 点击查看纵观全球没有哪个国家像中国这样几乎所有领域都在发力世界能研发高铁的国家&#xff0c;不超过十个&#xff0c;中国在列&#xff1b;世界能建造军舰的国家&#xff0c;不超过十个&#xff0c;中国在列&#xff1b;世界能研发第五代隐身战机的国家&#xff0c;不超过…

Dapr牵手.NET学习笔记:状态管理进阶(一)

在上一篇文章中说到&#xff0c;dapr默认的状态是不可能跨appid的&#xff0c;也就是只能在相同的应用内访问自己设置的状态数据&#xff0c;dapr支持三种状态的共享配置&#xff1a;appid&#xff0c;nam&#xff0c;none&#xff0c;是通过修改components下的statestore.yaml…

[WP] 关于页面切换动画 记录

1 app.xmal.cs 部分修改如下 private void InitializePhoneApplication() {if (phoneApplicationInitialized)return;// Create the frame but dont set it as RootVisual yet; this allows the splash// screen to remain active until the application is ready to r…

ext 浅谈类的实例

打开ext的API&#xff0c;如下找到Class这个选项将鼠标移到config那里可以看到有以下属性&#xff1a;好了&#xff0c;让我们开始进入主题&#xff1a;首先&#xff0c;来讲讲如何自定义一个类&#xff0c;在ext中&#xff0c;创建一个类其实与其他语言差不多&#xff0c;只是…

GAE 随机获取实体

有时我们需要随机地获取数据记录&#xff08;实体&#xff09;&#xff0c;比如博客程序中的“随机文章”的实现。 目前 GAE 并没有 API 可以直接获取随机实体&#xff0c;要实现这样的需求我们只能自己想办法了 :-) 在 stackoverflow 上也有人提过该问题&#xff0c;总结如下&…

构造函数怎么在主函数调用_C++ 虚基类及其派生类构造函数(学习笔记:第7章 12)...

虚基类及其派生类构造函数[1]建立对象时所指定的类称为最远派生类。虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的。在整个继承结构中&#xff0c;直接或间接继承虚基类的所有派生类&#xff0c;都必须在构造函数的成员初始化表中为虚基类的构造函…

打得了橄榄球大联盟,进得了麻省理工,无论是四肢还是头脑都同样发达,这才叫猛男!...

全世界只有3.14 % 的人关注了爆炸吧知识今天小天就介绍一位同样在学术界、体坛都很生猛的猛男吧约翰尤索 (John Urschel) 关于约翰尤索一直有“学霸”“学神”这些词伴随着他然而尤索却说他从来都没认真听过老师讲课尤索出生在加拿大温尼伯父亲是医生&#xff0c;母亲是律师很小…

如何使用 EF Core 按周 对数据分组?

咨询区 Aza&#xff1a;在 Entity Framework 6 中&#xff0c;我可以用 SqlFunctions.DatePart() 函数来实现&#xff0c;参考如下代码&#xff1a;var byWeek data.GroupBy(x > SqlFunctions.DatePart("week", x.Date));现在的问题是, Entity Framework Core 中…

忍着疼痛奔跑,带着泪光微笑!

忍着疼痛奔跑&#xff0c;带着泪光微笑转瞬&#xff0c;毕业已近四年&#xff0c;回顾&#xff0c;还在路上。头几年&#xff0c;有着一颗爱玩的心&#xff0c;秉着“人这一辈子不能对不起自己”的谬论&#xff0c;一直随着自己的性子&#xff0c;想做什么就做什么&#xff0c;…

加菲猫语录,只准笑不准学

&#xff0d;今天我要做俯卧撑今天先俯卧&#xff0c;明天再撑。 &#xff0d;&#xff0d;真不愿意起来&#xff0c;尤其我还病了&#xff0c;可我还得带病坚持吃饭。 &#xff0d;&#xff0d;肚子大不可怕&#xff0c;可怕的是肚子里没有好东西。或者说&#xff0c;没有好…

python 什么是原类_Python 什么是元类(metaclasses)?

1.什么是类 在理解元类之前&#xff0c;我们必须先掌握Python中的类(class)。 和大多数语言一样&#xff0c;Python中的类知识用来描述如何“生成一个对象”&#xff1a;但是&#xff0c;在Python中&#xff0c;类不仅能用来描述如何生成一个对象&#xff0c;类本身也是对象。 …

mysql连接指定时区_MySQL创建JDBC连接时区问题

报错内容&#xff1a;ErrorCode0SQLState01S00The server time zone value is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zon…

听说这是和女朋友住一起后的现象之一

1 被人叫醒时的你&#xff01;2 分享一只软糯香甜的香蕉。。3 到底选哪根好呢&#xff1f;4 大叔你的手机壳怎么肥四&#xff1f;&#xff1f;5 听说这是和女朋友住一起后的现象之一6 爱国主义教育培养了一群吃货&#xff01;7 今天做做题吧&#xff01;&#xff08;本视频来源…

PDF 补丁丁 (修改PDF书签;拆分、合并、制作PDF;提取图片) 0.3.0.8 正式版

PDF 补丁丁 0.3.0.8 正式版 新版本已经发布&#xff0c;请到博客首页下载。 软件简介 PDF补丁丁是一个用于修改PDF文件信息的工具。它具有以下功能&#xff1a;■ 修改文档&#xff08;带“*”号部分功能需通过高级补丁修改功能实现&#xff09;&#xff1a; ● 修改文档属性…

Dapr + .NET 实战(八)服务监测

服务监测分布式服务性能指标&#xff0c;链路追踪&#xff0c;运行状况&#xff0c;日志记录都很重要&#xff0c;我们日常开发中为了实现这些功能需要集成很多功能&#xff0c;替换监控组件时成本也很高。Dapr 可观测性模块将服务监测与应用程序分离。它自动捕获由 Dapr sidec…

世界上第一位程序员是位美女——AdaLovelace【有图为证】

AdaLovelace画像 仙女一般吧....简介&#xff1a; 阿达奥古斯塔&#xff0c;19世纪诗人拜伦的女儿&#xff0c;数学家。穿孔机程序创始人&#xff0c;建立了循环和子程序概念。为计算程序拟定“算法”&#xff0c;写作的第一份“程序设计流程图”&#xff0c;被珍视为“第一个…

php mysql管理_MySQL 连接与管理

让 PHP 支持 MySQLPHP 有专有的 MySQL 函数库以使用操作 MYSQL 数据库。在 PHP 5 及以后版本中不再默认支持 MySQL &#xff0c;所以在运行这些库之前&#xff0c;请确定 php.ini 加载了 MySQL 数据库支持&#xff1a;extension mysql.dllMySQL 连接mysql_connect() 函数用于开…

python新手入门总结_初学python的操作难点总结(新手必看篇)

如下所示&#xff1a;1 在cmd下 盘与盘之间的切换 直接 D或d: 就好2 查找当前盘或者文件下面的目录 直接 dir3 想在一个盘下进去一个文件夹&#xff0c;用cd空格目标文件 cd p4 写文件的第一个字母后 按tab键自动补全 如果有多个p开头的则在按tab 会在所有之间切换5 d:切盘 dir…

android开发我的新浪微博客户端-用户授权页面UI篇(3.1)

上一篇讲了讲OAuth授权认证的事情,大概的介绍了OAuth的原理&#xff0c;并且完成了一个OAuth.java的类库&#xff0c;提供了几个OAuth认证必要的方法&#xff0c;本篇开始具体讲本项目的用户授权功能&#xff0c;用户授权页面是当用户第一次使用本软件的时候自动从载入页面跳转…