zoukankan      html  css  js  c++  java
  • 压缩图片算法

    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:Imagesfilename.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:Imagesfilename.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;
                }
            }
        }
    }

    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){}
                }
    
    
            }
        }
    }
    

  • 相关阅读:
    mvn -v提示Permission denied
    JMeter生成HTML报告
    Python数据可视化神器pyecharts
    ThinkPHP 3.2.3 使用 Swift Mailer 邮件系统发送邮件
    qt的webkit
    Windows Driver Kit Version 7.1.0 ( 也就是 7600.16385.1 ) 下载地址
    erlang的调试配置
    emacs之开始就加载tag
    emacs之配置etags-select
    emacs之配置yasnippet
  • 原文地址:https://www.cnblogs.com/zhujunxxxxx/p/3344867.html
Copyright © 2011-2022 走看看