C#图片水印类

这个是学习用的呃,主要看一下水印在修改图片中距左边的宽度和高度是杂弄的就哦客了。



using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.IO;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
namespace ECHX.BLL
{
    /// <summary>
    /// WaterMark 的摘要说明
    /// </summary>
    ///
    /// <param name="strCopyright">要加入的文字</param>
    /// <param name="strMarkPath">水印图片路径</param>
    /// <param name="strPhotoPath">要加水印的图片路径</param>
    /// <param name="strSavePath">处理后的图片路径</param>
    /// <param name="iMarkRightSpace">水印在修改图片中距左边的宽度</param>
    /// <param name="iMarkButtomSpace">水印在修改图片中距底部的高度</param>
    /// <param name="iDiaphaneity">水印图片的透明度</param>
    /// <param name="iFontRightSpace">文字</param>
    /// <param name="iFontButtomSpace">文字</param>
    /// <param name="iFontDiaphaneity">文字</param>
    /// <param name="bShowCopyright">是否显示文字</param>
    /// <param name="bShowMarkImage">是否显示水印图片</param>

    public class WaterMark
    {
        #region param
        private string strCopyright, strMarkPath, strPhotoPath, strSavePath;
        private int iMarkRightSpace, iMarkButtomSpace, iDiaphaneity;
        private int iFontRightSpace = 0, iFontButtomSpace = 0, iFontDiaphaneity = 80;
        private int iFontSize = 10;
        private bool bShowCopyright = true, bShowMarkImage = true;
        #endregion

        #region WaterMark
        public WaterMark()
        {
            this.strCopyright = "";
            this.strMarkPath = null;
            this.strPhotoPath = null;
            this.strSavePath = null;
            this.iDiaphaneity = 70;
            this.iMarkRightSpace = 0;
            this.iMarkButtomSpace = 0;
        }

        /// <summary>
        /// 主要用两样都加的
        /// </summary>
        /// <param name="copyright">要加入的文字</param>
        /// <param name="markPath">水印图片路径</param>
        /// <param name="photoPath">要加水印的图片路径</param>
        /// <param name="savePath">处理后的图片路径</param>
        public WaterMark(string copyright, string markPath, string photoPath, string savePath)
        {
            this.strCopyright = copyright;
            this.strMarkPath = markPath;
            this.strPhotoPath = photoPath;
            this.strSavePath = savePath;
            this.iDiaphaneity = 70;
            this.iMarkRightSpace = 0;
            this.iMarkButtomSpace = 0;
        }
        #endregion

        #region property

        /// <summary>
        /// 设置是否显示水印文字
        /// </summary>
        public bool ShowCopyright
        {
            set { this.bShowCopyright = value; }
        }

        /// <summary>
        /// 设置是否显示水印图片
        /// </summary>
        public bool ShowMarkImage
        {
            set { this.bShowMarkImage = value; }
        }
        /// <summary>
        /// 获取或设置要加入的文字
        /// </summary>
        public string Copyright
        {
            set { this.strCopyright = value; }
        }

        /// <summary>
        /// 获取或设置加水印后的图片路径
        /// </summary>
        public string SavePath
        {
            get { return this.strSavePath; }
            set { this.strSavePath = value; }
        }

        /// <summary>
        /// 获取或设置水印图片路径
        /// </summary>
        public string MarkPath
        {
            get { return this.strMarkPath; }
            set { this.strMarkPath = value; }
        }

        /// <summary>
        /// 获取或设置要加水印图片的路径
        /// </summary>
        public string PhotoPath
        {
            get { return this.strPhotoPath; }
            set { this.strPhotoPath = value; }
        }

        /// <summary>
        /// 设置水印图片的透明度
        /// </summary>
        public int Diaphaneity
        {
            set
            {
                if (value > 0 && value <= 100)
                    this.iDiaphaneity = value;
            }
        }

        /// <summary>
        /// 设置水印字体的透明度0-255
        /// </summary>
        public int FontDiaphaneity
        {
            set
            {
                if (value >= 0 && value <= 255)
                    this.iFontDiaphaneity = value;
            }
        }

        /// <summary>
        /// 设置水印图片在修改图片中距左边的高度
        /// </summary>
        public int MarkRightSpace
        {
            set { this.iMarkRightSpace = value; }
        }

