保存图片 小一点

闲游四疯 2008-07-16 11:03:45

/// <summary>
/// 生成小图片
/// </summary>
public static void SavePic(byte[] by, string path, int w, int h) //流,路径,宽度,高度
{
System.IO.MemoryStream ms = new System.IO.MemoryStream(by);
System.Drawing.Image image =
System.Drawing.Bitmap.FromStream(ms).GetThumbnailImage(w, h, null, IntPtr.Zero);
image.Save(path);
image.Dispose();
}

/// <summary>
/// 给图片加水印
/// </summary>
public static void SavePic(byte[] by, bool ck, string path) //流 是否加水印 路径
{
System.IO.MemoryStream ms = new System.IO.MemoryStream(by);
System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true);
if (ck)
{
System.Drawing.Image newimage = new Bitmap(image.Width, image.Height, PixelFormat.Format32bppRgb);
Graphics g = Graphics.FromImage(newimage);
g.DrawImage(image, 0, 0, image.Width, image.Height);
Font f = new Font("宋体", 14);
Brush b = new SolidBrush(Color.AntiqueWhite);
g.DrawString("www.cnbww.cn", f, b, 5, 5);
g.Dispose();
System.Drawing.Image thumbImage = newimage.GetThumbnailImage(image.Width, image.Height, null, new IntPtr());
thumbImage.Save(path);
thumbImage.Dispose();
}
else
{
image.Save(path);
}
image.Dispose();
}

方法一是我生成保存缩略图代码,但感觉生成后缩略图太大了,100*100 的都有20多KB,有没有办法小一点?弄到几KB就好了.
方法二是我保存当前图片代码,生成后图片大小跟原来差不多,但我也想变小一点,一张小一点点,很多张就小很多了..
(图片变小最好质量不要改太多,不然也没用,请按需求更改代码,不要说我小气,解决一道题100分,先解决者得分。)

(谢谢~谢绝灌水~)(上面两段代码均可以用,有需要的人也可以直接拷贝~ ^_^!!)
...全文
263 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yigeming 2008-07-16
  • 打赏
  • 举报
回复
DDDDDDDDDDDD
正宗熊猫哥 2008-07-16
  • 打赏
  • 举报
回复
private Exception InitUploadPerview(string savePath, string fileName)
{
try
{
System.Drawing.Image image;
string tempPath = Request.MapPath(savePath);
int wid = 0;
int heigh = 0;
wid = 231;//你要的宽度
heigh = 168;//你要的高度
}
if (!System.IO.Directory.Exists(tempPath + "Perview/"))//路径
{
DirectoryEx.CreateDirectory(tempPath + "Perview/");
}
image = CommonCreateThumbnailImage.CreateThumbnailImage(wid, heigh, tempPath + fileName, null, true, CommonCreateThumbnailImage.ImageMode.HW);
image.Save(tempPath + "Perview/" + fileName, System.Drawing.Imaging.ImageFormat.Jpeg);
image.Dispose();
}
catch
{
return new Exception("创建缩略图片失败");
}
return null;
}
kbryant 2008-07-16
  • 打赏
  • 举报
回复
帮顶
skyaspnet 2008-07-16
  • 打赏
  • 举报
回复
这篇文章里有你想实现效果的详细代码和思路
http://blog.csdn.net/skyaspnet/archive/2008/07/16/2659774.aspx
wo594261 2008-07-16
  • 打赏
  • 举报
回复
貌似需要一个工具什么来着
dengchenlu 2008-07-16
  • 打赏
  • 举报
回复
帮顶
zld_baggio 2008-07-16
  • 打赏
  • 举报
回复
七楼的应该就可以了。
industrial 2008-07-16
  • 打赏
  • 举报
回复
7楼是正解,方法对的
industrial 2008-07-16
  • 打赏
  • 举报
回复
兄弟,这个我遇到过了
参考一下msdn吧
.GetThumbnailImage这个方法,对图片大小有限制,不超出的话文件很小,超出的话文件体积暴增
建议用DrawImage,即可产生高质量小体积的图片
闲游四疯 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 skyaspnet 的回复:]
这篇文章里有你想实现效果的详细代码和思路
http://blog.csdn.net/skyaspnet/archive/2008/07/16/2659774.aspx
[/Quote]
这里有我想要的,再挂一天,让别人也学习下,晚上结贴。
7楼的略看一下,应该没3楼那边详细。。我就不试了。。
manbufenglin 2008-07-16
  • 打赏
  • 举报
回复
帮你顶下
JeffChung 2008-07-16
  • 打赏
  • 举报
回复
顶一下,同意格式问题。

7楼的应该可以。
jl_lsj 2008-07-16
  • 打赏
  • 举报
回复
感觉问题也是出在格式上,帮顶 学习
java_303 2008-07-16
  • 打赏
  • 举报
回复
改下格式
wapit 2008-07-16
  • 打赏
  • 举报
回复
主要是原图是jpg格式, 新图是bmp格式, 只是文件名弄成了jpg. 所以变大了.
stning 2008-07-16
  • 打赏
  • 举报
回复
**/**///// <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(string originalImagePath, string thumbnailPath, int width, int height, string mode)
{
Image originalImage = Image.FromFile(originalImagePath);
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图片
Image bitmap = new Bitmap(towidth, toheight);
//新建一个画板
Graphics g = Graphics.FromImage(bitmap);
//设置高质量插值法
g.InterpolationMode = InterpolationMode.High;
//设置高质量,低速度呈现平滑程度
g.SmoothingMode = 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, ImageFormat.Jpeg);
}
catch (Exception e)
{
throw e;
}
finally
{
originalImage.Dispose();
bitmap.Dispose();
g.Dispose();
}
}

62,041

社区成员

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

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

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

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