⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imageclass.cs

📁 c#常用类库大全
💻 CS
📖 第 1 页 / 共 2 页
字号:
using System;
using System.Collections;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

public class ImageClass
{
    public ImageClass()
    { }

    #region 缩略图
    /// <summary>
    /// 生成缩略图
    /// </summary>
    /// <param name="originalImagePath">源图路径(物理路径)</param>
    /// <param name="thumbnailPath">缩略图路径(物理路径)</param>
    /// <param name="width">缩略图宽度</param>
    /// <param name="height">缩略图高度</param>
    /// <param name="mode">生成缩略图的方式</param>    
    public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
    {
        System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);

        int towidth = width;
        int toheight = height;

        int x = 0;
        int y = 0;
        int ow = originalImage.Width;
        int oh = originalImage.Height;

        switch (mode)
        {
            case "HW":  //指定高宽缩放(可能变形)                
                break;
            case "W":   //指定宽,高按比例                    
                toheight = originalImage.Height * width / originalImage.Width;
                break;
            case "H":   //指定高,宽按比例
                towidth = originalImage.Width * height / originalImage.Height;
                break;
            case "Cut": //指定高宽裁减(不变形)                
                if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
                {
                    oh = originalImage.Height;
                    ow = originalImage.Height * towidth / toheight;
                    y = 0;
                    x = (originalImage.Width - ow) / 2;
                }
                else
                {
                    ow = originalImage.Width;
                    oh = originalImage.Width * height / towidth;
                    x = 0;
                    y = (originalImage.Height - oh) / 2;
                }
                break;
            default:
                break;
        }

