C#压缩图片算法

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用
    using System.IO;  
    using System.Drawing;  
    using System.Drawing.Imaging;  
    using System;  
    namespace Bll  
    {  
        /// <summary>  
        /// 图片处理类  
        /// 1、生成缩略图片或按照比例改变图片的大小和画质  
        /// 2、将生成的缩略图放到指定的目录下  
        /// </summary>  
        public class ImageHepler  
        {  
            public Image ResourceImage, ReducedImage;  
            private int ImageWidth;  
            private int ImageHeight;  
            public string ErrMessage;  
      
            /// <summary>  
            /// 类的构造函数  
            /// </summary>  
            /// <param name="ImageFileName">图片文件的全路径名称</param>  
            public ImageHepler(string ImageFileName)  
            {  
                ResourceImage = Image.FromFile(ImageFileName);  
                ErrMessage = "";  
            }  
      
            public bool ThumbnailCallback()  
            {  
                return false;  
            }  
      
            /// <summary>  
            /// 生成缩略图,返回缩略图的Image对象  
            /// </summary>  
            /// <param name="Width">缩略图的宽度</param>  
            /// <param name="Height">缩略图的高度</param>  
            /// <returns>缩略图的Image对象</returns>  
            public Image GetReducedImage(int Width, int Height)  
            {  
                double LengthLong;          //存储(长和宽中)较短的长度  
                int widthOK, heightOK;      //存储实际要生成的图片的长宽  
                if (Width < Height)         //判断输入的长和宽那个较短  
                {  
                    LengthLong = Width;     //把较短的存储在 LengthLonh 用于计算  
                }  
                else  
                {  
                    LengthLong = Height;  
                }  
                try  
                {  
                    //判断原图片 长和宽   
                    //原图比较长的一个边要和缩略图的边相等  
                    if (ResourceImage.Width > ResourceImage.Height)  
                    {  
                        widthOK = (int)LengthLong;  
                        heightOK = (int)(LengthLong / ResourceImage.Width * ResourceImage.Height);  
                    }  
                    else  
                    {  
                        heightOK = (int)LengthLong;  
                        widthOK = (int)LengthLong / ResourceImage.Height * ResourceImage.Width;  
      
                    }  
                    Image ReducedImage;  
                    Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);  
                    ReducedImage = ResourceImage.GetThumbnailImage(widthOK, heightOK, callb, IntPtr.Zero);  
                    return ReducedImage;  
                }  
                catch (Exception e)  
                {  
                    ErrMessage = e.Message;  
                    return null;  
                }  
            }  
      
            /// <summary>  
            /// 生成缩略图,将缩略图文件保存到指定的路径  
            /// </summary>  
            /// <param name="Width">缩略图的宽度</param>  
            /// <param name="Height">缩略图的高度</param>  
            /// <param name="targetFilePath">缩略图保存的全文件名,(带路径),参数格式:D:\Images\filename.jpg</param>  
            /// <returns>成功返回true,否则返回false</returns>  
            public bool GetReducedImage(int Width, int Height, string targetFilePath)  
            {  
                double LengthLong;          //存储(长和宽中)较短的长度  
                int widthOK, heightOK;      //存储实际要生成的图片的长宽  
                if (Width < Height)         //判断输入的长和宽那个较短  
                {  
                    LengthLong = Width;     //把较短的存储在 LengthLonh 用于计算  
                }  
                else  
                {  
                    LengthLong = Height;  
                }  
                try  
                {  
                    //判断原图片 长和宽   
                    //原图比较长的一个边要和缩略图的边相等  
                    if (ResourceImage.Width > ResourceImage.Height)  
                    {  
                        widthOK = (int)LengthLong;  
                        heightOK = (int)(LengthLong / ResourceImage.Width * ResourceImage.Height);  
                    }  
                    else  
                    {  
                        heightOK = (int)LengthLong;  
                        widthOK = (int)LengthLong / ResourceImage.Height * ResourceImage.Width;  
                    }  
                    Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);  
                    ReducedImage = ResourceImage.GetThumbnailImage(widthOK, heightOK, callb, IntPtr.Zero);  
                    ReducedImage.Save(@targetFilePath, ImageFormat.Jpeg);  
                    //ReducedImage.Dispose();  
                    return true;  
                }  
                catch (Exception e)  
                {  
                    ErrMessage = e.Message;  
                    return false;  
                }  
            }  
      
            /// <summary>  
            /// 生成缩略图,返回缩略图的Image对象  
            /// </summary>  
            /// <param name="Percent">缩略图的宽度百分比 如:需要百分之80,就填0.8</param>    
            /// <returns>缩略图的Image对象</returns>  
            public Image GetReducedImage(double Percent)  
            {  
                try  
                {  
                    Image ReducedImage;  
                    Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);  
                    ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);  
                    ImageHeight = Convert.ToInt32(ResourceImage.Width * Percent);  
                    ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);  
                    return ReducedImage;  
                }  
                catch (Exception e)  
                {  
                    ErrMessage = e.Message;  
                    return null;  
                }  
            }  
      
            /// <summary>  
            /// 生成缩略图,返回缩略图的Image对象  
            /// </summary>  
            /// <param name="Percent">缩略图的宽度百分比 如:需要百分之80,就填0.8</param>    
            /// <param name="targetFilePath">缩略图保存的全文件名,(带路径),参数格式:D:\Images\filename.jpg</param>  
            /// <returns>成功返回true,否则返回false</returns>  
            public bool GetReducedImage(double Percent, string targetFilePath)  
            {  
                try  
                {  
                    Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);  
                    ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);  
                    ImageHeight = Convert.ToInt32(ResourceImage.Width * Percent);  
                    ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);  
                    ReducedImage.Save(@targetFilePath, ImageFormat.Jpeg);  
                    //ReducedImage.Dispose();  
                    return true;  
                }  
                catch (Exception e)  
                {  
                    ErrMessage = e.Message;  
                    return false;  
                }  
            }  
        }  
    }  


