上传图片太大,能否在上传后改变图片的物理大小,不改变图片原来的尺寸,也不很大影响图片的原来画质。
  求解...

解决方案 »

  1.   

    都是生成了那种改变了图片尺寸的,没有找到可以缩小图片物理大小
    比如一张图片100KB,把图片改小成小于100KB
      

  2.   

    refer this:
    你可以在上传时改变它。或是上传时不改变,而是在显示改变。还有一种选择,显示时显示小图,当用户点击再显示大图:http://www.cnblogs.com/insus/articles/2060601.html
      

  3.   

    导入ps,保持为gif或者jpeg,调低品质
      

  4.   

    给你一段代码吧:
     /// <summary>
            /// 上传图片生成缩略图
            /// </summary>
            /// <param name="originalImagePath">源图片</param>
            /// <param name="thumbnailPath">缩略图保存路径</param>
            /// <param name="width">缩略图宽度</param>
            /// <param name="height">缩略图高度</param>
            /// <param name="mode">缩略模式</param>
            public static void MakeThumbnail(byte [] originalImageByte, string thumbnailPath, int width, int height, string mode)
            {
                System.IO.Stream imageStream = new System.IO.MemoryStream(originalImageByte);
                System.Drawing.Image originalImage = System.Drawing.Image.FromStream(imageStream);            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图片
                System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
                //新建一个画板
                System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
                //设置高质量插值法
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
                //设置高质量,低速度呈现平滑程度
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                //清空画布并以透明背景色填充
                g.Clear(Color.Transparent);
                //在指定位置并且按指定大小绘制原图片的指定部分
                g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
                    new Rectangle(x, y, ow, oh),
                    GraphicsUnit.Pixel);            try
                {
                    //以jpg格式保存缩略图
                    bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
                }
                catch (System.Exception e)
                {
                    throw e;
                }
                finally
                {
                    originalImage.Dispose();
                    bitmap.Dispose();
                    g.Dispose();
                }
            } 
        }   
      

  5.   


      /// <summary>
            /// 执行: 压缩原图 System.Drawing.Bitmap 对象保存到文件 (JPEG格式压缩)
            /// </summary>
            /// <param name="source">原图 System.Drawing.Bitmap 对象: System.Drawing.Bitmap</param>
            /// <param name="level">压缩等级(值越高图像质量越好,文件越大,范围在1~100之间): int</param>
            /// <param name="path">保存路径(包含完整路径,文件名及其扩展名): string</param>
            public void Compress(Bitmap source, int level, string path)
            {
                if (level < 1 || level > 99)
                    throw new ArgumentException("压缩等级值范围在0~100之间");
                long[] quality = new long[1];
                quality[0] = level;
                using (EncoderParameters Parameters = new EncoderParameters())
                {
                    using (EncoderParameter Parameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality))
                    {
                        Parameters.Param[0] = Parameter;
                        source.Save(path, ImageCodecInfo.GetImageEncoders()[1], Parameters);                }
                }        }
      

  6.   


     /// <summary>
            /// 压缩到指定尺寸
            /// </summary>
            /// <param name="oldfile">原文件</param>
            /// <param name="newfile">新文件</param>
            public bool Compress(string oldfile, string newfile)
            {
                try
                {
                    System.Drawing.Image img = System.Drawing.Image.FromFile(oldfile);
                    System.Drawing.Imaging.ImageFormat thisFormat = img.RawFormat;
                    Size newSize = new Size(100, 125);
                    Bitmap outBmp = new Bitmap(newSize.Width, newSize.Height);
                    Graphics g = Graphics.FromImage(outBmp);
                    g.CompositingQuality = CompositingQuality.HighQuality;
                    g.SmoothingMode = SmoothingMode.HighQuality;
                    g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                    g.DrawImage(img, new Rectangle(0, 0, newSize.Width, newSize.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel);
                    g.Dispose();
                    EncoderParameters encoderParams = new EncoderParameters();
                    long[] quality = new long[1];
                    quality[0] = 100;
                    EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
                    encoderParams.Param[0] = encoderParam;
                    ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();
                    ImageCodecInfo jpegICI = null;
                    for (int x = 0; x < arrayICI.Length; x++)
                        if (arrayICI[x].FormatDescription.Equals("JPEG"))
                        {
                            jpegICI = arrayICI[x]; //设置JPEG编码
                            break;
                        }
                    img.Dispose();
                    if (jpegICI != null) outBmp.Save(newfile, System.Drawing.Imaging.ImageFormat.Jpeg);
                    outBmp.Dispose();
                    return true;
                }
                catch
                {
                    return false;
                }
            }