zoukankan      html  css  js  c++  java
  • c# 压缩保存图片


    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Drawing.Imaging;
    using System.Drawing;
    
    /// <SUMMARY>
    ///MakeThum 的摘要说明
    /// </SUMMARY>
    
    namespace XinPai.Web
    {
        public class MakeThum
        {
            public MakeThum()
            {
                //
                //TODO: 在此处添加构造函数逻辑
                //
            }
    
            /// <SUMMARY>
            /// 生成缩略图//带压缩图片不压缩22k压缩2k
            /// </SUMMARY>
            /// <PARAM name="originalImagePath" />原始路径
            /// <PARAM name="thumbnailPath" />生成缩略图路径
            /// <PARAM name="width" />缩略图的宽
            /// <PARAM name="height" />缩略图的高
            //是否压缩图片质量
            public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, bool Ys)
            {
                //获取原始图片  
                System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);
                //缩略图画布宽高  
                int towidth = width;
                int toheight = height;
                //原始图片写入画布坐标和宽高(用来设置裁减溢出部分)  
                int x = 0;
                int y = 0;
                int ow = originalImage.Width;
                int oh = originalImage.Height;
                //原始图片画布,设置写入缩略图画布坐标和宽高(用来原始图片整体宽高缩放)  
                int bg_x = 0;
                int bg_y = 0;
                int bg_w = towidth;
                int bg_h = toheight;
                //倍数变量  
                double multiple = 0;
                //获取宽长的或是高长与缩略图的倍数  
                if (originalImage.Width >= originalImage.Height)
                    multiple = (double) originalImage.Width/(double) width;
                else
                    multiple = (double) originalImage.Height/(double) height;
                //上传的图片的宽和高小等于缩略图  
                if (ow <= width && oh <= height)
                {
                    //缩略图按原始宽高  
                    bg_w = originalImage.Width;
                    bg_h = originalImage.Height;
                    //空白部分用背景色填充  
                    bg_x = Convert.ToInt32(((double) towidth - (double) ow)/2);
                    bg_y = Convert.ToInt32(((double) toheight - (double) oh)/2);
                }
                    //上传的图片的宽和高大于缩略图  
                else
                {
                    //宽高按比例缩放  
                    bg_w = Convert.ToInt32((double) originalImage.Width/multiple);
                    bg_h = Convert.ToInt32((double) originalImage.Height/multiple);
                    //空白部分用背景色填充  
                    bg_y = Convert.ToInt32(((double) height - (double) bg_h)/2);
                    bg_x = Convert.ToInt32(((double) width - (double) bg_w)/2);
                }
                //新建一个bmp图片,并设置缩略图大小.  
                System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
                //新建一个画板  
                System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
                //设置高质量插值法  
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
                //设置高质量,低速度呈现平滑程度  
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                //清空画布并设置背景色  
                g.Clear(System.Drawing.ColorTranslator.FromHtml("#FFF"));
                //在指定位置并且按指定大小绘制原图片的指定部分  
                //第一个System.Drawing.Rectangle是原图片的画布坐标和宽高,第二个是原图片写在画布上的坐标和宽高,最后一个参数是指定数值单位为像素  
                g.DrawImage(originalImage, new System.Drawing.Rectangle(bg_x, bg_y, bg_w, bg_h),
                    new System.Drawing.Rectangle(x, y, ow, oh), System.Drawing.GraphicsUnit.Pixel);
                if (Ys)
                {
                    System.Drawing.Imaging.ImageCodecInfo encoder = GetEncoderInfo("image/jpeg");
                    try
                    {
                        if (encoder != null)
                        {
                            System.Drawing.Imaging.EncoderParameters encoderParams =
                                new System.Drawing.Imaging.EncoderParameters(1);
                            //设置 jpeg 质量为 60
                            encoderParams.Param[0] =
                                new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality,
                                    (long) 60);
                            bitmap.Save(thumbnailPath, encoder, encoderParams);
                            encoderParams.Dispose();
                        }
                    }
                    catch (System.Exception e)
                    {
                        throw e;
                    }
                    finally
                    {
                        originalImage.Dispose();
                        bitmap.Dispose();
                        g.Dispose();
                    }
    
                }
                else
                {
    
                    try
                    {
                        //获取图片类型  
                        string fileExtension = System.IO.Path.GetExtension(originalImagePath).ToLower();
                        //按原图片类型保存缩略图片,不按原格式图片会出现模糊,锯齿等问题.  
                        switch (fileExtension)
                        {
                            case ".gif":
                                bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Gif);
                                break;
                            case ".jpg":
                                bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
                                break;
                            case ".bmp":
                                bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Bmp);
                                break;
                            case ".png":
                                bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Png);
                                break;
                        }
                    }
                    catch (System.Exception e)
                    {
                        throw e;
                    }
                    finally
                    {
                        originalImage.Dispose();
                        bitmap.Dispose();
                        g.Dispose();
                    }
    
                }
    
            }
    
            private static System.Drawing.Imaging.ImageCodecInfo GetEncoderInfo(string mimeType)
            {
                //根据 mime 类型,返回编码器
                System.Drawing.Imaging.ImageCodecInfo result = null;
                System.Drawing.Imaging.ImageCodecInfo[] encoders = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
                for (int i = 0; i < encoders.Length; i++)
                {
                    if (encoders[i].MimeType == mimeType)
                    {
                        result = encoders[i];
                        break;
                    }
                }
                return result;
            }
        }
    }
    MakeThum:生成缩略图类
            /// <summary>
            /// 加载图片
            /// </summary>
            private void LoadImageFile()
            {
                var imageFileExePosition = Environment.CurrentDirectory;
                var imageFilePosition = imageFileExePosition + @"ImageFile";
    
                try
                {
                    var contentImageFile = imageFileExePosition + "\Content\ImageFile";
                    if (Directory.Exists(contentImageFile))
                    {
                        Directory.Delete(contentImageFile, true);
                    }
                    Directory.CreateDirectory(contentImageFile);
    
                    var path = imageFilePosition;
    
    
                    var types = new[] { "jpg", "jpeg", "png", "bmp" };
                    foreach (var type in types)
                    {
                        var imgPaths = Directory.GetFileSystemEntries(path, "*." + type, SearchOption.AllDirectories);
                        foreach (var img in imgPaths)
                        {
    
                            FileInfo f = new FileInfo(img);
                            var name = f.FullName.Replace("\ImageFile", "\Content\ImageFile");
    
                            FileInfo f1 = new FileInfo(name);
                            if (!Directory.Exists(f1.DirectoryName))
                            {
                                Directory.CreateDirectory(f1.DirectoryName);
                            }
                            // f.CopyTo(name,true);
    
    
                            //if (!f.Name.Contains("min-"))
                            //{
                            //    if (f.Name.Contains("min"))
                            //    {
                            //        var name = f.FullName.Replace("\min", "\min-");
                            //        f.MoveTo(name);
                            //    }
                            //}
                            MakeThum.MakeThumbnail(f.FullName, name, 500, true);
                        }
                    }
    
                }
    
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    return;
                }
            }
  • 相关阅读:
    Xen, Linux and udev
    xend的调试方法
    xenstored为什么不能重启?
    [转]xen虚拟windows使用vnc桌面鼠标位置偏移现象的解决
    基于模板的代码生成器
    区分JavaScript中的undefined,null和NaN
    ExtJS+ASP.NET实现异步Tree的节点搜索和查找下一个(FindNext)
    ExtJS+ASP.NET实现Tree节点的拖动(DragDrop)
    ExtJS+ASP.NET实现真实的进度条显示服务器端长时间操作的进度
    说说企业架构(企业级架构)和应用程序架构
  • 原文地址:https://www.cnblogs.com/bkycjj/p/3677100.html
Copyright © 2011-2022 走看看