zoukankan      html  css  js  c++  java
  • .net生成缩略图类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Drawing;
    using System.Drawing.Imaging;

    namespace common
    {
      public  class Thumbnail
      {
        private string _orgPath;
            private string _newPath;
            private double _width;
            private double _height;
            private double _orgWidth;
            private double _orgHeight;
            private Image image;
            /// <summary>
            /// 构造函数
            /// </summary>
            public  Thumbnail()
            {
            }
            /// <summary>
            /// 构造构数
            /// </summary>
            /// <param name="orgpath"></param>
            public Thumbnail(string orgpath)
            {
                this.OrgPath = orgpath;
                setWH();
            }
            /// <summary>
            /// 构造构数
            /// </summary>
            /// <param name="image"></param>
            public Thumbnail(Image image)
            {
                this.image = image;
                this.OrgHeight= image.Height;
                this.OrgWidth = image.Width;
            }
            /// <summary>
            ///
            /// </summary>
            /// <param name="orgpath">原路径</param>
            /// <param name="newpath">新路径</param>
            /// <param name="width">新宽度</param>
            /// <param name="height">新高度</param>
            /// <param name="orgwidth">原宽度</param>
            /// <param name="orgheight">原高度</param>
            public Thumbnail(string orgpath, string newpath, int width, int height, int orgwidth, int orgheight)
            {
                this.NewPath= newpath;
                this.OrgPath = orgpath;
                this.Width = width;
                this.Height= height;
                this.OrgWidth= orgwidth;
                this.OrgHeight = orgheight;
            }
            /// <summary>
            /// 原路径
            /// </summary>
            public string OrgPath
            {
                get
                {
                    return _orgPath;
                }
                set
                {
                    _orgPath = value;
                }
            }
            /// <summary>
            /// 新路径
            /// </summary>
            public string NewPath
            {
                get
                {
                    return _newPath;
                }
                set
                {
                    _newPath = value;
                }
            }
            /// <summary>
            /// 新高度
            /// </summary>
            public int Width
            {
                set
                {
                    _width = value;
                }
            }
            /// <summary>
            /// 新宽度
            /// </summary>
            public int Height
            {
                set { _height = value; }
            }
            /// <summary>
            /// 原宽度
            /// </summary>
            public int OrgWidth
            {
                set
                {
                    _orgWidth = value;
                }
            }
            /// <summary>
            /// 原高度
            /// </summary>
            public int OrgHeight
            {
                set
                {
                    _orgHeight = value;
                }
            }
            /// <summary>
            /// 产生缩略图
            /// </summary>
            public void Make()
            {
                if (!string.IsNullOrEmpty(_orgPath))
                {
                    image = Image.FromFile(_orgPath);
                }
                double w = _width;
                double h = _height;
             
                if (image.Width > w)
                {
                    CreateThumbnail(_newPath, w, h);
                }
                else
                {
                    image.Save(_newPath);

                }

            }
            /// <summary>
            /// 建立缩略图
            /// </summary>
            /// <param name="sFileDstPath">目标路径</param>
            /// <param name="LimitW">限制宽</param>
            /// <param name="LimitH">限制高</param>
            private void CreateThumbnail(string sFileDstPath, double LimitW, double LimitH)
            {
                if (this.image != null)
                {
                    System.Drawing.Image image = this.image as System.Drawing.Bitmap;
                    byte[] data;
                    ImageCodecInfo myImageCodecInfo;
                    System.Drawing.Imaging.Encoder myEncoder;
                    EncoderParameter myEncoderParameter;
                    EncoderParameters myEncoderParameters;
                    myImageCodecInfo = ImageCodecInfo.GetImageEncoders()[0];
                    myEncoder = System.Drawing.Imaging.Encoder.Quality;
                    myEncoderParameters = new EncoderParameters(1);
                    myEncoderParameter = new EncoderParameter(myEncoder, 100L);
                    myEncoderParameters.Param[0] = myEncoderParameter;
                    MemoryStream ms = new MemoryStream();
                    image.Save(ms, myImageCodecInfo, myEncoderParameters);
                    CreateThumbnail(ms.ToArray(), out data, LimitW, LimitH);
                    image = System.Drawing.Image.FromStream(new MemoryStream(data)) as System.Drawing.Bitmap;
                    image.Save(sFileDstPath);
                }
            }
            /// <summary>
            /// 生成缩略图纯数据
            /// </summary>
            /// <param name="data1">数据1</param>
            /// <param name="data2">数据2</param>
            /// <param name="LimitW">限宽</param>
            /// <param name="LimitH">限高</param>
            static public void CreateThumbnail(byte[] data1, out byte[] data2, double LimitW, double LimitH)
            {
                System.Drawing.Image image = System.Drawing.Image.FromStream(new MemoryStream(data1)) as System.Drawing.Bitmap;
                System.Drawing.SizeF size = new System.Drawing.SizeF(image.Width, image.Height);
                size.Width = (float)LimitW;
                size.Height = (float)LimitH;
                if (size.Height <= 0)
                {
                    size.Height = image.Height * size.Width / image.Width;
                }
                if (size.Width <= 0)
                {
                    size.Width = image.Width * size.Height / image.Height;
                }
                System.Drawing.Image bitmap = new System.Drawing.Bitmap(Convert.ToInt16(size.Width), Convert.ToInt16(size.Height));
                System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                g.Clear(Color.Transparent);
                Rectangle rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
                g.DrawImage(image, rect, new System.Drawing.Rectangle(0, 0, image.Width, image.Height), System.Drawing.GraphicsUnit.Pixel);
                ImageCodecInfo myImageCodecInfo;
                System.Drawing.Imaging.Encoder myEncoder;
                EncoderParameter myEncoderParameter;
                EncoderParameters myEncoderParameters;
                myImageCodecInfo = ImageCodecInfo.GetImageEncoders()[0];
                myEncoder = System.Drawing.Imaging.Encoder.Quality;
                myEncoderParameters = new EncoderParameters(1);
                myEncoderParameter = new EncoderParameter(myEncoder, 100L);
                myEncoderParameters.Param[0] = myEncoderParameter;
                MemoryStream ms = new MemoryStream();
                bitmap.Save(ms, myImageCodecInfo, myEncoderParameters);
                data2 = ms.ToArray();
                myEncoderParameter.Dispose();
                myEncoderParameters.Dispose();
                image.Dispose();
                bitmap.Dispose();
                g.Dispose();
                ms.Dispose();
            }
            /// <summary>
            /// 根据图片路径获取图片大小并设置
            /// </summary>
            private void setWH()
            {
                Bitmap bitmap = new Bitmap(_orgPath);
                this.OrgWidth = bitmap.Width;
                this.OrgHeight = bitmap.Height;
            }
        }
    }

  • 相关阅读:
    程序员丨学习编程需要攻克这 8 个壁垒,解决后编程能力显著提升!
    编程不难学,方法最重要!学习编程语言最好的方法是什么?
    Navicat for MySQL怎么往表中填数据
    WinForm开发(1)——DataGridView控件(1)——C# DataGridView控件用法介绍
    【C#】图解如何添加引用using MySql.Data.MySqlClient;
    源代码管理工具(2)——SVN(2)——第一次用SVN遇到的问题
    源代码管理工具(1)——SVN(1)——SVN 的使用新手指南,具体到步骤详细介绍----TortoiseSVN
    C#取整函数Math.Round、Math.Ceiling和Math.Floor
    服务器(2)——IIS(2)——IIS Express(1)——IIS跟IIS Express之间的区别和关系
    C# 连接 Oracle 的几种方式
  • 原文地址:https://www.cnblogs.com/stulife/p/1770932.html
Copyright © 2011-2022 走看看