NET+EF+MVC上传图片时如何给图片加水印

NET+EF+MVC开发后台或接口时,有时候需要将上传的图片加上水印(水印为你公司logo或其它图片),下面笔者给一个完整方法,供大家参考:


NET+EF+MVC上传图片时如何给图片加水印


public class UpFileDistribution : IHttpHandler

{

public void ProcessRequest(HttpContext context)

{

WisdomStarsEntities ef = new WisdomStarsEntities();

context.Response.ContentType = "text/plain";

string fileExt = context.Request["ext"];//接收文件的扩展名

string IMGDir = context.Request["ImgDir"]; //上传文件的目标

string url1 = context.Request["url1"];

string subsidiary_id = context.Request["subsidiary_id"];

int watermark = DNTRequest.GetInt("watermark", 0);

if (string.IsNullOrEmpty(subsidiary_id))

{

subsidiary_id = "1";

}

/*重要提示。为了数据安全这里需要来源验证,大小,图片格式等验证*/

//Common.Log.NetLog.WriteTextLog("url1", url1);

string suf = "";

if (!isImage(fileExt, out suf))

{

context.Response.Write("数据异常!");

context.Response.End();

}

if (url1 == null || url1 == "")

{

context.Response.Write("数据异常!");

context.Response.End();

}

if (IMGDir == null || IMGDir == "")

{

IMGDir = "KTImages";

}

int serverId = Convert.ToInt32(context.Request["serverId"]);//图片所在的图片服务器的编号。

//string imageDir = "/ImageFile/" + DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + "/";

string imageDir = "/gptfx/" + subsidiary_id + "/" + IMGDir + "/";

Directory.CreateDirectory(Path.GetDirectoryName(context.Request.MapPath(imageDir)));//创建存储图片的目录;

string newFileName = Guid.NewGuid().ToString();//使用GUID作为文件的新名称,当然也可以使用其他的方式对文件进行重命名。

string fullDir = imageDir + newFileName + fileExt;//完整的图片存储的路径

if (serverId > 0)

{

using (FileStream fileStream = File.OpenWrite(context.Request.MapPath(fullDir)))

{

context.Request.InputStream.CopyTo(fileStream);//将文件数据写到磁盘上。

fileStream.Close();

#region 加水印

if(watermark==1)

{

System.Drawing.Image image = System.Drawing.Image.FromFile(context.Server.MapPath(fullDir));

System.Drawing.Image copyImage = System.Drawing.Image.FromFile(context.Server.MapPath("/Images/specialprice.png"));

Graphics g = Graphics.FromImage(image);

//g.DrawImage(copyImage, new Rectangle(0, 0, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel);

if (image.Width > 400 && image.Height > 200)

{

g.DrawImage(copyImage, new Rectangle(image.Width - copyImage.Width - 40, image.Height - copyImage.Height - 40, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel);

}

g.Dispose();

string upfilepath = context.Server.MapPath(imageDir + "1" + newFileName + fileExt); //加水印后新路径

image.Save(upfilepath);

image.Dispose();

File.Delete(context.Request.MapPath(fullDir));

fullDir = imageDir + "1" + newFileName + fileExt;

}

#endregion 加水印

if (Utils.CheckPictureSafe(context.Request.MapPath(fullDir)))

{

}

else

{

File.Delete(context.Request.MapPath(fullDir));

}

GPT_ImageInfo imageInfo = new GPT_ImageInfo();

imageInfo.ImageName = fullDir;//存储图片路径

imageInfo.ImageServerId = serverId;

imageInfo.createtime = DateTime.Now;

ef.GPT_ImageInfo.Add(imageInfo);//将数据添加到上下文中,并且打上了添加标记。

int i = ef.SaveChanges();//保存数据.

// context.Response.Write("http://" + url1 + fullDir);

context.Response.Write(fullDir);

fileStream.Close();

}

}

else

{

context.Response.Write("数据异常!");

context.Response.End();

}

}

private bool isImage(string fileExt, out string suf)

{

// string imgtype = "gif|jpg|jpeg|bmp";

string hz = fileExt;

suf = hz;

if (fileExt != ".gif" && hz != ".jpg" && hz != ".jpeg" && hz != ".bmp" && fileExt != ".png" && fileExt != ".xls")

{

return false;

}

return true;

}

public bool IsReusable

{

get

{

return false;

}

}

}

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章