一个自定义的C#图片处理类,用于生成缩略图信息的代码

在研发过程中,将代码过程中较好的代码段做个珍藏,下面的代码段是关于一个自定义的C#图片处理类,用于生成缩略图信息的代码,应该能对小伙伴有用途。

using System;
using System.Drawing.Imaging;
using System.Collections;
using System.Drawing;
using System.IO;

namespace DotNet.Utilities
{
public enum ThumbnailMod : byte
{
HW,
W,
H,
Cut
};

public static class PicDeal
{
    private static Hashtable htmimes = new Hashtable();
    internal static readonly string AllowExt = ".jpe|.jpeg|.jpg|.png|.tif|.tiff|.bmp";
    #region 生成缩略图
    public static bool MakeThumbnail(string originalImagePath, int width, int height, ThumbnailMod mode)
    {
        string thumbnailPath = originalImagePath.Substring(0, originalImagePath.LastIndexOf('.')) + "s.jpg";
        Image originalImage = 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)
        {
                break;
                break;
                break;
                if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
                {
                    oh = originalImage.Height;
                    y = 0;
                    x = (originalImage.Width - ow) / 2;
                }
                else
                {
                    ow = originalImage.Width;
                    x = 0;
                    y = (originalImage.Height - oh) / 2;
                }
                break;
            default:
                break;
        }

        Image bitmap = new Bitmap(towidth, toheight);

        Graphics g = 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 Rectangle(0, 0, towidth, toheight),
            new Rectangle(x, y, ow, oh),
            GraphicsUnit.Pixel);
        bool isok = false;
        try
        {
            bitmap.Save(thumbnailPath, ImageFormat.Jpeg);
            isok = true;
        }
        catch (Exception)
        {
            thumbnailPath = originalImagePath;
        }
        finally
        {
            originalImage.Dispose();
            bitmap.Dispose();
            g.Dispose();
        }
        return isok;
    }
    #endregion

    #region 在图片上生成图片水印
    public static void AddWaterPic(string Path, string Path_sypf)
    {
        try
        {
            Image image = Image.FromFile(Path);
            Image copyImage = Image.FromFile(Path_sypf);
            Graphics g = Graphics.FromImage(image);
            g.DrawImage(copyImage, new System.Drawing.Rectangle(image.Width - copyImage.Width, image.Height - copyImage.Height, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, System.Drawing.GraphicsUnit.Pixel);
            g.Dispose();

            image.Save(Path + ".temp");
            image.Dispose();
            System.IO.File.Delete(Path);
            File.Move(Path + ".temp", Path);
        }
        catch
        { }
    }
    #endregion

    private static void GetImgType()
    {
        htmimes[".jpe"] = "image/jpeg";
        htmimes[".jpeg"] = "image/jpeg";
        htmimes[".jpg"] = "image/jpeg";
        htmimes[".png"] = "image/png";
        htmimes[".tif"] = "image/tiff";
        htmimes[".tiff"] = "image/tiff";
        htmimes[".bmp"] = "image/bmp";
    }


    #region 返回新图片尺寸
    public static Size ResizeImage(int width, int height, int maxWidth, int maxHeight)
    {
        decimal MAX_WIDTH = (decimal)maxWidth;
        decimal MAX_HEIGHT = (decimal)maxHeight;
        decimal ASPECT_RATIO = MAX_WIDTH / MAX_HEIGHT;

        int newWidth, newHeight;

        decimal originalWidth = (decimal)width;
        decimal originalHeight = (decimal)height;

        if (originalWidth > MAX_WIDTH || originalHeight > MAX_HEIGHT)
        {
            decimal factor;
            if (originalWidth / originalHeight > ASPECT_RATIO)
            {
                factor = originalWidth / MAX_WIDTH;
                newWidth = Convert.ToInt32(originalWidth / factor);
                newHeight = Convert.ToInt32(originalHeight / factor);
            }
            else
            {
                factor = originalHeight / MAX_HEIGHT;
                newWidth = Convert.ToInt32(originalWidth / factor);
                newHeight = Convert.ToInt32(originalHeight / factor);
            }
        }
        else
        {
            newWidth = width;
            newHeight = height;
        }

        return new Size(newWidth, newHeight);

    }
    #endregion
}

}

你可能感兴趣的:(笔记)