asp.net 高质量缩略图

图片处理与压缩技巧
本文介绍了一种图片处理方法,包括如何按比例调整图片大小并保持原有画质,同时介绍了如何将图片转换为JPEG格式并设置不同的压缩质量。此外,还提供了一个简单的颜色量化类库示例。
2012-7-12:

 protected void Page_Load(object sender, EventArgs e)
 {
     string OriginalImgPath = @"C:\Users\LHTC\Desktop\ttttimg\ttttimg\imgtt\tt.jpg";
  //   string savepath = Path.ChangeExtension(OriginalImgPath, "jpg");
     string savepath = @"C:\Users\LHTC\Desktop\ttttimg\ttttimg\imgtt\tt1.jpg";
     System.Drawing.Image image = System.Drawing.Image.FromFile(OriginalImgPath);

     //System.Web.HttpPostedFile postedFile=Request.Files[0];
     
//System.Drawing.Image originalImage = System.Drawing.Image.FromStream(postedFile.InputStream, true);  

     SaveJpg(image, savepath, 1578475L);
     Response.Write("ok");
 }

 /// <summary>
 
///  自适应按比例 上传保存
 
/// </summary>
 
/// <param name="OriginalImgPath">上传图片路径</param>
 
/// <param name="SavePath">保存路径</param>
 
/// <param name="Width">缩略图宽</param>
 
/// <param name="Height">缩略图高</param>
 
/// <param name="Quality">质量 75L</param>
 private static void SaveJpg(System.Drawing.Image OriginalImage, string SavePath, int Width, int Height, long Quality)
 {
     var rotatedImage = OriginalImage.Clone() as System.Drawing.Image;
     Size thumbnailSize = GetThumbnailSize(rotatedImage, Width, Height);
     Bitmap newImage = new Bitmap(thumbnailSize.Width, thumbnailSize.Height, PixelFormat.Format24bppRgb);
     newImage.SetResolution(7272);
     using (Graphics gr = Graphics.FromImage(newImage))
     {
         gr.Clear(Color.Transparent);
         gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
         gr.SmoothingMode = SmoothingMode.AntiAlias;
         gr.CompositingQuality = CompositingQuality.HighQuality;
         gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
         gr.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
         using (var attribute = new ImageAttributes())
         {
             attribute.SetWrapMode(WrapMode.TileFlipXY);
             gr.DrawImage(OriginalImage, new Rectangle(new Point(00), thumbnailSize), 00, OriginalImage.Width, OriginalImage.Height, GraphicsUnit.Pixel, attribute);
         }
     }
     ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/jpeg");
     Encoder myEncoder = Encoder.Quality;
     EncoderParameters myEncoderParameters = new EncoderParameters(1);
     EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, Quality);
     myEncoderParameters.Param[0] = myEncoderParameter;
     newImage.Save(SavePath, myImageCodecInfo, myEncoderParameters);
 }


 //根据长宽自适应 按原图比例缩放 
 private static Size GetThumbnailSize(System.Drawing.Image original, int desiredWidth, int desiredHeight)
 {
     var widthScale = (double)desiredWidth / original.Width;
     var heightScale = (double)desiredHeight / original.Height;
     var scale = widthScale < heightScale ? widthScale : heightScale;
     return new Size
                    {
                        Width = (int)(scale * original.Width),
                        Height = (int)(scale * original.Height)
                    };
 }
 private static ImageCodecInfo GetEncoderInfo(String mimeType)
 {
     int j;
     ImageCodecInfo[] encoders;
     encoders = ImageCodecInfo.GetImageEncoders();
     for (j = 0; j < encoders.Length; ++j)
     {
         if (encoders[j].MimeType == mimeType)
             return encoders[j];
     }
     return null;
 }


 public static void imgSmo(string strPath, string strName, string strType, int i)
    {
        try
        {              
            string path = strPath + strName + strType;
            System.Drawing.Image oImage = System.Drawing.Image.FromFile(path);

            Size imageSize = GetImageSize(oImage,160,70);
            System.Drawing.Imaging.ImageFormat thisFormat = oImage.RawFormat;


            int oWidth = oImage.Width; //原图宽度
              int oHeight = oImage.Height; //原图高度

              Bitmap tImage = new Bitmap(imageSize.Width, imageSize.Height);
            Graphics g = Graphics.FromImage(tImage);
            
            //质量
              g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

            g.Clear(Color.Transparent);
            g.DrawImage(oImage, new Rectangle(0, 0, imageSize.Width, imageSize.Height), new Rectangle(0, 0, oWidth, oHeight), GraphicsUnit.Pixel);
            g.Dispose();

            //JPEG
            System.Drawing.Imaging.EncoderParameters encoderParams = new System.Drawing.Imaging.EncoderParameters();
            long[] quality = new long[1];
            quality[0] = 75;
            System.Drawing.Imaging.EncoderParameter encoderParam = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
            encoderParams.Param[0] = encoderParam;

            System.Drawing.Imaging.ImageCodecInfo[] arrayICI = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
            System.Drawing.Imaging.ImageCodecInfo jpegICI = null;
            for (int x = 0; x < arrayICI.Length; x++)
            {
                if (arrayICI[x].FormatDescription.Equals("JPEG"))
                {
                    jpegICI = arrayICI[x];
                    break;
                }
            }


            string newPath = strPath + strName + i + strType;
  
            if (jpegICI != null)
            {
                tImage.Save(newPath, jpegICI, encoderParams);
            }
            else
            {
                tImage.Save(newPath, thisFormat);
            }


            oImage.Dispose();
            tImage.Dispose();
         
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }

    }





 public static Size GetImageSize(System.Drawing.Image picture,int width,int height)
    {
        Size imageSize=new Size(width,height);//初始化

      
        //按比例缩小放大

         double heightRatio = (double)picture.Height / picture.Width;
        double widthRatio = (double)picture.Width / picture.Height;

        int desiredHeight = imageSize.Height;
        int desiredWidth = imageSize.Width;

        imageSize.Height = desiredHeight;
        if (widthRatio > 0)
            imageSize.Width = Convert.ToInt32(imageSize.Height * widthRatio);

        if (imageSize.Width > desiredWidth)
        {
            imageSize.Width = desiredWidth;
            imageSize.Height = Convert.ToInt32(imageSize.Width * heightRatio);
        }

        return imageSize;
    }






