Hope its works
http://www.codeproject.com/useritems/tungAnimation.asp
http://www.codeproject.com/dotnet/NGif.asp

解决方案 »

  1.   

    Knight94(愚翁)  大哥给的代码都看了
    一个核心是bmp的
    另一个只有图片结构
    都用不上啊 55555
      

  2.   

    怎么压缩呀?在程序中启动rar工具不行么?
      

  3.   

    newimg是你的图片对象Image newimg = Image.FromFile(FilePaths);
    EncoderParameters parameters1 = new EncoderParameters();
    long[] numArray1 = new long[] { (long)100 };//100是保存图片的质量,1-100
    parameters1.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, numArray1);
    FileInfo fi = new FileInfo(FilePaths);
    ImageCodecInfo info1 = this.GetEncoderInfo(fi.Extension);//获取图片对象的
    newimg.Save("File Save Path",info1,parameters1);
    newimg.Dispose();public ImageCodecInfo GetEncoderInfo(string strExt)
    {
      StringBuilder sbExt = new StringBuilder();
      sbExt.Append(@"*");
      sbExt.AppendFormat(strExt.ToLower());
      ImageCodecInfo[] infoArray1 = ImageCodecInfo.GetImageEncoders();
      for (int num1 = 0; num1 < infoArray1.Length; num1++)
      {
          string[] strs = infoArray1[num1].FilenameExtension.Split(';');
          foreach(string str in strs)
          {
    if(str.ToLower() == sbExt.ToString())
    {
      return infoArray1[num1];
    }
          }
       }
       return null;
    } 大致代码如上...请自行调试
      

  4.   

    #region 图片生成缩略图

    /// <summary>
    /// 获取图像编码解码器的所有相关信息
    /// </summary>
    /// <param name="mimeType">包含编码解码器的多用途网际邮件扩充协议 (MIME) 类型的字符串</param>
    /// <returns>返回图像编码解码器的所有相关信息</returns>
    static ImageCodecInfo GetCodecInfo(string mimeType)
    {
    ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();
    foreach(ImageCodecInfo ici in CodecInfo)
    {
    if(ici.MimeType == mimeType)return ici;
    }
    return null;
    }
    /// <summary>
    /// 检测扩展名的有效性
    /// </summary>
    /// <param name="sExt">文件名扩展名</param>
    /// <returns>如果扩展名有效,返回true,否则返回false.</returns>
    bool CheckValidExt(string sExt)
    {
    bool flag=false;
    string[] aExt = AllowExt.Split('|');
    foreach(string filetype in aExt)
    {
    if(filetype.ToLower()==sExt)
    {
    flag = true;
    break;
    }
    }
    return flag;
    }
    /// <summary>
    /// 保存图片
    /// </summary>
    /// <param name="image">Image 对象</param>
    /// <param name="savePath">保存路径</param>
    /// <param name="ici">指定格式的编解码参数</param>
    void SaveImage(System.Drawing.Image image,string savePath,ImageCodecInfo ici)
    {
    //设置 原图片 对象的 EncoderParameters 对象
    EncoderParameters parameters = new EncoderParameters(1);
    parameters.Param[0] = new EncoderParameter(Encoder.Quality, ((long) 90));
    image.Save(savePath, ici, parameters);
    parameters.Dispose();
    }
        /// <summary>
    /// 生成缩略图
    /// </summary>
    /// <param name="sourceImagePath">原图片路径(相对路径)</param>
    /// <param name="thumbnailImagePath">生成的缩略图路径,如果为空则保存为原图片路径(相对路径)</param>
    /// <param name="thumbnailImageWidth">缩略图的宽度(高度与按源图片比例自动生成)</param>
    public void ToThumbnailImages(string sourceImagePath,string thumbnailImagePath,int thumbnailImageWidth)
    {
    string SourceImagePath = sourceImagePath;
    string ThumbnailImagePath = thumbnailImagePath;
    int ThumbnailImageWidth = thumbnailImageWidth;
    string sExt = SourceImagePath.Substring(SourceImagePath.LastIndexOf(".")).ToLower();
    if(SourceImagePath.ToString()==System.String.Empty) throw new NullReferenceException("SourceImagePath is null!");
    if(!CheckValidExt(sExt))
    {
    throw new ArgumentException("原图片文件格式不正确,支持的格式有[ "+ AllowExt +" ]",SourceImagePath);
    }
    //从 原图片 创建 Image 对象
    System.Drawing.Image image = System.Drawing.Image.FromFile(HttpContext.Current.Server.MapPath(SourceImagePath));
    int num = ((ThumbnailImageWidth / 4) * 3);
    int width = image.Width;
    int height = image.Height;
    //计算图片的比例
    if ((((double) width) / ((double) height)) >= 1.3333333333333333f)
    {
    num = ((height * ThumbnailImageWidth) / width);
    }
    else
    {
    ThumbnailImageWidth = ((width * num) / height);
    }
    if ((ThumbnailImageWidth < 1) || (num < 1))
    {
    return;
    }
    //用指定的大小和格式初始化 Bitmap 类的新实例
    Bitmap bitmap = new Bitmap(ThumbnailImageWidth, num, PixelFormat.Format32bppArgb);
    //从指定的 Image 对象创建新 Graphics 对象
    Graphics graphics = Graphics.FromImage(bitmap);
    //清除整个绘图面并以透明背景色填充
    graphics.Clear(Color.Transparent);
    //在指定位置并且按指定大小绘制 原图片 对象
    graphics.DrawImage(image, new Rectangle(0, 0, ThumbnailImageWidth, num));
    image.Dispose();
    try
    {
    //将此 原图片 以指定格式并用指定的编解码参数保存到指定文件
    string savepath = (ThumbnailImagePath==null?SourceImagePath:ThumbnailImagePath);
    SaveImage(bitmap,HttpContext.Current.Server.MapPath(savepath),GetCodecInfo((string)htmimes[sExt]));
    }
    catch(System.Exception e)
    {
    throw e;
    }
    finally
    {
    bitmap.Dispose();
    graphics.Dispose();
    }
    }
     

    #endregion
      

  5.   

    我哭了,楼上的你确定 用过上面你写的东西? 质量参数好像只对 jpeg的图片有效果
    而且失真很严重  服了
      

  6.   

    楼主说的是偶么?
    我再次验证过:
    png:
      该图片1604*1894 665kb
    使用88的压缩
       无失真,大小385kb
      

  7.   

    Interop 几个公共的 ZIP 类不就好了? 不知道你说的压缩是什么意思? 难道是类似Jpeg的压缩?那样的话可以InteropIntel的 Ijpeg Library
      

  8.   

    我这都出鬼了,用高手ccwq的办法 压出来反而大了
    原1461*855 681k   png 
    新1461*855 741k   png   
    long[] numArray1 = new long[] { (long)50};
    gif  没反应
      

  9.   

    太牛比了   使用50的压缩   结果150K的JPG被压缩成50多K   太棒了 
      

  10.   

    你可以看看png和gif的文件格式,png可以只留下几个主要的数据块,其他的信息都可以不要,这个很容易实现,对gif我没研究过,估计原理差不多
      

  11.   

    估计你再看看GDI+的书吧,呵呵,我能实现的到你那就有问题了,无语中
      

  12.   

    gif是动画,压缩的话只有压缩各个图片帧的大小
      

  13.   

    '压缩图片,ImgZl为图片压缩质量0-100
                Dim ImgZl As Integer = 88
                Dim ICI As System.Drawing.Imaging.ImageCodecInfo = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders(1)
                Dim EP As System.Drawing.Imaging.EncoderParameters = New System.Drawing.Imaging.EncoderParameters(1)
                EP.Param(0) = New System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, ImgZl)
       '压缩图片为指定的MIIE格式GetEncoderInfo("image/jpeg")
        'GetEncoderInfo("image/jpeg")=System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders(1)
        Function GetEncoderInfo(ByVal mimeType As String) As System.Drawing.Imaging.ImageCodecInfo
            Dim i As Integer
            Dim encoders As System.Drawing.Imaging.ImageCodecInfo()
            encoders = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders()
            For i = 0 To encoders.Length - 1
                If encoders(i).MimeType = mimeType Then
                    Return encoders(i)
                End If
            Next
        End Function