如何让上传大于100KB的图片优化转换成50KB左右的图片呢??能否实现?

Code84 2006-10-08 10:29:48
如何让上传大于100KB的图片优化转换成50KB左右的图片呢??能否实现?
...全文
2511 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sujo 2006-11-14
  • 打赏
  • 举报
回复
对图片质量影响大吗?
dl_wang 2006-11-10
  • 打赏
  • 举报
回复
mark
C5662601 2006-10-08
  • 打赏
  • 举报
回复
xuexi
viena 2006-10-08
  • 打赏
  • 举报
回复
减小宽高更简单
比如限制宽度,根据此宽度算出等必减小的高度
用源Image,新宽高重新构造Bitmap对象
SaveAs即可,或者指定质量,参考我最上面的代码
viena 2006-10-08
  • 打赏
  • 举报
回复
晕,有加塞儿的~
viena 2006-10-08
  • 打赏
  • 举报
回复
以上是把图片转为JPG格式,然后降低质量以压缩文件大小
有好几个不同重载,可以传入文件路径、Image对象、Bitmap等不同的参数
视具体需要选用
LoveCherry 2006-10-08
  • 打赏
  • 举报
回复
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
private void CreateThumbnail(string sFileSrcPath, string sFileDstPath, int iSizeLimit)
{
if (File.Exists(sFileSrcPath))
{
System.Drawing.Image image = System.Drawing.Image.FromFile(sFileSrcPath) as System.Drawing.Bitmap;

System.Drawing.SizeF size = new System.Drawing.SizeF(image.Width, image.Height);

while (size.Width > iSizeLimit || size.Height > iSizeLimit)
{
size.Height /= 1.1F;

size.Width /= 1.1F;
}

System.Drawing.Image bitmap = new System.Drawing.Bitmap(Convert.ToInt16(size.Width), Convert.ToInt16(size.Height));

System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);

g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

g.Clear(Color.Transparent);

Rectangle rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);

g.DrawImage(image, rect, new System.Drawing.Rectangle(0, 0, image.Width, image.Height), System.Drawing.GraphicsUnit.Pixel);

ImageCodecInfo myImageCodecInfo;

Encoder myEncoder;

EncoderParameter myEncoderParameter;

EncoderParameters myEncoderParameters;

myImageCodecInfo = ImageCodecInfo.GetImageEncoders()[0];

myEncoder = Encoder.Quality;

myEncoderParameters = new EncoderParameters(1);

myEncoderParameter = new EncoderParameter(myEncoder, 100L); // 0-100 这个参数越小图像质量越差

myEncoderParameters.Param[0] = myEncoderParameter;

bitmap.Save(sFileDstPath, myImageCodecInfo, myEncoderParameters);

myEncoderParameter.Dispose();

myEncoderParameters.Dispose();

image.Dispose();

bitmap.Dispose();

g.Dispose();
}
}
viena 2006-10-08
  • 打赏
  • 举报
回复
#region 图片压缩(降低质量)Compress

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;
}

/// <summary>
/// 图片压缩(降低质量以减小文件的大小)
/// </summary>
/// <param name="srcBitmap">传入的Bitmap对象</param>
/// <param name="destStream">压缩后的Stream对象</param>
/// <param name="level">压缩等级,0到100,0 最差质量,100 最佳</param>
public static void Compress(Bitmap srcBitmap,Stream destStream,long level)
{
ImageCodecInfo myImageCodecInfo;
Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;

// 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
myEncoderParameter = new EncoderParameter(myEncoder, level);
myEncoderParameters.Param[0] = myEncoderParameter;
srcBitmap.Save(destStream, myImageCodecInfo, myEncoderParameters);
}

/// <summary>
/// 图片压缩(降低质量以减小文件的大小)
/// </summary>
/// <param name="srcBitMap">传入的Bitmap对象</param>
/// <param name="destFile">压缩后的图片保存路径</param>
/// <param name="level">压缩等级,0到100,0 最差质量,100 最佳</param>
public static void Compress(Bitmap srcBitMap,string destFile,long level)
{
Stream s= new FileStream(destFile,FileMode.Create);
Compress(srcBitMap,s,level);
s.Close();
}

/// <summary>
/// 图片压缩(降低质量以减小文件的大小)
/// </summary>
/// <param name="srcFile">传入的Stream对象</param>
/// <param name="destFile">压缩后的图片保存路径</param>
/// <param name="level">压缩等级,0到100,0 最差质量,100 最佳</param>
public static void Compress(Stream srcStream,string destFile,long level)
{
Bitmap bm = new Bitmap(srcStream);
Compress(bm, destFile, level);
bm.Dispose();
}

/// <summary>
/// 图片压缩(降低质量以减小文件的大小)
/// </summary>
/// <param name="srcFile">传入的Image对象</param>
/// <param name="destFile">压缩后的图片保存路径</param>
/// <param name="level">压缩等级,0到100,0 最差质量,100 最佳</param>
public static void Compress(Image srcImg,string destFile,long level)
{
Bitmap bm = new Bitmap(srcImg);
Compress(bm, destFile, level);
bm.Dispose();
}

/// <summary>
/// 图片压缩(降低质量以减小文件的大小)
/// </summary>
/// <param name="srcFile">待压缩的BMP文件名</param>
/// <param name="destFile">压缩后的图片保存路径</param>
/// <param name="level">压缩等级,0到100,0 最差质量,100 最佳</param>
public static void Compress(string srcFile,string destFile,long level)
{
// Create a Bitmap object based on a BMP file.
Bitmap bm = new Bitmap(srcFile);
Compress(bm, destFile, level);
bm.Dispose();
}


#endregion 图片压缩(降低质量)
luck0235 2006-10-08
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/5066/5066448.xml?temp=3.493899E-02
viena 2006-10-08
  • 打赏
  • 举报
回复
System.Drawing.Imaging
syl2000 2006-10-08
  • 打赏
  • 举报
回复
学一招!
szc21 2006-10-08
  • 打赏
  • 举报
回复
这个一定要收藏,经常见到!
winner2050 2006-10-08
  • 打赏
  • 举报
回复
学习
Code84 2006-10-08
  • 打赏
  • 举报
回复
TO:viena(维也纳nn)
ImageCodecInfo是包含在那个命名空间呢?我找不到啊!

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