读书人

如何把2M或更大的图片的大小 变成 500

发布时间: 2012-08-15 16:57:17 作者: rapoo

怎么把2M或更大的图片的大小 变成 500K以内呢
上传的图片基本是都是很大的,可是别人要求的是500K 以内。。我把图片压缩成800×600的,可是图片还有1M多。。
郁闷,用程序该怎么来实现呢

[解决办法]

C# code
任何压缩算法的压缩比都不能无限的提高的。最有效地方法就是降低图片的分辨率,即像素值。图片的每个像素占用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("Source.jpg");Graphics g = Graphics.FromImge(bmpDest);g.DrawImage(bmpSrc, rectDest,rectSrc,GraphicsUnit.Pixel); 或者将PictureBox的长和宽限定在360 X 270
[解决办法]
有压缩算法的。我发给你参考下。
C# code
using System;using System.Drawing;using System.Drawing.Imaging;namespace QQClass{    public class CompressImage    {        public void Compress_Image(string imageFile,string saveName)        {            Bitmap myBitmap;            ImageCodecInfo myImageCodecInfo;            Encoder myEncoder;            EncoderParameter myEncoderParameter;            EncoderParameters myEncoderParameters;            // Create a Bitmap object based on a BMP file.            myBitmap = new Bitmap(imageFile);            // Get an ImageCodecInfo object that represents the JPEG codec.            myImageCodecInfo = GetEncoderInfo("image/jpeg");            // Create an Encoder object based on the GUID            // for the Quality parameter category.            myEncoder = Encoder.Quality;            // Create an EncoderParameters object.            // An EncoderParameters object has an array of EncoderParameter            // objects. In this case, there is only one            // EncoderParameter object in the array.            myEncoderParameters = new EncoderParameters(1);            // Save the bitmap as a JPEG file with quality level 25.            myEncoderParameter = new EncoderParameter(myEncoder, 25L);            myEncoderParameters.Param[0] = myEncoderParameter;            try            {                myBitmap.Save(saveName, myImageCodecInfo, myEncoderParameters);            }            catch            {                         }            /*             Save the bitmap as a JPEG file with quality level 50.            myEncoderParameter = new EncoderParameter(myEncoder, 50L);            myEncoderParameters.Param[0] = myEncoderParameter;            myBitmap.Save("Shapes050.jpg", myImageCodecInfo, myEncoderParameters);            Save the bitmap as a JPEG file with quality level 75.            myEncoderParameter = new EncoderParameter(myEncoder, 75L);            myEncoderParameters.Param[0] = myEncoderParameter;            myBitmap.Save("Shapes075.jpg", myImageCodecInfo, myEncoderParameters);            */        }        private static ImageCodecInfo GetEncoderInfo(String mimeType)        {            int j;            ImageCodecInfo[] encoders;            encoders = ImageCodecInfo.GetImageEncoders();            for (j = 0; j < encoders.Length; ++j)            {                if (encoders[j].MimeType == mimeType)                    return encoders[j];            }            return null;        }    }}
[解决办法]
选择jpg格式保存,可缩小的几百K以内,如果在jpg创建时使用了压缩比,则创建的jpg文件可在几十K以内。
[解决办法]
private static ImageCodecInfo GetCodecInfo(string mimeType)
{
ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();
foreach (ImageCodecInfo ici in CodecInfo)
{
if (ici.MimeType == mimeType) return ici;
}
return null;
}

/**//// <summary>
/// 保存为JPEG格式,支持压缩质量选项
/// </summary>
public static bool SaveAsJPEG(Bitmap bmp, string FileName, int Qty)
{


try
{
EncoderParameter p;
EncoderParameters ps;
ps = new EncoderParameters(1);
p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, Qty);
ps.Param[0] = p;
bmp.Save(FileName, GetCodecInfo("image/jpeg"), ps);
return true;
}
catch
{
return false;
}

}
Image.GetThumbnailImage 方法:返回此 Image 的缩略图。

[解决办法]
格式转换 你那个2M大小的文件一般都是bmp的 另存为改成jpeg的就会小很多..
希望采纳..谢谢合作
[解决办法]
降低质量和降低分辨率,就小了。
[解决办法]
采用jpg格式的高压缩设置。
或用ps降低分辨率。

读书人网 >C#

热点推荐