        //新建一个bmp图片
        System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);

        //新建一个画板
        System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);

        //设置高质量插值法
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

        //设置高质量,低速度呈现平滑程度
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

        //清空画布并以透明背景色填充
        g.Clear(System.Drawing.Color.Transparent);

        //在指定位置并且按指定大小绘制原图片的指定部分
        g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight), new System.Drawing.Rectangle(x, y, ow, oh), System.Drawing.GraphicsUnit.Pixel);

        try
        {
            //以jpg格式保存缩略图
            bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
        }
        catch (System.Exception e)
        {
            throw e;
        }
        finally
        {
            originalImage.Dispose();
            bitmap.Dispose();
            g.Dispose();
        }
    }
    #endregion

    #region 图片水印
    /// <summary>
    /// 图片水印处理方法
    /// </summary>
    /// <param name="path">需要加载水印的图片路径(绝对路径)</param>
    /// <param name="waterpath">水印图片(绝对路径)</param>
    /// <param name="location">水印位置(传送正确的代码)</param>
    public static string ImageWatermark(string path, string waterpath, string location)
    {
        string kz_name = Path.GetExtension(path);
        if (kz_name == ".jpg" || kz_name == ".bmp" || kz_name == ".jpeg")
        {
            DateTime time = DateTime.Now;
            string filename = "" + time.Year.ToString() + time.Month.ToString() + time.Day.ToString() + time.Hour.ToString() + time.Minute.ToString() + time.Second.ToString() + time.Millisecond.ToString();
            Image img = Bitmap.FromFile(path);
            Image waterimg = Image.FromFile(waterpath);
            Graphics g = Graphics.FromImage(img);
            ArrayList loca = GetLocation(location, img, waterimg);
            g.DrawImage(waterimg, new Rectangle(int.Parse(loca[0].ToString()), int.Parse(loca[1].ToString()), waterimg.Width, waterimg.Height));
            waterimg.Dispose();
            g.Dispose();
            string newpath = Path.GetDirectoryName(path) + filename + kz_name;
            img.Save(newpath);
            img.Dispose();
            File.Copy(newpath, path, true);
            if (File.Exists(newpath))
            {
                File.Delete(newpath);
            }
        }
        return path;
    }

    /// <summary>
    /// 图片水印位置处理方法
    /// </summary>
    /// <param name="location">水印位置</param>
    /// <param name="img">需要添加水印的图片</param>
    /// <param name="waterimg">水印图片</param>
    private static ArrayList GetLocation(string location, Image img, Image waterimg)
    {
        ArrayList loca = new ArrayList();
        int x = 0;
        int y = 0;

        if (location == "LT")
        {
            x = 10;
            y = 10;
        }
        else if (location == "T")
        {
            x = img.Width / 2 - waterimg.Width / 2;
            y = img.Height - waterimg.Height;
        }
        else if (location == "RT")
        {
            x = img.Width - waterimg.Width;
            y = 10;
        }
        else if (location == "LC")
        {
            x = 10;
            y = img.Height / 2 - waterimg.Height / 2;
        }
        else if (location == "C")
        {
            x = img.Width / 2 - waterimg.Width / 2;
            y = img.Height / 2 - waterimg.Height / 2;
        }
        else if (location == "RC")
        {
            x = img.Width - waterimg.Width;
            y = img.Height / 2 - waterimg.Height / 2;
        }
        else if (location == "LB")
        {
            x = 10;
            y = img.Height - waterimg.Height;
        }
        else if (location == "B")
        {
            x = img.Width / 2 - waterimg.Width / 2;
            y = img.Height - waterimg.Height;
        }
        else
        {
            x = img.Width - waterimg.Width;
            y = img.Height - waterimg.Height;
        }
        loca.Add(x);
        loca.Add(y);
        return loca;
    }
    #endregion

    #region 文字水印
    /// <summary>
    /// 文字水印处理方法
    /// </summary>
    /// <param name="path">图片路径(绝对路径)</param>
    /// <param name="size">字体大小</param>
    /// <param name="letter">水印文字</param>
    /// <param name="color">颜色</param>
    /// <param name="location">水印位置</param>
    public static string LetterWatermark(string path, int size, string letter, Color color, string location)
    {
        #region

        string kz_name = Path.GetExtension(path);
        if (kz_name == ".jpg" || kz_name == ".bmp" || kz_name == ".jpeg")
        {
            DateTime time = DateTime.Now;
            string filename = "" + time.Year.ToString() + time.Month.ToString() + time.Day.ToString() + time.Hour.ToString() + time.Minute.ToString() + time.Second.ToString() + time.Millisecond.ToString();
            Image img = Bitmap.FromFile(path);
            Graphics gs = Graphics.FromImage(img);
            ArrayList loca = GetLocation(location, img, size, letter.Length);
            Font font = new Font("宋体", size);
            Brush br = new SolidBrush(color);
            gs.DrawString(letter, font, br, float.Parse(loca[0].ToString()), float.Parse(loca[1].ToString()));
            gs.Dispose();
            string newpath = Path.GetDirectoryName(path) + filename + kz_name;
            img.Save(newpath);
            img.Dispose();
            File.Copy(newpath, path, true);
            if (File.Exists(newpath))
            {
                File.Delete(newpath);
            }
        }
        return path;

        #endregion
    }

    /// <summary>
    /// 文字水印位置的方法
    /// </summary>
    /// <param name="location">位置代码</param>
    /// <param name="img">图片对象</param>
    /// <param name="width">宽(当水印类型为文字时,传过来的就是字体的大小)</param>
    /// <param name="height">高(当水印类型为文字时,传过来的就是字符的长度)</param>
    private static ArrayList GetLocation(string location, Image img, int width, int height)
    {
        #region

        ArrayList loca = new ArrayList();  //定义数组存储位置
        float x = 10;
        float y = 10;

        if (location == "LT")
        {
            loca.Add(x);
            loca.Add(y);
        }
        else if (location == "T")
        {
            x = img.Width / 2 - (width * height) / 2;
            loca.Add(x);
            loca.Add(y);
        }
        else if (location == "RT")
        {
            x = img.Width - width * height;
        }
        else if (location == "LC")
        {
            y = img.Height / 2;
        }
        else if (location == "C")
        {
            x = img.Width / 2 - (width * height) / 2;
            y = img.Height / 2;
        }
        else if (location == "RC")
        {
            x = img.Width - height;
            y = img.Height / 2;
        }
        else if (location == "LB")
        {
            y = img.Height - width - 5;
        }
        else if (location == "B")
        {
            x = img.Width / 2 - (width * height) / 2;
            y = img.Height - width - 5;
        }
        else
        {
            x = img.Width - width * height;
            y = img.Height - width - 5;
        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -