上传图片太大,能否在上传后改变图片的物理大小,不改变图片原来的尺寸,也不很大影响图片的原来画质。
求解...
求解...
解决方案 »
- ASP.NET验证码问题
- |zyciis|求正则 匹配任意空白字符 但回车换行符除外 第二贴,一定要按这个字面来
- 关于visual studio 2008 未能加载文件或程序集libwscdnet的问题
- FreeTextBox 3.1.6 在本地运行一切正常,可是放到服务器上。那些按钮图片不能显示
- 望高手能指教(很多人都没有解决的问题)
- 一个巨牛的问题?
- 在做生成静态页面的时候,包错!请大家帮忙!
- 在一页面要显示很多个类似DataGrid的数据表绑定信息集块,如何做使效率比较高??
- 在.net中怎样动态的创建水平线?
- ASP 访问网站报错、无法向会话状态服务器发出会话状态请求
- asp.net mvc模型验证错误提示信息颜色问题
- ASP.NET多人同时操作数据库SQL2008时,内容会相窜。
比如一张图片100KB,把图片改小成小于100KB
你可以在上传时改变它。或是上传时不改变,而是在显示改变。还有一种选择,显示时显示小图,当用户点击再显示大图:http://www.cnblogs.com/insus/articles/2060601.html
/// <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();
}
}
}
/// <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); }
} }
/// <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;
}
}