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