[csharp] view plaincopy

    using System;  
    using System.Data;  
    using System.Configuration;  
    using System.Linq;  
    using System.Web;  
    using System.IO;  
    using System.Collections;  
    using System.Collections.Generic;  
    using System.Security.AccessControl;  
    using System.Security.Permissions;  
    namespace Bll  
    {  
        public class FolderHelper  
        {  
            //判断文件夹是否存在  
            public static bool checkFolderExits(string path)  
            {  
                DirectoryInfo dir = new DirectoryInfo(path);  
                if (dir.Exists)//文件夹存在  
                {     
                    return true;  
                }  
                else  
                {  
                   //dir.Create();//不存在就创建一个  
                    return false;  
                }  
            }  
            //创建一个文件夹,存在就创建失败  
            public static bool CreateNewFolder(string path)  
            {  
                DirectoryInfo dir = new DirectoryInfo(path);  
      
                if (!dir.Exists)  
                {  
                    dir.Create();  
                    return true;  
                }  
                else  
                    return false;  
            }  
            /// <summary>  
            /// 在指定目录下创建指定名称文件夹  
            /// </summary>  
            /// <param name="ParentsPath"></param>  
            /// <param name="NewFolderName"></param>  
            /// <returns></returns>  
            public static bool CreateNewFolder(string ParentsPath, string NewFolderName)  
            {  
                string CreatePath = ParentsPath + @"\" + NewFolderName;  
                DirectoryInfo dir = new DirectoryInfo(CreatePath);  
      
                if (!dir.Exists)  
                {  
                    dir.Create();  
                    return true;  
                }  
                else  
                    return false;  
            }  
            /// <summary>  
            /// 返回目录下的所有文件名  
            /// </summary>  
            /// <param name="path"></param>  
            /// <returns></returns>  
            public static ArrayList getAllFiles(string path)  
            {  
                DirectoryInfo dir = new DirectoryInfo(path);  
                if (dir.Exists)  
                {  
                    FileInfo[] fileinfo = dir.GetFiles();  
                    ArrayList list = new ArrayList();  
                    foreach (FileInfo f in fileinfo)  
                    {  
                        list.Add(f.Name);  
                    }  
                    return list;  
                }  
                else  
                    return null;  
            }  
            /// <summary>  
            /// 计算文件夹的大小  
            /// </summary>  
            /// <param name="d"></param>  
            /// <returns></returns>  
            public static long DirSize(DirectoryInfo d)  
            {  
                long Size = 0;  
                // Add file sizes.  
                FileInfo[] fis = d.GetFiles();//获得目录文件列表  
                foreach (FileInfo fi in fis)  
                {  
                    Size += fi.Length;  
                }  
                // Add subdirectory sizes.  
                DirectoryInfo[] dis = d.GetDirectories();//获取目录子目录列表  
                foreach (DirectoryInfo di in dis)  
                {  
                    Size += DirSize(di);  
                }  
                return Size;  
            }  
            /// <summary>  
            /// 把文件夹得大小转换成比较合适的表示单位  
            /// </summary>  
            /// <param name="size"></param>  
            /// <returns></returns>  
            public static string ViewSize(long size)  
            {  
                long m=size;  
                string viewstr;  
                  
                if ((m / 1024) > 0)//表示可以转换成KB  
                {  
                    m = m / 1024;//转换成KB  
                      
                    if ((m / 1024) > 0)//表示可以转换成MB  
                    {  
                        m = m / 1024;//转换成MB了  
      
                        if ((m / 1024) > 0)//表示可以转换成GB  
                        {  
                            m = m / 1024;//转换成GB了  
                            viewstr = m.ToString() + "GB";  
                        }  
                        else  
                        {  
                            viewstr = m.ToString() + "MB";  
                        }  
                    }  
                    else  
                    {  
                        viewstr = m.ToString() + "KB";  
                    }  
                }  
                else  
                {  
                    viewstr = m.ToString() + "byte";  
                }  
                return viewstr;  
            }  
            /// <summary>  
            /// 删除指定目录和内容  
            /// </summary>  
            /// <param name="dir"></param>  
            /// <returns></returns>  
            public static bool delDir(string dir)  
            {  
                bool flag = false;  
                DirectoryInfo d = new DirectoryInfo(dir);  
                if (d.Exists)//判断目录是否存在  
                {  
                    try  
                    {  
                        d.Delete();  
                        flag = true;  
                    }  
                    catch (Exception e) { flag = false; }  
                }  
                return flag;  
            }  
            /// <summary>  
            /// 删除指定文件  
            /// </summary>  
            /// <param name="fil"></param>  
            /// <returns></returns>  
            public static bool delFile(string fil)  
            {  
                bool flag = false;  
                FileInfo d = new FileInfo(fil);  
                if (d.Exists)//判断目录是否存在  
                {  
                    try  
                    {  
                        d.Delete();  
                        flag = true;  
                    }  
                    catch (Exception e) { flag = false; }  
                }  
                return flag;  
            }  
            public static void Copy(string sourceDirectory, string targetDirectory)  
            {  
                DirectoryInfo diSource = new DirectoryInfo(sourceDirectory);  
                DirectoryInfo diTarget = new DirectoryInfo(targetDirectory);  
      
                CopyAll(diSource, diTarget);  
            }  
            /// <summary>  
            /// 复制目录及子文件到指定目录  
            /// </summary>  
            /// <param name="source"></param>  
            /// <param name="target"></param>  
            public static void CopyAll(DirectoryInfo source, DirectoryInfo target)  
            {  
                // Check if the target directory exists, if not, create it.  
                if (Directory.Exists(target.FullName) == false)  
                {  
                    Directory.CreateDirectory(target.FullName);  
                }  
      
                // Copy each file into it's new directory.  
                foreach (FileInfo fi in source.GetFiles())  
                {  
                    Console.WriteLine(@"Copying {0}\{1}", target.FullName, fi.Name);  
                    fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);  
                }  
      
                // Copy each subdirectory using recursion.  
                foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())  
                {  
                    DirectoryInfo nextTargetSubDir =  
                        target.CreateSubdirectory(diSourceSubDir.Name);  
                    CopyAll(diSourceSubDir, nextTargetSubDir);  
                }  
            }  
      
      
      
            /// <summary>  
            /// 循环读取某个目录下的所有文件和目录,查询有关每一项的一些信息。返回一个文件列表  
            /// </summary>  
            /// <param name="strCurrentDir"></param>  
            public static List<fileEntity> FileView(string strCurrentDir)  
            {  
                List<fileEntity> fileList = new List<fileEntity>();  
                DirectoryInfo dir = new DirectoryInfo(strCurrentDir);  
      
                foreach (FileSystemInfo fsi in dir.GetFileSystemInfos())//这个循环再读取文件的信息  
                {  
                    try  
                    {  
                        //FileSystemInfo 对象可以表示文件或目录,从而可以作为 FileInfo 或 DirectoryInfo 对象的基础。 当分析许多文件和目录时,请使用该基类。  
                        FileInfo fi;  
                        DirectoryInfo di;  
                        //创建一个自己写的实体类的实体  
                        fileEntity newfile = new fileEntity();  
                        if (fsi is FileInfo)//外层循环读取文件信息  
                        {  
                            //表示当前fsi是文件  
                            fi = (FileInfo)fsi;  
                            newfile.fileName = fi.Name;  
                            newfile.fileExt = fi.Extension;  
                            newfile.fileSize = fi.Length;  
                            newfile.FileModify = fi.LastWriteTime;  
                            //通过扩展名来选择文件显示图标  
                            switch (newfile.fileExt)  
                            {  
                                case ".gif":  
                                    newfile.picName = "gif.gif";  
                                    break;  
                                default:  
                                    newfile.picName = "other.gif";  
                                    break;  
                            }  
                            newfile.picName = "<img src='" + newfile.picName + "' width=25 height=20>";  
                        }  
                        else  
                        {  
                            di = (DirectoryInfo)fsi;  
                            newfile.fileName = di.Name;  
                            newfile.fileSize = DirSize(di);//调用计算文件夹大小的方法  
                            newfile.FileModify = di.LastWriteTime;  
                            newfile.picName = "<img src='directory.gif' width=25 height=20>";  
                        }  
                        fileList.Add(newfile);  
                    }  
                    catch (Exception e) { }  
                }  
                return fileList;  
      
            }  
      
      
            /// <summary>  
            /// 显示目录和文件  
            /// </summary>  
            /// <param name="path"></param>  
            public static void All(string path)  
            {  
                FileInfo fi;//文件  
                DirectoryInfo di;//目录  
                DirectoryInfo dir=null;  
                int i = 0; //控制行的颜色  
                try  
                {  
                    dir = new DirectoryInfo(path);  
                }  
                catch (Exception e) { }  
                foreach (FileSystemInfo fsi in dir.GetFileSystemInfos())  
                {  
                    try  
                    {  
                        fileEntity newfile = new fileEntity();  
                        FolderEntity folder = new FolderEntity();  
                        newfile.fileName = "";  
                        newfile.picName = "";  
                        newfile.fileExt = "";  
                        newfile.fileSize = 0;  
                        folder.folderName = "";  
                        folder.picName = "";  
      
                        i += 1;  
                        if (fsi is FileInfo)//判断当前读取的是不是一个文件  
                        {  
                            //表示当前fsi是文件  
                            fi = (FileInfo)fsi;  
                            newfile.fileName = fi.Name;  
                            newfile.fileExt = fi.Extension;  
                            newfile.fileSize = fi.Length;  
                            newfile.FileModify = fi.LastWriteTime;  
      
                            //将文件加上可以下载文件的链接  
      
      
                            newfile.fileName = "<a href='........'></a>";  
      
      
                            //通过扩展名来选择文件显示图标  
      
                            //Response.Write(Session["DataBasePath"].ToString()+"\\filetype\\"+pfun.getFileExt(FileExt)+".gif");  
      
                            if (fsi.Exists)  
                            {  
                                switch (newfile.fileExt)  
                                {  
                                    case ".gif":  
                                        newfile.picName = "gif.gif";  
                                        break;  
                                    default:  
                                        newfile.picName = "other.gif";  
                                        break;  
                                }  
                            }  
                            else  
                            {  
                                newfile.picName = "unknown.gif";  
                            }  
      
      
                            /* 
                            switch(FileExt) 
                            { 
                                case ".gif": 
                                    FilePic = "gif.gif"; 
                                    break; 
                                default: 
                                    FilePic = "other.gif"; 
                                    break; 
                            } 
                            */  
      
                            newfile.picName = "<img src='filetype/" + newfile.picName + "' width=16 height=16>";  
      
                        }  
                        else  
                        {  
                            //当前为目录  
                            di = (DirectoryInfo)fsi;  
                            folder.folderName = di.Name;  
      
                            //给目录加上链接  
      
                            folder.folderName = "<a href='.......'><a>";  
                            folder.lastTime = di.LastWriteTime;  
                            folder.picName = "<img src='filetype/folder.gif' width=16 height=16>";  
      
                        }  
                    }catch(Exception e){}  
                }  
      
      
            }  
        }  
    }  

标签: isp

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:Boyer-Moore算法java实现

下一篇:c#xml文档操作类(2)