/// <summary>
/// 按日期生成文件夹名
/// </summary>
/// <returns>返回文件夹名</returns>
private static String DateDir()
{
return DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString().PadLeft(2, '0') +
DateTime.Now.Day.ToString().PadLeft(2, '0');
}
/// <summary>
/// 按GUID生成图片名
/// </summary>
/// <returns>返回文件名</returns>
private static String AutoFileName()
{
return KeyUtils.GetNewId().Replace("-", "");
}
/// <summary>
/// 相对文件夹路径
/// </summary>
private static String sReturnPath = ConfigurationManager.AppSettings["PicPath"].ToString() + "/" + DateDir();
/// <summary>
/// 保存原图
/// </summary>
/// <param name="bAfs">图片Byte字节数</param>
/// <param name="sExtend">图片后缀名</param>
/// <param name="sPath">原图绝对路径</param>
/// <returns>返回原图绝对路径</returns>
public static String SaveOriginalImage(Byte[] bAfs, String sExtend, String sPath)
{
sPath = sPath + DateDir();
try
{
if (!Directory.Exists(sPath))
Directory.CreateDirectory(sPath);
//定义并实例化一个内存流,以存放提交上来的字节数组。
MemoryStream m = new MemoryStream(bAfs);
//原图绝对路径
string sPathPicName = sPath + "\" + AutoFileName() + sExtend;
//原始图片写入到文件夹中
FileStream f = new FileStream(sPathPicName, FileMode.Create);
///把内内存里的数据写入物理文件
m.WriteTo(f);
m.Close();
f.Close();
f = null;
m = null;
return sPathPicName;
}
catch (Exception)
{
return "";
}
}
/// <summary>
/// 生成缩略图
/// 宽高为0则返回处理后的原图,宽高不为0则返回相应的缩略图
/// </summary>
/// <param name="_Model">图片处理模型</param>
/// <param name="sPathPic">输出缩略图相对路径</param>
/// <returns>返回缩略图相对路径</returns>
public static String ReturnThumbnailsImage(ImageModel _Model)
{
if (String.IsNullOrEmpty(_Model.OriginalImageUrl))
{
return "";
}
if (!File.Exists(_Model.OriginalImageUrl))
{
return "";
}
try
{
String sFileName = AutoFileName();
String sLastPath = _Model.Path + DateDir() + "\" + sFileName + _Model.Extend;
//从文件取得图片对象
System.Drawing.Image image = System.Drawing.Image.FromFile(_Model.OriginalImageUrl);
_Model.Width = _Model.Width == 0 ? image.Width : _Model.Width;
_Model.Height = _Model.Height == 0 ? image.Height : _Model.Height;
//取得图片大小
Size size = new Size(_Model.Width, _Model.Height);
//新建一个bmp图片
Image bitmap = new Bitmap(size.Width, size.Height);
//新建一个画板
Graphics g = Graphics.FromImage(bitmap);
//设置高质量插值法
g.InterpolationMode = InterpolationMode.High;
//设置高质量,低速度呈现平滑程度
g.SmoothingMode = SmoothingMode.HighQuality;
//清空一下画布
g.Clear(Color.Transparent);
//在指定位置画图
g.DrawImage(image, new Rectangle(0, 0, bitmap.Width, bitmap.Height),
GetImageBeginXAndY(_Model.Width,_Model.Height,image.Width,image.Height),
GraphicsUnit.Pixel);
//保存高清晰度的缩略图
bitmap.Save(sLastPath, System.Drawing.Imaging.ImageFormat.Jpeg);
g.Dispose();
return sReturnPath + "/" + sFileName + _Model.Extend;
}
catch (Exception)
{
return "";
}
}
/// <summary>
/// 功能:根据位置计算出绘图的开始点
/// </summary>
/// <param name="Towidth">需要生成图片的宽度</param>
/// <param name="ToHeight">需要生成图片的高度</param>
/// <param name="Owidth">原图宽度</param>
/// <param name="OHeight">原图高度</param>
/// <param name="x">绘图的开始x 点坐标</param>
/// <param name="y">绘图的开始 y 点坐标</param>
private static Rectangle GetImageBeginXAndY(int Towidth, int ToHeight, int Owidth, int OHeight)
{
int towidth = Towidth;
int toheight = ToHeight;
int x = 0;
int y = 0;
int ow = Owidth;
int oh = OHeight;
if ((double)Owidth / (double)OHeight > (double)Towidth / (double)ToHeight)
{
oh = OHeight;
ow = OHeight * towidth / toheight;
y = 0;
x = (Owidth - ow) / 2;
}
else
{
ow = Owidth;
oh = Owidth * ToHeight / towidth;
x = 0;
y = (OHeight - oh) / 2;
}
return new Rectangle(x, y, ow, oh);
}
/// <summary>
/// 生成多张缩略图
/// </summary>
/// <param name="sPath">原图绝对路径</param>
/// <param name="sOriginalImageUrl">原图绝对路径</param>
/// <param name="sExtend">图片后缀名</param>
/// <param name="lst_PicPath">图片宽高规则列表</param>
/// <returns>返回多个缩略图列表</returns>
public static List<PicThumbnailRuleModel> GetMultiThumbnails(String sPath, String sOriginalImageUrl, String sExtend, List<PicThumbnailRuleModel> lst_PicPath)
{
List<PicThumbnailRuleModel> lst_Model = new List<PicThumbnailRuleModel>();
ImageModel _ImageModel = new ImageModel();
//绝对文件夹路径
_ImageModel.Path = sPath;
_ImageModel.OriginalImageUrl = sOriginalImageUrl;
_ImageModel.Extend = sExtend;
for (int i = 0; i < lst_PicPath.Count; i++)
{
_ImageModel.Width = lst_PicPath[i].Width;
_ImageModel.Height = lst_PicPath[i].Height;
PicThumbnailRuleModel Model = new PicThumbnailRuleModel();
Model.Width = _ImageModel.Width;
Model.Height = _ImageModel.Height;
Model.PicThumbnailsInfo = UploadImageComm.ReturnThumbnailsImage(_ImageModel);
lst_Model.Add(Model);
}
return lst_Model;
}
/// <summary>
/// 图片缩略图规则模型
/// </summary>
public class PicThumbnailRuleModel
{
/// <summary>
/// 设置生成图片宽度
/// </summary>
public Int32 Width { get; set; }
/// <summary>
/// 设置生成图片高度
/// </summary>
public Int32 Height { get; set; }
/// <summary>
/// 生成之后的图片名称
/// </summary>
public String PicThumbnailsInfo { get; set; }
}