此颜色量化类库的使用,也非常简单:

using (Bitmap bmp = new Bitmap(...))
 {
    OctreeQuantizer quantizer = new OctreeQuantizer ( 255 , 8 ) ;
//两个参数为颜色值,和颜色深度
using ( Bitmap quantized = quantizer.Quantize ( image ) )
        {
Response.ContentType = "image/gif" ;
quantized.Save ( Response.OutputStream , ImageFormat.Gif ) ;
}
}

转载于:https://www.cnblogs.com/zengxiangzhan/archive/2009/09/17/1568535.html

多源数据接入 支持校园各业务系统数据接入:包括教务系统(学生成绩、课程信息)、学工系统(奖惩记录、资助信息)、后勤系统(宿舍分配、能耗数据)、图书馆系统(借阅记录、馆藏信息)、一卡通系统(消费数据、门禁记录)等。 接入方式:提供数据库直连(MySQL、SQL Server)、文件导入(CSV、Excel、JSON)、API 接口调用等多种方式,支持实时同步与定时批量同步。 数据标准化与治理 建立校园数据标准体系:统一数据格式(如日期格式、学号编码规则)、定义核心数据元(如 “学生” 包含学号、姓名、专业等必选字段)、规范代码集(如性别代码 “1 - 男,2 - 女”)。 数据清洗:自动检测并处理缺失值、重复值、异常值(如成绩 > 100 分),通过规则引擎实现数据校验(如 “学生年龄需在 16-30 岁之间”)。 元数据管理:记录数据来源、格式、更新频率、负责人等信息,生成数据血缘图谱,追踪数据从产生到应用的全生命周期。 二、数据共享与交换核心功能 分布式数据存储 基于 Hadoop HDFS 实现海量数据存储:结构化数据(成绩、消费记录)存入 HBase,非结构化数据(文档、图片、视频)直接存储于 HDFS,日志类数据通过 Flume 采集至 HDFS。 支持数据分片与副本机制,确保数据高可用(默认 3 副本存储),满足校园 PB 级数据存储需求。 数据交换引擎 构建点对点数据交换通道:各部门系统可通过交换引擎向平台上传数据或申请获取授权数据,支持同步 / 异步交换模式。 交换流程管理:定义数据交换规则(如 “学工系统每日向平台同步新增学生信息”),记录交换日志(成功 / 失败状态、数据量),失败时自动重试。 数据脱敏:对敏感数据(如身份证号、银行卡号)在交换过程中进行脱敏处理(如显示 “110********5678”),兼顾共享与隐私保护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值