做站的时候经常会遇到要生成缩略图的功能,因为可能不同的情况需要用来不同大小的缩略图。
本文生成的图片都为正方形,只有正方形的缩略图才是保证图片足够清晰。
当我我这里说的正方形是先按比例压缩,然后加一个固定的白底 然后居中显示。
代码:
新建outputimg.ashx
复制代码 代码如下:
//调整图片大小
private static Size NewSize(int maxWidth, int maxHeight, int Width, int Height)
{
double w = 0.0;
double h = 0.0;
double sw = Convert.ToDouble(Width);
double sh = Convert.ToDouble(Height);
double mw = Convert.ToDouble(maxWidth);
double mh = Convert.ToDouble(maxHeight);
if (sw < mw && sh < mh)//如果maxWidth和maxHeight大于源图像,则缩略图的长和高不变
{
w = sw;
h = sh;
}
else if ((sw / sh) > (mw / mh))
{
w = maxWidth;
h = (w * sh) / sw;
}
else
{
h = maxHeight;
w = (h * sw) / sh;
}
return new Size(Convert.ToInt32(w), Convert.ToInt32(h));
}
复制代码 代码如下:
//生成缩略图
public static void SendSmallImage(string filename, string newfile, int maxHeight, int maxWidth, string mode)
{
System.Drawing.Image img = System.Drawing.Image.FromFile(filename);//源图像的信息
System.Drawing.Imaging.ImageFormat thisformat = img.RawFormat; //源图像的格式
Size newSize = NewSize(maxWidth, maxHeight, img.Width, img.Height); //返回调整后的图像Width与Height
Bitmap outBmp = new Bitmap(maxWidth, maxHeight);
Graphics g = Graphics.FromImage(outBmp);
//设置画布的描绘质量
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.Clear(Color.White);
g.DrawImage(img, new Rectangle(((maxWidth - newSize.Width) / 2), ((maxHeight - newSize.Height) / 2), 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对象。
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;
}
}
if (jpegICI != null)
{
outBmp.Save(newfile, jpegICI, encoderParams);
}
else
{
outBmp.Save(newfile, thisformat);
}
img.Dispose();
outBmp.Dispose();
}
输出图片:
复制代码 代码如下:
//输出图片
public static void OutPutImg(string imgFilePath)
{
FileStream fs = new FileStream(HttpContext.Current.Server.MapPath(imgFilePath), FileMode.Open, FileAccess.Read);
DateTime contentModified = System.IO.File.GetLastWriteTime(HttpContext.Current.Server.MapPath(imgFilePath));
if (IsClientCached(contentModified))
{
HttpContext.Current.Response.StatusCode = 304;
HttpContext.Current.Response.SuppressContent = true;
}
else
{
byte[] mydata = new byte[fs.Length];
int Length = Convert.ToInt32(fs.Length);
fs.Read(mydata, 0, Length);
fs.Close();
HttpContext.Current.Response.OutputStream.Write(mydata, 0, Length);
HttpContext.Current.Response.ContentType = "image/jpeg";
HttpContext.Current.Response.End();
HttpContext.Current.Response.Cache.SetETagFromFileDependencies();
HttpContext.Current.Response.Cache.SetAllowResponseInBrowserHistory(true);
HttpContext.Current.Response.Cache.SetLastModified(contentModified);
}
}
复制代码 代码如下:
//outpuimg.ashx?src=/images/weimeidesc/8af30049-797e-4eb4-8a54-cc4de47c1694.jpg!100x100.jpg
public void ProcessRequest(HttpContext context)
{
//获取图片
string imgUrl = context.Request.QueryString["src"];
string trueFilePath = imgUrl.Split('!')[0];
//获取图片大小
int width = Convert.ToInt32(imgUrl.Split('!')[1].Replace(".jpg", "").Split('x')[0]);
int height = Convert.ToInt32(imgUrl.Split('!')[1].Replace(".jpg", "").Split('x')[1]);
//图片已经存在直接输出
if (File.Exists(context.Server.MapPath("~/" + imgUrl)))
{
OutPutImg("~/"+imgUrl);
}
else
{
if (!string.IsNullOrEmpty(imgUrl) && File.Exists(context.Server.MapPath("~/" + trueFilePath)))
{
Image originalImage = System.Drawing.Image.FromFile(context.Server.MapPath("~/" + trueFilePath));
var newBitmap = new Bitmap(originalImage);
//生成相应的小图并保存
SendSmallImage(context.Server.MapPath("~/" + trueFilePath),context.Server.MapPath("~/" + imgUrl), width, height, "meiyouyisi");
//输出
OutPutImg("~/" + imgUrl);
}
else//图片如果不存在 输出默认图片
{
//OutPutImg(imgUrl);
}
}
}
生成缩略图
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】