        /// <summary>
        /// 设置水印图片在修改图片中距底部的高度
        /// </summary>
        public int MarkButtomSpace
        {
            set { this.iMarkButtomSpace = value; }
        }

        /// <summary>
        /// 设置水印字体在修改图片中距左边的距离
        /// </summary>
        public int FontRightSpace
        {
            set { iFontRightSpace = value; }
        }

        /// <summary>
        /// 设置水印字体在修改图片中距底部的高度
        /// </summary>
        public int FontButtomSpace
        {
            set { iFontButtomSpace = value; }
        }

        #endregion

        /// <summary>
        /// 生成水印图片
        /// </summary>
        /// <returns></returns>
        public void createMarkPhoto()
        {
            Bitmap bmWatermark = null;
            Image gPhoto = Image.FromFile(this.strPhotoPath);
            int PhotoWidth = gPhoto.Width;
            int PhotoHeight = gPhoto.Height;
            Bitmap bitPhoto = new Bitmap(PhotoWidth, PhotoHeight, PixelFormat.Format24bppRgb);
            bitPhoto.SetResolution(gPhoto.HorizontalResolution, gPhoto.VerticalResolution);

            try
            {
                if (bShowCopyright)
                {
                    Graphics grPhoto = Graphics.FromImage(bitPhoto);
                    grPhoto.SmoothingMode = SmoothingMode.AntiAlias;
                    grPhoto.DrawImage(gPhoto, new Rectangle(0, 0, PhotoWidth, PhotoHeight), 0, 0, PhotoWidth, PhotoHeight, GraphicsUnit.Pixel);

                    Font crFont = new Font("楷体", iFontSize, FontStyle.Bold);
                    SizeF crSize = grPhoto.MeasureString(strCopyright, crFont);

                    //设置字体在图片中的位置
                    float yPosFromBottom = PhotoHeight - iFontButtomSpace - (crSize.Height);

                    //float xCenterOfImg = (phWidth/2);
                    float xCenterOfImg = PhotoWidth - iFontRightSpace - (crSize.Width / 2);
                    //设置字体居中

                    StringFormat StrFormat = new StringFormat();
                    StrFormat.Alignment = StringAlignment.Center;

                    //设置绘制文本的颜色和纹理 (Alpha=153)
                    SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(this.iFontDiaphaneity, 0, 0, 0));

                    //将版权信息绘制到图象上
                    grPhoto.DrawString(strCopyright, crFont, semiTransBrush2, new PointF(xCenterOfImg, yPosFromBottom), StrFormat);

                    gPhoto = bitPhoto;
                    grPhoto.Dispose();
                }

                if (bShowMarkImage)
                {
                    //创建一个需要填充水银的Image对象
                    Image imgWatermark = new Bitmap(strMarkPath);
                    int iMarkWidth = imgWatermark.Width;
                    int iMarkmHeight = imgWatermark.Height;

                    Graphics grWatermark = null;
                    if (bShowCopyright)
                    {
                        //在原来修改过的bmPhoto上创建一个水银位图
                        bmWatermark = new Bitmap(bitPhoto);
                        bmWatermark.SetResolution(gPhoto.HorizontalResolution, gPhoto.VerticalResolution);
                    }
                    else
                    {
                        bmWatermark = new Bitmap(gPhoto);
                    }

                    //将位图bmWatermark加载到Graphics对象
                    grWatermark = Graphics.FromImage(bmWatermark);
                    ImageAttributes imageAttributes = new ImageAttributes();

                    ColorMap colorMap = new ColorMap();

                    colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);
                    colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);

                    ColorMap[] remapTable = { colorMap };

                    imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);

                    float[][] colorMatrixElements = {
                          new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f},
                          new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f},
                          new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f},
                          new float[] {0.0f, 0.0f, 0.0f, (float)iDiaphaneity/100f, 0.0f},
                          new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f}};
                    ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements);

                    imageAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);

                    grWatermark.DrawImage(imgWatermark, new Rectangle((PhotoWidth - iMarkRightSpace - (iMarkWidth / 2)), (PhotoHeight - iMarkButtomSpace - (iMarkmHeight / 2)), iMarkWidth, iMarkmHeight), 0, 0, iMarkWidth, iMarkmHeight, GraphicsUnit.Pixel, imageAttributes);

                    gPhoto = bmWatermark;
                    grWatermark.Dispose();
                    imgWatermark.Dispose();
                }
                gPhoto.Save(strSavePath, ImageFormat.Jpeg);
            }
            finally
            {

                if (bitPhoto != null)
                    bitPhoto.Dispose();

                if (bmWatermark != null)
                    bmWatermark.Dispose();

                gPhoto.Dispose();
            }

        }
    }
}
时间: 2024-10-10 16:07:52

