源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C#图片按比例缩放的实现代码

  • 时间:2021-09-22 04:42 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#图片按比例缩放的实现代码
[u]复制代码[/u] 代码如下:
using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; namespace Publics {     public class ImgHelper     {         public static void AdjustPhoto(int toWidth, int toHeight, string filePath, string fromFileName, string toFileName, int maxWidth, int maxHeight)         {             Image originalImage = Image.FromFile(filePath + "/" + fromFileName);             //如果尺寸不够返回保存原图             if (originalImage.Width < toWidth && originalImage.Height < toHeight)             {                 originalImage.Save(filePath + "/" + toFileName);                 originalImage.Dispose();                 return;             }             //根据图片大小获取新图片从原图片截取的区域             int x, y, w, h;             if (toHeight > 0)             {                 if (toWidth > 0)                 {                     if (originalImage.Width > toWidth && originalImage.Height > toHeight)                     {                         w = toWidth;                         h = toWidth * originalImage.Height / originalImage.Width;                         if (h > toHeight)                         {                             h = toHeight;                             w = toHeight * originalImage.Width / originalImage.Height;                             x = (toWidth - w) / 2;                             y = 0;                         }                         else                         {                             x = 0;                             y = (toHeight - h) / 2;                         }                     }                     else if (originalImage.Width > toWidth)                     {                         w = toWidth;                         h = toWidth * originalImage.Height / originalImage.Width;                         x = 0;                         y = (toHeight - h) / 2;                     }                     else if (originalImage.Height > toHeight)                     {                         h = toHeight;                         w = toHeight * originalImage.Width / originalImage.Height;                         x = (toWidth - w) / 2;                         y = 0;                     }                     else                     {                         w = originalImage.Width;                         h = originalImage.Height;                         x = (toWidth - w) / 2;                         y = (toHeight - h) / 2;                     }                 }                 else                 {                     if (originalImage.Height > maxHeight)                     {                         toWidth = toHeight * originalImage.Width / originalImage.Height;                         x = 0;                         y = 0;                         w = toWidth;                         h = toHeight;                     }                     else                     {                         x = 0;                         y = 0;                         w = originalImage.Width;                         h = originalImage.Height;                         toWidth = originalImage.Width;                         toHeight = originalImage.Height;                     }                 }             }             else             {                 if (originalImage.Width > maxWidth)                 {                     toHeight = toWidth * originalImage.Height / originalImage.Width;                     x = 0;                     y = 0;                     w = toWidth;                     h = toHeight;                 }                 else                 {                     x = 0;                     y = 0;                     w = originalImage.Width;                     h = originalImage.Height;                     toWidth = originalImage.Width;                     toHeight = originalImage.Height;                 }             }             Bitmap bm = new Bitmap(toWidth, toHeight);             Graphics g = Graphics.FromImage(bm);             g.SmoothingMode = SmoothingMode.HighQuality;             g.InterpolationMode = InterpolationMode.HighQualityBicubic;             g.Clear(Color.White);             g.DrawImage(originalImage, new Rectangle(x, y, w, h), 0, 0, originalImage.Width, originalImage.Height, GraphicsUnit.Pixel);             long[] quality = new long[1];             quality[0] = 80;             EncoderParameters encoderParams = new EncoderParameters();             EncoderParameter encoderParam = new EncoderParameter(Encoder.Quality, quality);             encoderParams.Param[0] = encoderParam;             ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();//获得包含有关内置图像编码解码器的信息的ImageCodecInfo 对象。             ImageCodecInfo jpegICI = null;             for (int i = 0; i < arrayICI.Length; i++)             {                 if (arrayICI[i].FormatDescription.Equals("JPEG"))                 {                     jpegICI = arrayICI[i];//设置JPEG编码                     break;                 }             }             if (jpegICI != null)             {                 //bm.Save(Server.MapPath(path + "/thumb_" + filename), jpegICI, encoderParams);                 bm.Save(filePath + "/" + toFileName, jpegICI, encoderParams);             }             bm.Dispose();             originalImage.Dispose();             g.Dispose();         }         /// <summary>         /// 保持比例图像缩放简易算法         /// </summary>         /// <param name="spcWidth"></param>         /// <param name="spcHeight"></param>         /// <param name="orgWidth"></param>         /// <param name="orgHeight"></param>         /// <returns></returns>         public static Dictionary<string, int> AdjustSize(int spcWidth, int spcHeight, int orgWidth, int orgHeight)         {             Dictionary<string, int> size = new Dictionary<string, int>();             // 原始宽高在指定宽高范围内,不作任何处理              if (orgWidth <= spcWidth && orgHeight <= spcHeight)             {                 size["Width"] = orgWidth;                 size["Height"] = orgHeight;             }             else             {                 // 取得比例系数                  float w = orgWidth / (float)spcWidth;                 float h = orgHeight / (float)spcHeight;                 // 宽度比大于高度比                  if (w > h)                 {                     size["Width"] = spcWidth;                     size["Height"] = (int)(w >= 1 ? Math.Round(orgHeight / w) : Math.Round(orgHeight * w));                 }                 // 宽度比小于高度比                  else if (w < h)                 {                     size["Height"] = spcHeight;                     size["Width"] = (int)(h >= 1 ? Math.Round(orgWidth / h) : Math.Round(orgWidth * h));                 }                 // 宽度比等于高度比                  else                 {                     size["Width"] = spcWidth;                     size["Height"] = spcHeight;                 }             }             return size;         }     } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部