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;
            }
        }
    }

  • 相关阅读:
    cf492D Vanya and Computer Game
    cf492C Vanya and Exams
    cf492A Vanya and Cubes
    bzoj2038 [2009国家集训队]小Z的袜子(hose)
    bzoj3781 小B的询问
    bzoj1858 [Scoi2010]序列操作
    bzoj1060 [ZJOI2007]时态同步
    算法学习心得
    bzoj1054 [HAOI2008]移动玩具
    bzoj3437 小P的牧场
  • 原文地址:https://www.cnblogs.com/stulife/p/1770932.html
Copyright © 2011-2022 走看看