C#图片水印类的相关文章

php图片水印类

<?php class Image { private $path; //构造方法用来对图片所在位置进行初使化 function __construct($path="./"){ $this->path=rtrim($path, "/")."/"; $this -> path = ''; } /* 对图片进行缩放 * * 参数$name: 是需要处理的图片名称 * 参数$width:是缩放后的宽度 * 参数$height:是缩放

图片处理类(图片水印 图片缩放)

本图片处理类功能非常之强大可以实现几乎所有WEB开发中对图像的处理功能都集成了,包括有缩放图像.切割图像.图像类型转换.彩色转黑白.文字水印.图片水印等功能 1 import java.awt.AlphaComposite; 2 import java.awt.Color; 3 import java.awt.Font; 4 import java.awt.Graphics; 5 import java.awt.Graphics2D; 6 import java.awt.Image; 7 imp

图片工具类, 图片水印,文字水印,缩放,补白等

import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import

分页、图片水印、缩略图【图片处理工具类】、php错误机制

1.分页技术[limit] 分页技术就是传入分页需要的每页的大小和当前页,对页的控制,实现分页的功能 使用分页的方式来展示相关的列表信息. [公司的分页是通过接口进行处理,因为我们只使用显示的部分,不用取库的操作,所以比较简单.使用ajax调用接口实现分页的异步显示] [做一个分页的工具类] [gd图片处理的相关] 2.缩略图 步骤: (1)在原图上采样,获取在原图上的采集区域 (2)拷贝:将文件复制一份 (3)修改:修改文件大小 (4)导出(imagejpeg)并销毁资源(destory) i

php使用GD库实现图片水印和缩略图——封装成类

学完了如何使用GD库来实现对图片的各种处理,那么我们可以发现,不管哪种方法,都有相似之处,如果我们把这些相似的地方和不相似的地方都封装成类,这样就可以提升代码的速度,而且节省了很多时间,废话不多说,来人,上代码! 首先,先创建一个PHP文件:class.php(自定义) 我们知道,在 在原始图片中添加文字水印:http://www.cnblogs.com/finalanddistance/p/7243346.html 在原始图片中添加图片水印:http://www.cnblogs.com/fin

本图片处理类功能非常之强大可以实现几乎所有WEB开发中对图像的处理功能都集成了,包括有缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等功能

import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Toolkit; import java.awt.color.ColorSpace; import java.awt.geom.AffineTransform;

php图片水印添加,压缩,剪切类的封装

php对图片文件的操作主要是利用GD库扩展.当我们频繁利用php对图片进行操作时,会自然封装很多函数,否则会写太多重复的代码.当有很多对图片的相关函数的时候,我们可以考虑将这些函数也整理一下,因而就有了封装成类的想法. 操作图片主要历经四个步骤: 打开图片 操作图片 输出图片 销毁图片 1,3,4三个步骤每次都要写,每次又都差不多.真正需要变通的只有操作图片的这一步骤了.操作图片又往往通过1或多个主要的GD函数来完成. 本文封装类里面的四种方法,文字水印(imagettftext()),图片水印

.NET图片操作类,包含图片格式转换、图片缩放、 文字水印、图片水印、路径转换

using System;using System.Collections.Generic;using System.Text;using System.IO;using System.Drawing.Imaging;using System.Drawing;using System.Web;namespace ZC.Utils{  public  static class ImageHelper  { #region 图片格式转换      /// <summary>      /// 图片

Thinkphp中文水印和图片水印合体集成插件

今天给大家分享一下中文水印和图片水印合体集成插件,Thinkphp只有单独的加文字或加图片,由于工作的需要需要同里加"文字"和"图片"于是,试着修改了一下,只需要一行代码解决图片和文字水印.首先引入Thinkphp的Image方法即可,而且支持中文水印. 1.前端模板:前端原图片和加过水印的图片显示对比<p class="notice red">原图:</p><img src="Public/images/