96编辑器旗下产品
找图
终身
ID:0
到期时间:永久
退出登录
您的位置:首页 > 百科管理 > 详情

c# 图片压缩-C#如何把用户上传的图片文件压缩,然后再把压缩后的图片保存到服务器上?

原创:找图网 2023-04-14 04:51:26
  • C#实现图片压缩方法

  • 这个是未经优化的简单实现

    public static System Drawing Image GetImageThumb(System Drawing Image sourceImg int width int height) { System Drawing Image targetImg = new System Drawing Bitmap(width height); using (System Drawing Graphics g = System Drawing Graphics FromImage(targetImg)) { g InterpolationMode = System Drawing Drawing D InterpolationMode High; g SmoothingMode = System Drawing Drawing D SmoothingMode HighQuality; g InterpolationMode = System Drawing Drawing D InterpolationMode HighQualityBicubic; g CompositingQuality = System Drawing Drawing D CompositingQuality HighQuality; g PixelOffsetMode = System Drawing Drawing D PixelOffsetMode HighQuality; g DrawImage(sourceImg new System Drawing Rectangle( width height) new System Drawing Rectangle( sourceImg Width sourceImg Height) System Drawing GraphicsUnit Pixel); g Dispose(); } return targetImg; }

    这个方法比较简单 用到的是高质量压缩 经过这个方法压缩后 K的图片只能压缩到 k左右

    经过改写代码实现了如下的方法

    public Bitmap GetImageThumb(Bitmap mg Size newSize) { double ratio = d; double myThumbWidth = d; double myThumbHeight = d; int x = ; int y = ; Bitmap bp; if ((mg Width / Convert ToDouble(newSize Width)) > (mg Height / Convert ToDouble(newSize Height))) ratio = Convert ToDouble(mg Width) / Convert ToDouble(newSize Width); else ratio = Convert ToDouble(mg Height) / Convert ToDouble(newSize Height); myThumbHeight = Math Ceiling(mg Height / ratio); myThumbWidth = Math Ceiling(mg Width / ratio); Size thumbSize = new Size((int)newSize Width (int)newSize Height); bp = new Bitmap(newSize Width newSize Height); x = (newSize Width thumbSize Width) / ; y = (newSize Height thumbSize Height); System Drawing Graphics g = Graphics FromImage(bp); g SmoothingMode = SmoothingMode HighQuality; g InterpolationMode = InterpolationMode HighQualityBicubic; g PixelOffsetMode = PixelOffsetMode HighQuality; Rectangle rect = new Rectangle(x y thumbSize Width thumbSize Height); g DrawImage(mg rect mg Width mg Height GraphicsUnit Pixel); return bp; }

    这样实现的压缩使压缩率大幅度上升 其实代码并没有变多少 最主要的是在保存的时候要是用jpg格式

    如果不指定格式 默认使用的是png格式

    下面这个是园友写的根据设置图片质量数值来压缩图片的方法

    lishixinzhi/Article/program/net/201311/14025

  • C#代码实现图片压缩至40K以下

  • 任何压缩算法的压缩比都不能无限的提高的。

    最有效地方法就是降低图片的分辨率,即像素值。图片的每个像素占用4个字节,假设一般JPG格式的压缩比为1:10的话,40K字节最多只能储存 40000/4*10 = 10万像素的图片,即图片的长乘以宽不超过10万,一般图片长宽比是4:3;所以图片的大小最好不超过 360 X 270 。

    降低图片的分辨率就是缩小图片,用Graphics对象、Bitmap对象就能做到。

    Bitmap bmpDest = new Bitmap(360,270);

    Bitmap bmpSrc = new Bitmap("");

    Graphics g = (bmpDest);

    g.DrawImage(bmpSrc, rectDest,rectSrc,);

    或者将PictureBox的长和宽限定在360 X 270

  • C#如何把用户上传的图片文件压缩,然后再把压缩后的图片保存到服务器上?

  • 你说的压缩,实际上就是生成缩略图。

    你利用 生成缩略图后,缩略图可以直接保存到服务器上成为文件,不需要再保存到 postedFile 中了。

    最新文章 更多
    最新素材 更多
    公司介绍 网站地图 图片资讯
    Copyright © 2010-2022 山东找图网络科技有限公司  鲁ICP备18007836号-3  邮箱:15653358549@163.com