欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

C#文件上传和图片压缩方法

程序员文章站 2022-03-01 18:02:32
...

一般在web应用中、对客户端提交上来的图片肯定需要进行压缩的、尤其是比较大的图片、如果不经过压缩会导致页面变的很大、打开速度比较慢

当然了如果是需要高质量的图片也得需要生产缩略图、下面贴出我自己琢磨的图片压缩算法、首先这个是未经优化的简单实现、可自行修改


////// 生成缩略图
//////源图路径(物理路径)///缩略图路径(物理路径)///缩略图宽度///缩略图高度///生成缩略图的方式
public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
{
    Image originalImage = Image.FromFile(originalImagePath);

    int towidth = width;
    int toheight = height;

    int x = 0;
    int y = 0;
    int ow = originalImage.Width;
    int oh = originalImage.Height;

    switch (mode)
    {
        case "HW"://指定高宽缩放(可能变形)                
            break;
        case "W"://指定宽,高按比例                    
            toheight = originalImage.Height * width / originalImage.Width;
            break;
        case "H"://指定高,宽按比例
            towidth = originalImage.Width * height / originalImage.Height;
            break;
        case "Cut"://指定高宽裁减(不变形)                
            if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
            {
                oh = originalImage.Height;
                ow = originalImage.Height * towidth / toheight;
                y = 0;
                x = (originalImage.Width - ow) / 2;
            }
            else
            {
                ow = originalImage.Width;
                oh = originalImage.Width * height / towidth;
                x = 0;
                y = (originalImage.Height - oh) / 2;
            }
            break;
        default:
            break;
    }

    //新建一个bmp图片
    Image bitmap = new System.Drawing.Bitmap(towidth, toheight);

    //新建一个画板
    Graphics g = System.Drawing.Graphics.FromImage(bitmap);

    //设置高质量插值法
    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

    //设置高质量,低速度呈现平滑程度
    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

    //清空画布并以透明背景色填充
    g.Clear(Color.White);

    //在指定位置并且按指定大小绘制原图片的指定部分
    g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
        new Rectangle(x, y, ow, oh),
        GraphicsUnit.Pixel);

    try
    {
        //以jpg格式保存缩略图
        bitmap.Save(thumbnailPath + "t", System.Drawing.Imaging.ImageFormat.Jpeg);
    }
    catch (System.Exception e)
    {
        throw e;
    }
    finally
    {
        originalImage.Dispose();
        bitmap.Dispose();
        g.Dispose();
    }
}


以上就是图片压缩的方法、直接复制到项目里就可以直接使用的哦、非常方便