思路分析:
- 获得上传的图片
- 将图片保存
- 按照要求的尺寸重新绘制图片
- 保存新的图片
- 删除原图
代码:
public ActionResult ImageUploader(string id, string path, string route, HttpPostedFileBase file)
{
if (Request.Files.Count == 0)
{
return FailedJsonObject(message: "保存失败");
}
//图片的url
var url= "http://localhost:8088";
//图片保存的物理地址
path = Path.Combine("E:" "article", "video");
//判断地址是否存在,如果不存在创建该地址
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
//获得文件扩展名
var extension = Path.GetExtension(file.FileName);
//随机生成文件名称
var name = Guid.NewGuid().ToString("N");
//生成完成文件名称,带扩展
var oriFileNameTemp =name+"_ori" + extension;
//新图片名称,随便命名
var newExt = "_420x280" + extension;
//生成文件完整路径
var filename = Path.Combine(path, oriFileNameTemp);
//生成图片的url
var str4 = url + name+newExt;
//保存原图
file.SaveAs(filename);
//重新绘制图片,设置尺寸
CutImage(filename, 420, 280, newExt, file);
System.IO.File.Delete(filename);
return SuccessJsonObject(str4);
}
public ActionResult CutImage(string oriUrl,int width,int height,string name, HttpPostedFileBase file)
{
//主要是为了后面拼接新图的地址
var path = oriUrl.Substring(0, oriUrl.LastIndexOf("_", StringComparison.OrdinalIgnoreCase));
//原图
var bitmap = new Bitmap(oriUrl);
//目标图
var destBitmap = new Bitmap(width, height);
//矩形容器
var destRect = new Rectangle(0, 0, width, height);
//创建绘制对象
var g = Graphics.FromImage(destBitmap);
//拼接新图的地址
var imgPath = path + name;
try
{
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(bitmap, destRect);//绘制
destBitmap.Save(imgPath);
}
catch (Exception e)
{
return FailedJsonObject(message: "头像保存失败");
}
finally
{
g.Dispose();//释放
bitmap.Dispose();//释放
destBitmap.Dispose();
}
//*****结束缩放
return SuccessJsonObject();
}