我想用C# 将一个4M 的图片 变为一个只有几百 kb 的jpeg格式的图片,请大侠们指点一二!

解决方案 »

  1.   

    Bitmap image = new Bitmap(图片路径);image.Save(System.Drawing.Imaging.ImageFormat.Jpeg);
      

  2.   

    var img = Image.FromFile(@"图片路径");
    var thumbnail = img.GetThumbnailImage(400, 300, null, IntPtr.Zero);
    thumbnail.Save(@"缩略图路径");
      

  3.   

    图片缩略图Image.GetThumbnailImage 方法:返回此 Image 的缩略图。
    public Image GetThumbnailImage(
      int thumbWidth,
      int thumbHeight,
      Image..::.GetThumbnailImageAbort callback,
      IntPtr callbackData
    )
    Image thumbImg = Image.FromFile("").GetThumbnailImage(100, 120, null, new IntPtr());Image img = Image.FromFile(path);
    Bitmap bitmap = new Bitmap(100,100);
    graphics g = graphics.fromimage(bitmap);
    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
    g.Clear(Color.Transparent);   
    g.drawimage(img,new rectangle(0,0,100,100),new rectangle(0,0,img.width,img.height))
    bitmap.save(newpat,imageformat.jpeg)http://topic.csdn.net/u/20100525/15/7b9f9fe3-e862-48b5-86e2-3b72a9525690.html
      

  4.   


    private ImageCodecInfo GetEncoder(ImageFormat format)//获取特定的图像编解码信息
            {            
                ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();            foreach (ImageCodecInfo codec in codecs)
                {
                    if (codec.FormatID == format.Guid)
                    {
                        return codec;
                    }
                }
                return null;
            }
    private void button2_Click(object sender, EventArgs e)
            {
                System.Drawing.Imaging.Encoder encoder = System.Drawing.Imaging.Encoder.Quality;//获取品质(压缩率)编码
                EncoderParameter mycoder = new EncoderParameter(encoder, 0);//0压缩率最大,100品质最高
                EncoderParameters myCoders = new EncoderParameters(1);//参数数组,大小为1
                myCoders.Param[0] = mycoder;//添加一个参数
                ImageCodecInfo jpgInfo = GetEncoder(ImageFormat.Jpeg);//获取JPG格式编解码信息
                Image bmp = Image.FromFile("F:\\x.jpg");
                bmp.Save("F:\\y.jpg", jpgInfo, myCoders);//以指定品质率的JPG格式保存
            }
      

  5.   

    EncoderParameter mycoder = new EncoderParameter(encoder, 0);
    上面的最后一个参数是长整数,后面要加个L, 不然寻找重载函数的时候找不到目标(我的错)
    经试验, 最后一个参数用30L最好,图象大小不到原来的一半,品质基本无失真,楼主可变换数字大小多试试
      

  6.   

     private byte[] formatImg(string img)
            {
                FileStream stream = new FileStream(img, FileMode.Open);
                Bitmap oldbmp = new Bitmap(stream);
                stream.Close();
                MemoryStream memoryStream = new MemoryStream();
                Bitmap newbmp = new Bitmap(oldbmp.Width, oldbmp.Height);
                Graphics g = Graphics.FromImage(oldbmp);
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                g.Clear(Color.White);
                g.DrawImage(oldbmp, new Rectangle(0, 0, newbmp.Width, newbmp.Height), 0, 0, oldbmp.Width, oldbmp.Height, GraphicsUnit.Pixel);
                g.Dispose();
                oldbmp.Dispose();
                newbmp.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
                memoryStream.Flush();
                byte[] butter = memoryStream.GetBuffer();
                memoryStream.Close();
                newbmp.Dispose();
                return butter;
            }
    然后我用File.WriteBytes("path",byte)
    但是打开的图片是黑色的?没有图像?
      

  7.   

    Image和Bitmap都有Save方法直接使用,不知你转来转去要干啥