asp.net改变上传图片的物理大小,能否实现。。

lz00728 2012-11-01 04:53:25
上传图片太大,能否在上传后改变图片的物理大小,不改变图片原来的尺寸,也不很大影响图片的原来画质。
求解...
...全文
283 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
uinatlex 2012-11-02
  • 打赏
  • 举报
回复

/// <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);

}
}

}
遊戲王千金 2012-11-02
  • 打赏
  • 举报
回复

/// <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;
}
}
让IE灭亡 2012-11-02
  • 打赏
  • 举报
回复
有,自己去找C# 图片压缩
huxiaoiqing0007 2012-11-01
  • 打赏
  • 举报
回复
给你一段代码吧:
/// <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();
}
}
}
li2422121715 2012-11-01
  • 打赏
  • 举报
回复
导入ps,保持为gif或者jpeg,调低品质
net5354 2012-11-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
上传图片太大,能否在上传后改变图片的物理大小,不改变图片原来的尺寸,也不很大影响图片的原来画质。
求解...
[/Quote]不可能的事
insus 2012-11-01
  • 打赏
  • 举报
回复
refer this:
你可以在上传时改变它。或是上传时不改变,而是在显示改变。还有一种选择,显示时显示小图,当用户点击再显示大图:

http://www.cnblogs.com/insus/articles/2060601.html
色拉油 2012-11-01
  • 打赏
  • 举报
回复
改变大小,还不影响画质,这要求过分了吧

有这种技术单反照出来的照片就不会是30多M了
  • 打赏
  • 举报
回复
改变文件格式
lz00728 2012-11-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

图片尺寸变小,kb自然变小。
[/Quote]

我的问题是不改变图片尺寸
遊戲王千金 2012-11-01
  • 打赏
  • 举报
回复
图片尺寸变小,kb自然变小。
lz00728 2012-11-01
  • 打赏
  • 举报
回复
再顶顶 就下班了。。
lz00728 2012-11-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

搜索“缩略图 c#”
[/Quote]
都是生成了那种改变了图片尺寸的,没有找到可以缩小图片物理大小
比如一张图片100KB,把图片改小成小于100KB
winner2050 2012-11-01
  • 打赏
  • 举报
回复
搜索“缩略图 c#”

62,041

社区成员

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

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

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

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