代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C#
】
实现对图片上传的接收
作者:
/ 发布于
2021/6/17
/
1661
using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using BCW.Files; string DirPath = string.Empty; ? ? ? ? string prevDirPath = string.Empty; ? ? ? ? string Path = "/Files/bbs/" + meid + "/act/"; ? ? ? ? string prevPath = "/Files/bbs/" + meid + "/prev/"; ? ? ? ? if (FileTool.CreateDirectory(Path, out DirPath)) ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? string sPath = BCW.Files.FileTool.DownloadFile(Path, 0, FileName); ? ? ? ? ? ? if (sPath != FileName) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? //缩略图生成 ? ? ? ? ? ? ? ? string fileExtension = BCW.Files.FileTool.GetFileExt(sPath).ToLower(); ? ? ? ? ? ? ? ? string SavePath = System.Web.HttpContext.Current.Request.MapPath(sPath); ? ? ? ? ? ? ? ? //=============================图片木马检测,包括TXT=========================== ? ? ? ? ? ? ? ? string vSavePath = SavePath; ? ? ? ? ? ? ? ? bool IsPass = true; ? ? ? ? ? ? ? ? System.IO.StreamReader sr = new System.IO.StreamReader(vSavePath, System.Text.Encoding.Default); ? ? ? ? ? ? ? ? string strContent = sr.ReadToEnd().ToLower(); ? ? ? ? ? ? ? ? sr.Close(); ? ? ? ? ? ? ? ? string str = "system.|request|javascript|script |script>|.getfolder|.createfolder|.deletefolder|.createdirectory|.deletedirectory|.saveas|wscript.shell|script.encode|server.|.createobject|execute|activexobject|language="; ? ? ? ? ? ? ? ? foreach (string s in str.Split('|')) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? if (strContent.IndexOf(s) != -1) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? System.IO.File.Delete(vSavePath); ? ? ? ? ? ? ? ? ? ? ? ? IsPass = false; ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if (IsPass == false) ? ? ? ? ? ? ? ? ? ? Utils.Error("非法图片..", ""); ? ? ? ? ? ? ? ? //=============================图片木马检测,包括TXT=========================== ? ? ? ? ? ? ? ? string prevSavePath = string.Empty; ? ? ? ? ? ? ? ? int ThumbType = Convert.ToInt32(ub.GetSub("UpaThumbType", xmlPath)); ? ? ? ? ? ? ? ? int width = Convert.ToInt32(ub.GetSub("UpaWidth", xmlPath)); ? ? ? ? ? ? ? ? int height = Convert.ToInt32(ub.GetSub("UpaHeight", xmlPath)); ? ? ? ? ? ? ? ? if (ThumbType > 0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? try ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? bool pbool = false; ? ? ? ? ? ? ? ? ? ? ? ? if (ThumbType == 1) ? ? ? ? ? ? ? ? ? ? ? ? ? ? pbool = true; ? ? ? ? ? ? ? ? ? ? ? ? if (FileTool.CreateDirectory(prevPath, out prevDirPath)) ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? prevSavePath = SavePath.Replace("act", "prev"); ? ? ? ? ? ? ? ? ? ? ? ? ? ? int IsThumb = 0; ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (fileExtension == ".gif") ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (ThumbType > 0) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? new BCW.Graph.GifHelper().GetThumbnail(SavePath, prevSavePath, width, height, pbool); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? IsThumb = Convert.ToInt32(ub.GetSub("UpaIsThumb", xmlPath)); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (IsThumb > 0) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (IsThumb == 1) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? new BCW.Graph.GifHelper().SmartWaterMark(prevSavePath, "", ub.GetSub("UpaWord", xmlPath), ub.GetSub("UpaWordColor", xmlPath), "Arial", 12, Convert.ToInt32(ub.GetSub("UpaPosition", xmlPath)));//文字水印 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? new BCW.Graph.GifHelper().WaterMark(prevSavePath, "", ub.GetSub("UpaWord", xmlPath), Convert.ToInt32(ub.GetSub("UpaPosition", xmlPath)), Convert.ToInt32(ub.GetSub("UpaPosition", xmlPath)));//图片水印 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (ThumbType > 0) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? new BCW.Graph.ImageHelper().ResizeImage(SavePath, prevSavePath, width, height, pbool); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? IsThumb = Convert.ToInt32(ub.GetSub("UpaIsThumb", xmlPath)); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (IsThumb > 0) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (IsThumb == 1) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? new BCW.Graph.ImageHelper().WaterMark(prevSavePath, "", ub.GetSub("UpaWord", xmlPath), ub.GetSub("UpaWordColor", xmlPath), "Arial", 12, Convert.ToInt32(ub.GetSub("UpaPosition", xmlPath)));//文字水印 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? new BCW.Graph.ImageHelper().WaterMark(prevSavePath, "", ub.GetSub("UpaWord", xmlPath), Convert.ToInt32(ub.GetSub("UpaPosition", xmlPath)), Convert.ToInt32(ub.GetSub("UpaTran", xmlPath)));//图片水印 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? catch { } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? string Content = Utils.GetRequest("Content", "post", 1, "", ""); ? ? ? ? ? ? ? ? if (!string.IsNullOrEmpty(Content)) ? ? ? ? ? ? ? ? ? ? Content = Utils.Left(Content, 30); ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? Content = ""; ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? BCW.Model.Upfile model = new BCW.Model.Upfile(); ? ? ? ? ? ? ? ? model.Types = 1; // FileTool.GetExtType(fileExtension); ? ? ? ? ? ? ? ? model.NodeId = NodeId; ? ? ? ? ? ? ? ? model.UsID = meid; ? ? ? ? ? ? ? ? model.ForumID = 0; ? ? ? ? ? ? ? ? model.BID = 0; ? ? ? ? ? ? ? ? model.ReID = 0; ? ? ? ? ? ? ? ? model.Files = sPath; ? ? ? ? ? ? ? ? if (string.IsNullOrEmpty(prevDirPath)) ? ? ? ? ? ? ? ? ? ? model.PrevFiles = ""; ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? model.PrevFiles = sPath.Replace("act", "prev"); ? ? ? ? ? ? ? ? model.Content = Content; ? ? ? ? ? ? ? ? model.FileSize = BCW.Files.FileTool.GetFileLength(sPath); ? ? ? ? ? ? ? ? model.FileExt = fileExtension; ? ? ? ? ? ? ? ? model.DownNum = 0; ? ? ? ? ? ? ? ? model.Cent = 0; ? ? ? ? ? ? ? ? //审核要求指示 ? ? ? ? ? ? ? ? int Verify = Utils.ParseInt(ub.GetSub("UpIsVerify", xmlPath)); ? ? ? ? ? ? ? ? if (Verify > 0) ? ? ? ? ? ? ? ? ? ? model.IsVerify = 1; ? ? ? ? ? ? ? ? model.AddTime = DateTime.Now; ? ? ? ? ? ? ? ? new BCW.BLL.Upfile().Add(model); ? ? ? ? ? ? ? ? //动态记录 ? ? ? ? ? ? ? ? new BCW.BLL.Action().Add(meid, "在相册上传了[URL=/bbs/albums.aspx?uid=" + meid + "]新的文件[/URL]"); ? ? ? ? ? ? ? ? Utils.Success("地址上传文件", "上传1个文件成功!<a href=\"" + ReplaceWap(Utils.getUrl("addfile.aspx?act=collec&leibie=" + leibie + "")) + "\">>继续上传</a>", ReplaceWap(Utils.getUrl("albums.aspx?uid=" + meid + "&leibie=" + leibie + "")), "2"); ? ? ? ? ? ? } ? ? ? ? ? ? else ? ? ? ? ? ? { ? ? ? ? ? ? ? ? Utils.Error("上传失败,请检查文件是否存在", ""); ? ? ? ? ? ? } 对于文件上传: ?/// <summary> ? ? /// 上传文件 ? ? /// </summary> ? ? private void SaveFiles(int meid, int leibie, int NodeId, out int kk) ? ? { ? ? ? ? ? ? ? ? //允许上传数量 ? ? ? ? int maxAddNum = Convert.ToInt32(ub.GetSub("UpAddNum", xmlPath)); ? ? ? ? int AddNum = 0; ? ? ? ? if (maxAddNum > 0) ? ? ? ? { ? ? ? ? ? ? //计算今天上传数量 ? ? ? ? ? ? AddNum = new BCW.BLL.Upfile().GetTodayCount(meid); ? ? ? ? } ? ? ? ? //遍历File表单元素 ? ? ? ? System.Web.HttpFileCollection files = System.Web.HttpContext.Current.Request.Files; ? ? ? ? // int j = 1; ? ? ? ? int j = files.Count; ? ? ? ? int k = 0; ? ? ? ? try ? ? ? ? { ? ? ? ? ? ? string GetFiles = string.Empty; ? ? ? ? ? ? //for (int iFile = 0; iFile < files.Count; iFile++) ? ? ? ? ? ? for (int iFile = files.Count - 1; iFile > -1; iFile--) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? //检查文件扩展名字 ? ? ? ? ? ? ? ? System.Web.HttpPostedFile postedFile = files[iFile]; ? ? ? ? ? ? ? ? string fileName, fileExtension; ? ? ? ? ? ? ? ? fileName = System.IO.Path.GetFileName(postedFile.FileName); ? ? ? ? ? ? ? ? string UpExt = ub.GetSub("UpaFileExt", xmlPath); ? ? ? ? ? ? ? ? int UpLength = Convert.ToInt32(ub.GetSub("UpaMaxFileSize", xmlPath)); ? ? ? ? ? ? ? ? if (fileName != "") ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? fileExtension = System.IO.Path.GetExtension(fileName).ToLower(); ? ? ? ? ? ? ? ? ? ? //检查是否允许上传格式 ? ? ? ? ? ? ? ? ? ? if (UpExt.IndexOf(fileExtension) == -1) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? continue; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? //非法上传 ? ? ? ? ? ? ? ? ? ? if (fileExtension == ".asp" || fileExtension == ".aspx" || fileExtension == ".jsp" || fileExtension == ".php" || fileExtension == ".asa" || fileExtension == ".cer" || fileExtension == ".cdx" || fileExtension == ".htr" || fileExtension == ".exe") ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? continue; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (postedFile.ContentLength > Convert.ToInt32(UpLength * 1024)) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? continue; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? string DirPath = string.Empty; ? ? ? ? ? ? ? ? ? ? string prevDirPath = string.Empty; ? ? ? ? ? ? ? ? ? ? string Path = "/Files/bbs/" + meid + "/act/"; ? ? ? ? ? ? ? ? ? ? string prevPath = "/Files/bbs/" + meid + "/prev/"; ? ? ? ? ? ? ? ? ? ? int IsVerify = 0; ? ? ? ? ? ? ? ? ? ? if (FileTool.CreateDirectory(Path, out DirPath)) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //上传数量限制 ? ? ? ? ? ? ? ? ? ? ? ? if (maxAddNum > 0) ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (maxAddNum <= (AddNum + k)) ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? k = -k; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (k == 0) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? k = -999; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? //生成随机文件名 ? ? ? ? ? ? ? ? ? ? ? ? fileName = DT.getDateTimeNum() + iFile + fileExtension; ? ? ? ? ? ? ? ? ? ? ? ? string SavePath = System.Web.HttpContext.Current.Request.MapPath(DirPath) + fileName; ? ? ? ? ? ? ? ? ? ? ? ? postedFile.SaveAs(SavePath); ? ? ? ? ? ? ? ? ? ? ? ? //=============================图片木马检测,包括TXT=========================== ? ? ? ? ? ? ? ? ? ? ? ? string vSavePath = SavePath; ? ? ? ? ? ? ? ? ? ? ? ? if (fileExtension == ".txt" || fileExtension == ".gif" || fileExtension == ".jpg" || fileExtension == ".jpeg" || fileExtension == ".png" || fileExtension == ".bmp") ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? bool IsPass = true; ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.IO.StreamReader sr = new System.IO.StreamReader(vSavePath, System.Text.Encoding.Default); ? ? ? ? ? ? ? ? ? ? ? ? ? ? string strContent = sr.ReadToEnd().ToLower(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? sr.Close(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? string str = "system.|request|javascript|script |script>|.getfolder|.createfolder|.deletefolder|.createdirectory|.deletedirectory|.saveas|wscript.shell|script.encode|server.|.createobject|execute|activexobject|language="; ? ? ? ? ? ? ? ? ? ? ? ? ? ? foreach (string s in str.Split('|')) ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (strContent.IndexOf(s) != -1) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? System.IO.File.Delete(vSavePath); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? IsPass = false; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (IsPass == false) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? continue; ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? //=============================图片木马检测,包括TXT=========================== ? ? ? ? ? ? ? ? ? ? ? ? //审核要求指示 ? ? ? ? ? ? ? ? ? ? ? ? int Verify = Utils.ParseInt(ub.GetSub("UpIsVerify", xmlPath)); ? ? ? ? ? ? ? ? ? ? ? ? //缩略图生成 ? ? ? ? ? ? ? ? ? ? ? ? if (fileExtension == ".gif" || fileExtension == ".jpg" || fileExtension == ".jpeg" || fileExtension == ".png" || fileExtension == ".bmp") ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? int ThumbType = Convert.ToInt32(ub.GetSub("UpaThumbType", xmlPath)); ? ? ? ? ? ? ? ? ? ? ? ? ? ? int width = Convert.ToInt32(ub.GetSub("UpaWidth", xmlPath)); ? ? ? ? ? ? ? ? ? ? ? ? ? ? int height = Convert.ToInt32(ub.GetSub("UpaHeight", xmlPath)); ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (ThumbType > 0) ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? try ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? bool pbool = false; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (ThumbType == 1) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? pbool = true; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (FileTool.CreateDirectory(prevPath, out prevDirPath)) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? string prevSavePath = System.Web.HttpContext.Current.Request.MapPath(prevDirPath) + fileName; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int IsThumb = 0; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (fileExtension == ".gif") ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (ThumbType > 0) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? new BCW.Graph.GifHelper().GetThumbnail(SavePath, prevSavePath, width, height, pbool); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? IsThumb = Convert.ToInt32(ub.GetSub("UpaIsThumb", xmlPath)); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (IsThumb > 0) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (IsThumb == 1) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? new BCW.Graph.GifHelper().SmartWaterMark(SavePath, "", ub.GetSub("UpaWord", xmlPath), ub.GetSub("UpaWordColor", xmlPath), "Arial", 12, Convert.ToInt32(ub.GetSub("UpaPosition", xmlPath)));//文字水印 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? new BCW.Graph.GifHelper().WaterMark(SavePath, "", Server.MapPath(ub.GetSub("UpaWord", xmlPath)), Convert.ToInt32(ub.GetSub("UpaPosition", xmlPath)), Convert.ToInt32(ub.GetSub("UpaTran", xmlPath)));//图片水印 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (fileExtension == ".png" || fileExtension == ".jpg" || fileExtension == ".jpeg") ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (ThumbType > 0) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? new BCW.Graph.ImageHelper().ResizeImage(SavePath, prevSavePath, width, height, pbool); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? IsThumb = Convert.ToInt32(ub.GetSub("UpaIsThumb", xmlPath)); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (IsThumb > 0) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (IsThumb == 1) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? new BCW.Graph.ImageHelper().WaterMark(SavePath, "", ub.GetSub("UpaWord", xmlPath), ub.GetSub("UpaWordColor", xmlPath), "Arial", 12, Convert.ToInt32(ub.GetSub("UpaPosition", xmlPath)));//文字水印 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? new BCW.Graph.ImageHelper().WaterMark(SavePath, "", Server.MapPath(ub.GetSub("UpaWord", xmlPath)), Convert.ToInt32(ub.GetSub("UpaPosition", xmlPath)), Convert.ToInt32(ub.GetSub("UpaTran", xmlPath)));//图片水印 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? catch { } ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? //图片审核 ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (Verify > 0) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? IsVerify = 1; ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? //文件审核 ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (Verify > 1) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? IsVerify = 1; ? ? ? ? ? ? ? ? ? ? ? ? ? ? //自动识别出非图片 ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (leibie == 1) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? leibie = FileTool.GetExtType(fileExtension); ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? string Content = Utils.GetRequest("stext" + j + "", "post", 1, "", ""); ? ? ? ? ? ? ? ? ? ? ? ? if (!string.IsNullOrEmpty(Content)) ? ? ? ? ? ? ? ? ? ? ? ? ? ? Content = Utils.Left(Content, 30); ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? Content = ""; ? ? ? ? ? ? ? ? ? ? ? ? BCW.Model.Upfile model = new BCW.Model.Upfile(); ? ? ? ? ? ? ? ? ? ? ? ? model.Types = leibie; // FileTool.GetExtType(fileExtension); ? ? ? ? ? ? ? ? ? ? ? ? model.NodeId = NodeId; ? ? ? ? ? ? ? ? ? ? ? ? model.UsID = meid; ? ? ? ? ? ? ? ? ? ? ? ? model.ForumID = 0; ? ? ? ? ? ? ? ? ? ? ? ? model.BID = 0; ? ? ? ? ? ? ? ? ? ? ? ? model.ReID = 0; ? ? ? ? ? ? ? ? ? ? ? ? model.Files = DirPath + fileName; ? ? ? ? ? ? ? ? ? ? ? ? if (string.IsNullOrEmpty(prevDirPath)) ? ? ? ? ? ? ? ? ? ? ? ? ? ? model.PrevFiles = model.Files; ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? model.PrevFiles = prevDirPath + fileName; ? ? ? ? ? ? ? ? ? ? ? ? model.Content = Content; ? ? ? ? ? ? ? ? ? ? ? ? model.FileSize = Convert.ToInt64(postedFile.ContentLength); ? ? ? ? ? ? ? ? ? ? ? ? model.FileExt = fileExtension; ? ? ? ? ? ? ? ? ? ? ? ? model.DownNum = 0; ? ? ? ? ? ? ? ? ? ? ? ? model.Cent = 0; ? ? ? ? ? ? ? ? ? ? ? ? model.IsVerify = IsVerify; ? ? ? ? ? ? ? ? ? ? ? ? model.AddTime = DateTime.Now; ? ? ? ? ? ? ? ? ? ? ? ? new BCW.BLL.Upfile().Add(model); ? ? ? ? ? ? ? ? ? ? ? ? k++; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? // j++; ? ? ? ? ? ? ? ? ? ? j--; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? catch { } ? ? ? ? kk = k; ? ? } ? ? private static string ReplaceWap(string p_strUrl) ? ? { ? ? ? ? p_strUrl = p_strUrl.Replace("20a", "1a"); ? ? ? ? return p_strUrl; ? ? } 图片处理程序 using System; using System.Web; using System.Collections.Generic; using System.Text; using System.IO; using System.Drawing; using System.Drawing.Imaging; using System.Collections; namespace BCW.Graph { ? ? public enum SizeMode ? ? { ? ? ? ? Large, ? ? ? ? Normal ? ? } ? ? public class GifHelper ? ? { ? ? ? ? ? ? ? ? ? ?? ? ? ? ? /// <summary> ? ? ? ? /// 构造方法 ? ? ? ? /// </summary> ? ? ? ? public GifHelper() ? ? ? ? { ? ? ? ? } ? ? ? ? #region 对gif动画添加水印-字体颜色确定 ? ? ? ? /// <summary> ? ? ? ? /// 对gif动画添加水印 ? ? ? ? /// </summary> ? ? ? ? /// <param name="gifFilePath">原gif动画的路径</param> ? ? ? ? /// <param name="text">水印文字</param> ? ? ? ? /// <param name="textForceColor">水印文字的颜色,因为gif不是真彩色图片,所以在显示的时候,该颜色可能有所误差,但基本上可以确定颜色范围</param> ? ? ? ? /// <param name="font">字体</param> ? ? ? ? /// <param name="x">水印位置横坐标</param> ? ? ? ? /// <param name="y">水印位置纵坐标</param> ? ? ? ? /// <param name="outputPath">输出路径</param> ? ? ? ? public void WaterMark(string gifFilePath, SizeMode sizeMode, string text, Color textForceColor, Font font, float x, float y, string outputPath) ? ? ? ? { ? ? ? ? ? ? if (!File.Exists(gifFilePath)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? throw new IOException(string.Format("文件{0}不存在!", gifFilePath)); ? ? ? ? ? ? } ? ? ? ? ? ? using (Bitmap ora_Img = new Bitmap(gifFilePath)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if (ora_Img.RawFormat.Guid != ImageFormat.Gif.Guid) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? throw new IOException(string.Format("文件{0}!", gifFilePath)); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? GifImage gifImage = GifDecoder.Decode(gifFilePath); ? ? ? ? ? ? if (sizeMode == SizeMode.Large) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ThinkDisposalMethod(gifImage); ? ? ? ? ? ? } ? ? ? ? ? ? Color textColor = textForceColor; ? ? ? ? ? ? int frameCount = 0; ? ? ? ? ? ? foreach (GifFrame f in gifImage.Frames) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if ((sizeMode == SizeMode.Normal && frameCount++ == 0) || sizeMode == SizeMode.Large) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? Graphics g = Graphics.FromImage(f.Image); ? ? ? ? ? ? ? ? ? ? g.DrawString(text, font, new SolidBrush(textColor), new PointF(x, y)); ? ? ? ? ? ? ? ? ? ? g.Dispose(); ? ? ? ? ? ? ? ? ? ? bool hasTextColor = false; ? ? ? ? ? ? ? ? ? ? Color32[] colors = PaletteHelper.GetColor32s(f.LocalColorTable); ? ? ? ? ? ? ? ? ? ? foreach (Color32 c in colors) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if (c.ARGB == textColor.ToArgb()) ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? hasTextColor = true; ? ? ? ? ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (!hasTextColor) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if (f.Palette.Length < 256) ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? int newSize = f.Palette.Length * 2; ? ? ? ? ? ? ? ? ? ? ? ? ? ? Color32[] newColors = new Color32[newSize]; ? ? ? ? ? ? ? ? ? ? ? ? ? ? newColors[f.Palette.Length] = new Color32(textColor.ToArgb()); ? ? ? ? ? ? ? ? ? ? ? ? ? ? Array.Copy(colors, newColors, colors.Length); ? ? ? ? ? ? ? ? ? ? ? ? ? ? byte[] lct = new byte[newColors.Length * 3]; ? ? ? ? ? ? ? ? ? ? ? ? ? ? int index = 0; ? ? ? ? ? ? ? ? ? ? ? ? ? ? foreach (Color32 c in newColors) ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? lct[index++] = c.Red; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? lct[index++] = c.Green; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? lct[index++] = c.Blue; ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? f.LocalColorTable = lct; ? ? ? ? ? ? ? ? ? ? ? ? ? ? f.ImageDescriptor.LctFlag = true; ? ? ? ? ? ? ? ? ? ? ? ? ? ? f.ImageDescriptor.LctSize = newSize; ? ? ? ? ? ? ? ? ? ? ? ? ? ? f.ColorDepth = f.ColorDepth + 1; ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? OcTreeQuantizer q = new OcTreeQuantizer(8); ? ? ? ? ? ? ? ? ? ? ? ? ? ? Color32[] cs = q.Quantizer(f.Image); ? ? ? ? ? ? ? ? ? ? ? ? ? ? byte[] lct = new byte[cs.Length * 3]; ? ? ? ? ? ? ? ? ? ? ? ? ? ? int index = 0; ? ? ? ? ? ? ? ? ? ? ? ? ? ? int colorCount = 0; ? ? ? ? ? ? ? ? ? ? ? ? ? ? foreach (Color32 c in cs) ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? lct[index++] = c.Red; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? lct[index++] = c.Green; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? lct[index++] = c.Blue; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (c.ARGB == f.BgColor.ARGB) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? f.GraphicExtension.TranIndex = (byte)colorCount; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? colorCount++; ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? Quantizer(f.Image, cs); ? ? ? ? ? ? ? ? ? ? ? ? ? ? f.LocalColorTable = lct; ? ? ? ? ? ? ? ? ? ? ? ? ? ? f.ImageDescriptor.LctFlag = true; ? ? ? ? ? ? ? ? ? ? ? ? ? ? f.ImageDescriptor.LctSize = 256; ? ? ? ? ? ? ? ? ? ? ? ? ? ? f.ColorDepth = 8; ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? GifEncoder.Encode(gifImage, outputPath); ? ? ? ? } ? ? ? ? #endregion ? ? ? ? #region ?对gif动画添加水印 ? ? ? ? /// <summary> ? ? ? ? /// 对gif动画添加水印 ? ? ? ? /// </summary> ? ? ? ? /// <param name="gifFilePath">图像文件</param> ? ? ? ? /// <param name="outputPath">图像保存路径</param> ? ? ? ? /// <param name="p_text">水印文字</param> ? ? ? ? /// <param name="p_color">水印文字色</param> ? ? ? ? /// <param name="p_font">水印文字字体</param> ? ? ? ? /// <param name="p_fontsize">水印文字大小</param> ? ? ? ? /// <param name="p_position">水印位置</param> ? ? ? ? ///? ? ? ? ? public void SmartWaterMark(string gifFilePath, string outputPath, string p_text, string p_color, string p_font, float p_fontsize, int p_position) ? ? ? ? { ? ? ? ? ? ? if (!File.Exists(gifFilePath)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? throw new IOException(string.Format("文件{0}不存在!", gifFilePath)); ? ? ? ? ? ? } ? ? ? ? ? ? using (Bitmap ora_Img = new Bitmap(gifFilePath)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if (ora_Img.RawFormat.Guid != ImageFormat.Gif.Guid) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? throw new IOException(string.Format("文件{0}!", gifFilePath)); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? GifImage gifImage = GifDecoder.Decode(gifFilePath); ? ? ? ? ? ? ThinkDisposalMethod(gifImage); ? ? ? ? ? ? foreach (GifFrame f in gifImage.Frames) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? Graphics g = Graphics.FromImage(f.Image); ? ? ? ? ? ? ? ? Font font = new Font(p_font, p_fontsize, true ? FontStyle.Bold : FontStyle.Regular, GraphicsUnit.Pixel); ? ? ? ? ? ? ? ? SizeF fontSize = g.MeasureString(p_text, font); ? ? ? ? ? ? ? ? SolidBrush brush = new SolidBrush(ColorTranslator.FromHtml(p_color)); ? ? ? ? ? ? ? ? int x = 0; ? ? ? ? ? ? ? ? int y = 0; ? ? ? ? ? ? ? ? //水印位置 ? ? ? ? ? ? ? ? getImageST(p_position, f.ImageDescriptor.Width, f.ImageDescriptor.Height, (int)fontSize.Width, (int)fontSize.Height, out x, out y); ? ? ? ? ? ? ? ? g.DrawString(p_text, font, brush, x, y); ? ? ? ? ? ? ? ? g.Dispose(); ? ? ? ? ? ? } ? ? ? ? ? ? if (string.IsNullOrEmpty(outputPath)) ? ? ? ? ? ? ? ? GifEncoder.Encode(gifImage, gifFilePath); ? ? ? ? ? ? else ? ? ? ? ? ? ? ? GifEncoder.Encode(gifImage, outputPath); ? ? ? ? } ? ? ? ? #endregion ? ? ? ? #region 对gif动画添加图片水印 ? ? ? ? /// <summary> ? ? ? ? /// 对gif动画添加图片水印 ? ? ? ? /// </summary> ? ? ? ? /// <param name="gifFilePath">图像文件</param> ? ? ? ? /// <param name="outputPath">图像保存路径</param> ? ? ? ? /// <param name="p_SimageFile">水印图片文件</param> ? ? ? ? /// <param name="p_position">水印位置</param> ? ? ? ? /// <param name="p_Transparent">透明度</param> ? ? ? ? public void WaterMark(string gifFilePath, string outputPath, string p_SimageFile, int p_position, int p_Transparent) ? ? ? ? { ? ? ? ? ? ? if (!File.Exists(gifFilePath)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? throw new IOException(string.Format("文件{0}不存在!", gifFilePath)); ? ? ? ? ? ? } ? ? ? ? ? ? using (Bitmap ora_Img = new Bitmap(gifFilePath)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if (ora_Img.RawFormat.Guid != ImageFormat.Gif.Guid) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? throw new IOException(string.Format("文件{0}!", gifFilePath)); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? GifImage gifImage = GifDecoder.Decode(gifFilePath); ? ? ? ? ? ? Image waterImg = new Bitmap(p_SimageFile); ? ? ? ? ? ? ThinkDisposalMethod(gifImage); ? ? ? ? ? ? foreach (GifFrame f in gifImage.Frames) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? Graphics g = Graphics.FromImage(f.Image); ? ? ? ? ? ? ? ? int x = 0; ? ? ? ? ? ? ? ? int y = 0; ? ? ? ? ? ? ? ? //水印位置 ? ? ? ? ? ? ? ? getImageST(p_position, f.ImageDescriptor.Width, f.ImageDescriptor.Height, waterImg.Width, waterImg.Height, out x, out y); ? ? ? ? ? ? ? ? g.DrawImage(waterImg, x, y); ? ? ? ? ? ? ? ? g.Dispose(); ? ? ? ? ? ? ? ? OcTreeQuantizer q = new OcTreeQuantizer(8); ? ? ? ? ? ? ? ? Color32[] cs = q.Quantizer(f.Image); ? ? ? ? ? ? ? ? byte[] lct = new byte[cs.Length * 3]; ? ? ? ? ? ? ? ? int index = 0; ? ? ? ? ? ? ? ? int colorCount = 0; ? ? ? ? ? ? ? ? foreach (Color32 c in cs) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? lct[index++] = c.Red; ? ? ? ? ? ? ? ? ? ? lct[index++] = c.Green; ? ? ? ? ? ? ? ? ? ? lct[index++] = c.Blue; ? ? ? ? ? ? ? ? ? ? if (c.ARGB == f.BgColor.ARGB) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? f.GraphicExtension.TranIndex = (byte)colorCount; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? colorCount++; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? Quantizer(f.Image, cs); ? ? ? ? ? ? ? ? f.LocalColorTable = lct; ? ? ? ? ? ? ? ? f.ImageDescriptor.LctFlag = true; ? ? ? ? ? ? ? ? f.ImageDescriptor.LctSize = 256; ? ? ? ? ? ? ? ? f.ColorDepth = 8; ? ? ? ? ? ? } ? ? ? ? ? ? if (string.IsNullOrEmpty(outputPath)) ? ? ? ? ? ? ? ? GifEncoder.Encode(gifImage, gifFilePath); ? ? ? ? ? ? else ? ? ? ? ? ? ? ? GifEncoder.Encode(gifImage, outputPath); ? ? ? ? } ? ? ? ? #endregion ? ? ? ? #region gif动画缩略 ? ? ? ? /// <summary> ? ? ? ? /// 获取gif动画的缩略图 ? ? ? ? /// </summary> ? ? ? ? /// <param name="gifFilePath">原gif图片路径</param> ? ? ? ? /// <param name="rate">缩放大小</param> ? ? ? ? /// <param name="outputPath">缩略图大小</param> ? ? ? ? public void GetThumbnail(string gifFilePath, double rate, string outputPath) ? ? ? ? { ? ? ? ? ? ? if (!File.Exists(gifFilePath)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? throw new IOException(string.Format("文件{0}不存在!", gifFilePath)); ? ? ? ? ? ? } ? ? ? ? ? ? using (Bitmap ora_Img = new Bitmap(gifFilePath)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if (ora_Img.RawFormat.Guid != ImageFormat.Gif.Guid) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? throw new IOException(string.Format("文件{0}!", gifFilePath)); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? GifImage gifImage = GifDecoder.Decode(gifFilePath); ? ? ? ? ? ? if (rate != 1.0) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? gifImage.LogicalScreenDescriptor.Width = (short)(gifImage.LogicalScreenDescriptor.Width * rate); ? ? ? ? ? ? ? ? gifImage.LogicalScreenDescriptor.Height = (short)(gifImage.LogicalScreenDescriptor.Height * rate); ? ? ? ? ? ? ? ? int index = 0; ? ? ? ? ? ? ? ? foreach (GifFrame f in gifImage.Frames) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? f.ImageDescriptor.XOffSet = (short)(f.ImageDescriptor.XOffSet * rate); ? ? ? ? ? ? ? ? ? ? f.ImageDescriptor.YOffSet = (short)(f.ImageDescriptor.YOffSet * rate); ? ? ? ? ? ? ? ? ? ? f.ImageDescriptor.Width = (short)(f.ImageDescriptor.Width * rate); ? ? ? ? ? ? ? ? ? ? f.ImageDescriptor.Height = (short)(f.ImageDescriptor.Height * rate); ? ? ? ? ? ? ? ? ? ? if (f.ImageDescriptor.Width == 0) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? f.ImageDescriptor.Width = 1; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (f.ImageDescriptor.Height == 0) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? f.ImageDescriptor.Height = 1; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? Bitmap bmp = new Bitmap(f.ImageDescriptor.Width, f.ImageDescriptor.Height); ? ? ? ? ? ? ? ? ? ? Graphics g = Graphics.FromImage(bmp); ? ? ? ? ? ? ? ? ? ? g.DrawImage(f.Image, new Rectangle(0, 0, f.ImageDescriptor.Width, f.ImageDescriptor.Height)); ? ? ? ? ? ? ? ? ? ? g.Dispose(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Quantizer(bmp, f.Palette); ? ? ? ? ? ? ? ? ? ? f.Image.Dispose(); ? ? ? ? ? ? ? ? ? ? f.Image = bmp; ? ? ? ? ? ? ? ? ? ? index++; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? GifEncoder.Encode(gifImage, outputPath); ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? /// <summary> ? ? ? ? /// 调整图像宽度高度 (保持比例) ? ? ? ? /// </summary> ? ? ? ? /// <param name="p_imageFile">图像文件</param> ? ? ? ? /// <param name="p_width">图像大于该宽度将会被调整为该宽度尺寸</param> ? ? ? ? /// <param name="p_height">图像大于该高度将会被调整为该高度尺寸</param> ? ? ? ? /// <param name="p_bool">是否保持比例</param> ? ? ? ? public void GetThumbnail(string p_imageFile, int p_width, int p_height, bool p_bool, out string SavePath) ? ? ? ? { ? ? ? ? ? ? SavePath = "/Files/temp.jpg"; ? ? ? ? ? ? GetThumbnail(p_imageFile, HttpContext.Current.Server.MapPath(SavePath), p_width, p_height, p_bool); ? ? ? ? } ? ? ? ? /// <summary> ? ? ? ? /// 获取gif动画的缩略图 ? ? ? ? /// </summary> ? ? ? ? /// <param name="gifFilePath">原gif图片路径</param> ? ? ? ? /// <param name="p_width">图像大于该宽度将会被调整为该宽度尺寸</param> ? ? ? ? /// <param name="p_height">图像大于该高度将会被调整为该高度尺寸</param> ? ? ? ? /// <param name="p_bool">是否保持比例</param> ? ? ? ? /// <param name="outputPath">输出缩略图</param> ? ? ? ? public void GetThumbnail(string gifFilePath, string outputPath, int p_width, int p_height, bool p_bool) ? ? ? ? { ? ? ? ? ? ? if (!File.Exists(gifFilePath)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? throw new IOException(string.Format("文件{0}不存在!", gifFilePath)); ? ? ? ? ? ? } ? ? ? ? ? ? using (Bitmap ora_Img = new Bitmap(gifFilePath)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if (ora_Img.RawFormat.Guid != ImageFormat.Gif.Guid) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? throw new IOException(string.Format("文件{0}!", gifFilePath)); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? GifImage gifImage = GifDecoder.Decode(gifFilePath); ? ? ? ? ? ? //计算比例 ? ? ? ? ? ? int originalWidth = gifImage.Width; ? ? ? ? ? ? int originalHeight = gifImage.Height; ? ? ? ? ? ? double scaleWidth = 0; ? ? ? ? ? ? double scaleHeight = 0; ? ? ? ? ? ? double scale; ? ? ? ? ? ? int newWidth = 0; ? ? ? ? ? ? int newHeight = 0; ? ? ? ? ? ? if (p_bool) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? // 计算图像缩小的比例 ? ? ? ? ? ? ? ? if (originalWidth > p_width) ? ? ? ? ? ? ? ? ? ? scaleWidth = (double)originalWidth / (double)p_width; ? ? ? ? ? ? ? ? if (originalHeight > p_height) ? ? ? ? ? ? ? ? ? ? scaleHeight = (double)originalHeight / (double)p_height; ? ? ? ? ? ? ? ? if (scaleWidth != 0 || scaleHeight != 0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? // 比较缩小比例, 取缩小比例大的值 ? ? ? ? ? ? ? ? ? ? if (scaleWidth > scaleHeight) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? scale = scaleWidth; ? ? ? ? ? ? ? ? ? ? ? ? newWidth = p_width; ? ? ? ? ? ? ? ? ? ? ? ? newHeight = (int)((double)originalHeight / scale); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? scale = scaleHeight; ? ? ? ? ? ? ? ? ? ? ? ? newWidth = (int)((double)originalWidth / scale); ? ? ? ? ? ? ? ? ? ? ? ? newHeight = p_height; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? newWidth = originalWidth; ? ? ? ? ? ? ? ? ? ? newHeight = originalHeight; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? else ? ? ? ? ? ? { ? ? ? ? ? ? ? ? newWidth = p_width; ? ? ? ? ? ? ? ? newHeight = p_height; ? ? ? ? ? ? } ? ? ? ? ? ? double rate1 = (double)newWidth / (double)originalWidth; ? ? ? ? ? ? double rate2 = (double)newHeight / (double)originalHeight; ? ? ? ? ? ? gifImage.LogicalScreenDescriptor.Width = (short)(gifImage.LogicalScreenDescriptor.Width * rate1); ? ? ? ? ? ? gifImage.LogicalScreenDescriptor.Height = (short)(gifImage.LogicalScreenDescriptor.Height * rate2); ? ? ? ? ? ? int index = 0; ? ? ? ? ? ? foreach (GifFrame f in gifImage.Frames) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? f.ImageDescriptor.XOffSet = (short)(f.ImageDescriptor.XOffSet * rate1); ? ? ? ? ? ? ? ? f.ImageDescriptor.YOffSet = (short)(f.ImageDescriptor.YOffSet * rate2); ? ? ? ? ? ? ? ? f.ImageDescriptor.Width = (short)(f.ImageDescriptor.Width * rate1); ? ? ? ? ? ? ? ? f.ImageDescriptor.Height = (short)(f.ImageDescriptor.Height * rate2); ? ? ? ? ? ? ? ? if (f.ImageDescriptor.Width == 0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? f.ImageDescriptor.Width = 1; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if (f.ImageDescriptor.Height == 0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? f.ImageDescriptor.Height = 1; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? Bitmap bmp = new Bitmap(f.ImageDescriptor.Width, f.ImageDescriptor.Height); ? ? ? ? ? ? ? ? Graphics g = Graphics.FromImage(bmp); ? ? ? ? ? ? ? ? g.DrawImage(f.Image, new Rectangle(0, 0, f.ImageDescriptor.Width, f.ImageDescriptor.Height)); ? ? ? ? ? ? ? ? g.Dispose(); ? ? ? ? ? ? ? ? Quantizer(bmp, f.Palette); ? ? ? ? ? ? ? ? f.Image.Dispose(); ? ? ? ? ? ? ? ? f.Image = bmp; ? ? ? ? ? ? ? ? index++; ? ? ? ? ? ? } ? ? ? ? ? ? if (string.IsNullOrEmpty(outputPath)) ? ? ? ? ? ? ? ? GifEncoder.Encode(gifImage, gifFilePath); ? ? ? ? ? ? else ? ? ? ? ? ? ? ? GifEncoder.Encode(gifImage, outputPath); ? ? ? ? } ? ? ? ? #region 对图像进行量化,使其适应调色板 ? ? ? ? /// <summary> ? ? ? ? /// 对图像进行量化,使其适应调色板 ? ? ? ? /// </summary> ? ? ? ? /// <param name="bmp">图像</param> ? ? ? ? /// <param name="colorTab">调色板</param> ? ? ? ? void Quantizer(Bitmap bmp, Color32[] colorTab) ? ? ? ? { ? ? ? ? ? ? BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat); ? ? ? ? ? ? Hashtable table = new Hashtable(); ? ? ? ? ? ? unsafe ? ? ? ? ? ? { ? ? ? ? ? ? ? ? int* bmpScan = (int*)bmpData.Scan0.ToPointer(); ? ? ? ? ? ? ? ? for (int i = 0; i < bmp.Height * bmp.Width; i++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? Color c = Color.FromArgb(bmpScan[i]); ? ? ? ? ? ? ? ? ? ? int rc = FindCloser(c, colorTab, table); ? ? ? ? ? ? ? ? ? ? Color newc = Color.FromArgb(rc); ? ? ? ? ? ? ? ? ? ? bmpScan[i] = rc; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? bmp.UnlockBits(bmpData); ? ? ? ? } ? ? ? ? /// <summary> ? ? ? ? /// 对图像进行量化,使其适应调色板 ? ? ? ? /// </summary> ? ? ? ? /// <param name="bmp">图像</param> ? ? ? ? /// <param name="colorTab">调色板</param> ? ? ? ? void Quantizer(Bitmap bmp, int[] colorTab) ? ? ? ? { ? ? ? ? ? ? BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat); ? ? ? ? ? ? Hashtable table = new Hashtable(); ? ? ? ? ? ? unsafe ? ? ? ? ? ? { ? ? ? ? ? ? ? ? int* bmpScan = (int*)bmpData.Scan0.ToPointer(); ? ? ? ? ? ? ? ? for (int i = 0; i < bmp.Height * bmp.Width; i++) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? Color c = Color.FromArgb(bmpScan[i]); ? ? ? ? ? ? ? ? ? ? int rc = FindCloser(c, colorTab, table); ? ? ? ? ? ? ? ? ? ? Color newc = Color.FromArgb(rc); ? ? ? ? ? ? ? ? ? ? bmpScan[i] = rc; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? bmp.UnlockBits(bmpData); ? ? ? ? } ? ? ? ? int FindCloser(Color c, Color32[] act, Hashtable table) ? ? ? ? { ? ? ? ? ? ? if (table.Contains(c)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? return ((Color32)table[c]).ARGB; ? ? ? ? ? ? } ? ? ? ? ? ? int index = 0; ? ? ? ? ? ? int min = 0; ? ? ? ? ? ? int minIndex = 0; ? ? ? ? ? ? while (index < act.Length) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? Color ac = act[index].Color; ? ? ? ? ? ? ? ? int tempIndex = index; ? ? ? ? ? ? ? ? int cr = Math.Abs(c.R - ac.R); ? ? ? ? ? ? ? ? int cg = Math.Abs(c.G - ac.G); ? ? ? ? ? ? ? ? int cb = Math.Abs(c.B - ac.B); ? ? ? ? ? ? ? ? int ca = Math.Abs(c.A - ac.A); ? ? ? ? ? ? ? ? int result = cr + cg + cb + ca; ? ? ? ? ? ? ? ? if (result == 0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? minIndex = tempIndex; ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if (tempIndex == 0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? min = result; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? if (result < min) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? min = result; ? ? ? ? ? ? ? ? ? ? ? ? minIndex = tempIndex; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? index++; ? ? ? ? ? ? } ? ? ? ? ? ? if (!table.Contains(c)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? table.Add(c, act[minIndex]); ? ? ? ? ? ? } ? ? ? ? ? ? return act[minIndex].ARGB; ? ? ? ? } ? ? ? ? int FindCloser(Color c, int[] act, Hashtable table) ? ? ? ? { ? ? ? ? ? ? if (table.Contains(c)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? return Convert.ToInt32(table[c]); ? ? ? ? ? ? } ? ? ? ? ? ? int index = 0; ? ? ? ? ? ? int min = 0; ? ? ? ? ? ? int minIndex = 0; ? ? ? ? ? ? while (index < act.Length) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? Color ac = Color.FromArgb(act[index]); ? ? ? ? ? ? ? ? int tempIndex = index; ? ? ? ? ? ? ? ? int cr = Math.Abs(c.R - ac.R); ? ? ? ? ? ? ? ? int cg = Math.Abs(c.G - ac.G); ? ? ? ? ? ? ? ? int cb = Math.Abs(c.B - ac.B); ? ? ? ? ? ? ? ? int ca = Math.Abs(c.A - ac.A); ? ? ? ? ? ? ? ? int result = cr + cg + cb + ca; ? ? ? ? ? ? ? ? if (result == 0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? minIndex = tempIndex; ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if (tempIndex == 0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? min = result; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? if (result < min) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? min = result; ? ? ? ? ? ? ? ? ? ? ? ? minIndex = tempIndex; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? index++; ? ? ? ? ? ? } ? ? ? ? ? ? if (!table.Contains(c)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? table.Add(c, act[minIndex]); ? ? ? ? ? ? } ? ? ? ? ? ? return act[minIndex]; ? ? ? ? } ? ? ? ? #endregion ? ? ? ? #endregion ? ? ? ? #region Gif动画单色化 ? ? ? ? /// <summary> ? ? ? ? /// Gif动画单色化 ? ? ? ? /// </summary> ? ? ? ? /// <param name="gifFilePath">原动画路径</param> ? ? ? ? /// <param name="outputPath">单色后动画路径</param> ? ? ? ? public void Monochrome(string gifFilePath, string outputPath) ? ? ? ? { ? ? ? ? ? ? if (!File.Exists(gifFilePath)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? throw new IOException(string.Format("文件{0}不存在!", gifFilePath)); ? ? ? ? ? ? } ? ? ? ? ? ? using (Bitmap ora_Img = new Bitmap(gifFilePath)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if (ora_Img.RawFormat.Guid != ImageFormat.Gif.Guid) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? throw new IOException(string.Format("文件{0}!", gifFilePath)); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? GifImage gifImage = GifDecoder.Decode(gifFilePath); ? ? ? ? ? ? int transIndex = gifImage.LogicalScreenDescriptor.BgColorIndex; ? ? ? ? ? ? int c1 = (255 << 24) | (158 << 16) | (128 << 8) | 128; ? ? ? ? ? ? int c2 = (255 << 24) | (0 << 16) | (0 << 8) | 0; ? ? ? ? ? ? int c3 = (255 << 24) | (255 << 16) | (255 << 8) | 255; ? ? ? ? ? ? int c4 = (255 << 24) | (0 << 16) | (0 << 8) | 0; ? ? ? ? ? ? int[] palette = new int[] { c1, c2, c3, c4 }; ? ? ? ? ? ? byte[] buffer = new byte[12] { 128, 128, 128, 0, 0, 0, 255, 255, 255, 0, 0, 0 }; ? ? ? ? ? ? gifImage.GlobalColorTable = buffer; ? ? ? ? ? ? gifImage.LogicalScreenDescriptor.BgColorIndex = 0; ? ? ? ? ? ? gifImage.LogicalScreenDescriptor.GlobalColorTableSize = 4; ? ? ? ? ? ? gifImage.LogicalScreenDescriptor.GlobalColorTableFlag = true; ? ? ? ? ? ? int index = 0; ? ? ? ? ? ? foreach (GifFrame f in gifImage.Frames) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? Color32[] act = PaletteHelper.GetColor32s(f.LocalColorTable); ? ? ? ? ? ? ? ? f.LocalColorTable = buffer; ? ? ? ? ? ? ? ? Color bgC = act[(transIndex / 3)].Color; ? ? ? ? ? ? ? ? byte bgGray = (byte)(bgC.R * 0.3 + bgC.G * 0.59 + bgC.B * 0.11); ? ? ? ? ? ? ? ? BitmapData bmpData = f.Image.LockBits(new Rectangle(0, 0, f.Image.Width, f.Image.Height), ImageLockMode.ReadWrite, f.Image.PixelFormat); ? ? ? ? ? ? ? ? unsafe ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? int* p = (int*)bmpData.Scan0.ToPointer(); ? ? ? ? ? ? ? ? ? ? for (int i = 0; i < f.Image.Width * f.Image.Height; i++) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? if (p[i] == 0) ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? p[i] = c1; ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? Color c = Color.FromArgb(p[i]); ? ? ? ? ? ? ? ? ? ? ? ? ? ? int gray = (byte)(c.R * 0.3 + c.G * 0.59 + c.B * 0.11); ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (gray > bgGray) ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (bgGray > 128) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? p[i] = c2; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? p[i] = c3; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? else if (gray < bgGray) ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (bgGray > 128) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? p[i] = c3; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? p[i] = c2; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? p[i] = c1; ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? f.Image.UnlockBits(bmpData); ? ? ? ? ? ? ? ? f.GraphicExtension.TranIndex = 0; ? ? ? ? ? ? ? ? f.ColorDepth = 2; ? ? ? ? ? ? ? ? f.ImageDescriptor.LctFlag = false; ? ? ? ? ? ? ? ? index++; ? ? ? ? ? ? } ? ? ? ? ? ? GifEncoder.Encode(gifImage, outputPath); ? ? ? ? } ? ? ? ? #endregion ? ? ? ? #region 合并多个gif动画,在时间坐标上 ? ? ? ? Size FindMaxSize(List<string> sources) ? ? ? ? { ? ? ? ? ? ? List<int> widths = new List<int>(); ? ? ? ? ? ? List<int> heights = new List<int>(); ? ? ? ? ? ? foreach (string s in sources) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? Bitmap bmp = new Bitmap(s); ? ? ? ? ? ? ? ? widths.Add(bmp.Width); ? ? ? ? ? ? ? ? heights.Add(bmp.Height); ? ? ? ? ? ? ? ? bmp.Dispose(); ? ? ? ? ? ? } ? ? ? ? ? ? widths.Sort(); ? ? ? ? ? ? heights.Sort(); ? ? ? ? ? ? return new Size(widths[widths.Count - 1], heights[heights.Count - 1]); ? ? ? ? } ? ? ? ? /// <summary> ? ? ? ? /// 合并多个gif文件 ? ? ? ? /// </summary> ? ? ? ? /// <param name="sourceGifs">原图像路径集合</param> ? ? ? ? /// <param name="outGif">合并后图像路径</param> ? ? ? ? /// <param name="delay">间隔时间</param> ? ? ? ? /// <param name="repeat">是否重复播放</param>? ? ? ? ? public void Merge(List<string> sourceGifs, string outGif, short delay, bool repeat) ? ? ? ? { ? ? ? ? ? ? GifImage gifImage = null; ? ? ? ? ? ? int index = 0; ? ? ? ? ? ? short lastDelay = delay; ? ? ? ? ? ? foreach (string source in sourceGifs) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if (!File.Exists(source)) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? throw new IOException(string.Format("文件{0}不存在!", source)); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? using (Bitmap ora_Img = new Bitmap(source)) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? if (ora_Img.RawFormat.Guid != ImageFormat.Gif.Guid) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? throw new IOException(string.Format("文件{0}!", source)); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? GifImage gif = GifDecoder.Decode(source); ? ? ? ? ? ? ? ? if (index == 0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? gifImage = gif; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? int frameCount = 0; ? ? ? ? ? ? ? ? foreach (GifFrame f in gif.Frames) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? if (frameCount == 0 && f.GraphicExtension.DisposalMethod == 0) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? f.GraphicExtension.DisposalMethod = 2; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (!f.ImageDescriptor.LctFlag) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? f.ImageDescriptor.LctSize = f.LocalColorTable.Length / 3; ? ? ? ? ? ? ? ? ? ? ? ? f.ImageDescriptor.LctFlag = true; ? ? ? ? ? ? ? ? ? ? ? ? f.GraphicExtension.TranIndex = gif.LogicalScreenDescriptor.BgColorIndex; ? ? ? ? ? ? ? ? ? ? ? ? f.LocalColorTable = gif.GlobalColorTable; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (frameCount == 0) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? f.Delay = f.GraphicExtension.Delay = lastDelay; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (f.Delay == 0) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? f.Delay = f.GraphicExtension.Delay = lastDelay; ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? f.ColorDepth = (byte)(Math.Log(f.ImageDescriptor.LctSize, 2)); ? ? ? ? ? ? ? ? ? ? lastDelay = f.GraphicExtension.Delay; ? ? ? ? ? ? ? ? ? ? frameCount++; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? gifImage.Frames.AddRange(gif.Frames); ? ? ? ? ? ? ? ? index++; ? ? ? ? ? ? } ? ? ? ? ? ? if (repeat && gifImage.ApplictionExtensions.Count == 0) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ApplicationEx ae = new ApplicationEx(); ? ? ? ? ? ? ? ? gifImage.ApplictionExtensions.Add(ae); ? ? ? ? ? ? } ? ? ? ? ? ? gifImage.LogicalScreenDescriptor.PixcelAspect = 0; ? ? ? ? ? ? Size maxSize = FindMaxSize(sourceGifs); ? ? ? ? ? ? gifImage.LogicalScreenDescriptor.Width = (short)maxSize.Width; ? ? ? ? ? ? gifImage.LogicalScreenDescriptor.Height = (short)maxSize.Height; ? ? ? ? ? ? GifEncoder.Encode(gifImage, outGif); ? ? ? ? } ? ? ? ? #endregion ? ? ? ? #region 合并多个gif动画,在空间坐标上 ? ? ? ? /// <summary> ? ? ? ? /// 合并多个gif动画,在空间坐标上 ? ? ? ? /// </summary> ? ? ? ? /// <param name="sourceGifs">原图像</param> ? ? ? ? /// <param name="outPath">合并后图像</param> ? ? ? ? public void Merge(List<string> sourceGifs, string outPath) ? ? ? ? { ? ? ? ? ? ? List<List<GifFrame>> frames = new List<List<GifFrame>>(); ? ? ? ? ? ? foreach (string source in sourceGifs) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if (!File.Exists(source)) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? throw new IOException(string.Format("文件{0}不存在!", source)); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? using (Bitmap ora_Img = new Bitmap(source)) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? if (ora_Img.RawFormat.Guid != ImageFormat.Gif.Guid) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? throw new IOException(string.Format("文件{0}!", source)); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? GifImage gifImage = GifDecoder.Decode(source); ? ? ? ? ? ? ? ? ThinkDisposalMethod(gifImage); ? ? ? ? ? ? ? ? int index = 0; ? ? ? ? ? ? ? ? foreach (GifFrame f in gifImage.Frames) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? if (frames.Count <= index) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? List<GifFrame> list = new List<GifFrame>(); ? ? ? ? ? ? ? ? ? ? ? ? frames.Add(list); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? List<GifFrame> frameList = frames[index]; ? ? ? ? ? ? ? ? ? ? frameList.Add(f); ? ? ? ? ? ? ? ? ? ? index++; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? List<GifFrame> frameCol = new List<GifFrame>(); ? ? ? ? ? ? int frameIndex = 0; ? ? ? ? ? ? foreach (List<GifFrame> fs in frames) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? GifFrame frame = Merge(fs); ? ? ? ? ? ? ? ? frameCol.Add(frame); ? ? ? ? ? ? ? ? if (frame.Image.Width != frameCol[0].Image.Width ? ? ? ? ? ? ? ? ? ? || frame.Image.Height != frameCol[0].Image.Height) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? frame.ImageDescriptor.XOffSet = frames[frameIndex][0].ImageDescriptor.XOffSet; ? ? ? ? ? ? ? ? ? ? frame.ImageDescriptor.YOffSet = frames[frameIndex][0].ImageDescriptor.YOffSet; ? ? ? ? ? ? ? ? ? ? frame.GraphicExtension.DisposalMethod = frames[frameIndex][0].GraphicExtension.DisposalMethod; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? frame.GraphicExtension.Delay = frame.Delay = frames[frameIndex][0].Delay; ? ? ? ? ? ? ? ? frameIndex++; ? ? ? ? ? ? } ? ? ? ? ? ? GifImage gifImg = new GifImage(); ? ? ? ? ? ? gifImg.Header = "GIF89a"; ? ? ? ? ? ? LogicalScreenDescriptor lcd = new LogicalScreenDescriptor(); ? ? ? ? ? ? lcd.Width = (short)frameCol[0].Image.Width; ? ? ? ? ? ? lcd.Height = (short)frameCol[0].Image.Height; ? ? ? ? ? ? gifImg.LogicalScreenDescriptor = lcd; ? ? ? ? ? ? ApplicationEx ape = new ApplicationEx(); ? ? ? ? ? ? List<ApplicationEx> apps = new List<ApplicationEx>(); ? ? ? ? ? ? apps.Add(ape); ? ? ? ? ? ? gifImg.ApplictionExtensions = apps; ? ? ? ? ? ? gifImg.Frames = frameCol; ? ? ? ? ? ? GifEncoder.Encode(gifImg, outPath); ? ? ? ? } ? ? ? ? #endregion ? ? ? ? #region 将Gif图片进行旋转或者翻转 ? ? ? ? /// <summary> ? ? ? ? /// 将Gif图片进行旋转或者翻转 ? ? ? ? /// </summary> ? ? ? ? /// <param name="gifFilePath">原图像路径</param> ? ? ? ? /// <param name="rotateType">翻转或者旋转方式</param> ? ? ? ? /// <param name="outputPath">输出路径</param> ? ? ? ? public void Rotate(string gifFilePath, RotateFlipType rotateType, string outputPath) ? ? ? ? { ? ? ? ? ? ? if (!File.Exists(gifFilePath)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? throw new IOException(string.Format("文件{0}不存在!", gifFilePath)); ? ? ? ? ? ? } ? ? ? ? ? ? using (Bitmap ora_Img = new Bitmap(gifFilePath)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if (ora_Img.RawFormat.Guid != ImageFormat.Gif.Guid) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? throw new IOException(string.Format("文件{0}!", gifFilePath)); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? GifImage gifImage = GifDecoder.Decode(gifFilePath); ? ? ? ? ? ? ThinkDisposalMethod(gifImage); ? ? ? ? ? ? int index = 0; ? ? ? ? ? ? foreach (GifFrame f in gifImage.Frames) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? f.Image.RotateFlip(rotateType); ? ? ? ? ? ? ? ? f.ImageDescriptor.Width = (short)f.Image.Width; ? ? ? ? ? ? ? ? f.ImageDescriptor.Height = (short)f.Image.Height; ? ? ? ? ? ? ? ? if (index++ == 0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? gifImage.LogicalScreenDescriptor.Width = (short)f.Image.Width; ? ? ? ? ? ? ? ? ? ? gifImage.LogicalScreenDescriptor.Height = (short)f.Image.Height; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? GifEncoder.Encode(gifImage, outputPath); ? ? ? ? } ? ? ? ? #endregion ? ? ? ? #region 对Gif图片进行剪裁 ? ? ? ? /// <summary> ? ? ? ? /// 对Gif图片进行剪裁 ? ? ? ? /// </summary> ? ? ? ? /// <param name="gifFilePath">原图像</param> ? ? ? ? /// <param name="rect">剪裁区域</param> ? ? ? ? /// <param name="outFilePath">输出路径</param> ? ? ? ? public void Crop(string gifFilePath, Rectangle rect, string outFilePath) ? ? ? ? { ? ? ? ? ? ? if (!File.Exists(gifFilePath)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? throw new IOException(string.Format("文件{0}不存在!", gifFilePath)); ? ? ? ? ? ? } ? ? ? ? ? ? using (Bitmap ora_Img = new Bitmap(gifFilePath)) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if (ora_Img.RawFormat.Guid != ImageFormat.Gif.Guid) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? throw new IOException(string.Format("文件{0}!", gifFilePath)); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? GifImage gifImage = GifDecoder.Decode(gifFilePath); ? ? ? ? ? ? ThinkDisposalMethod(gifImage); ? ? ? ? ? ? int index = 0; ? ? ? ? ? ? foreach (GifFrame f in gifImage.Frames) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? f.Image = f.Image.Clone(rect, f.Image.PixelFormat); ? ? ? ? ? ? ? ? f.ImageDescriptor.Width = (short)rect.Width; ? ? ? ? ? ? ? ? f.ImageDescriptor.Height = (short)rect.Height; ? ? ? ? ? ? ? ? if (index++ == 0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? gifImage.LogicalScreenDescriptor.Width = (short)rect.Width; ? ? ? ? ? ? ? ? ? ? gifImage.LogicalScreenDescriptor.Height = (short)rect.Height; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? GifEncoder.Encode(gifImage, outFilePath); ? ? ? ? } ? ? ? ? #endregion ? ? ? ? #region 私有方法 ? ? ? ? void ThinkDisposalMethod(GifImage gifImage) ? ? ? ? { ? ? ? ? ? ? int lastDisposal = 0; ? ? ? ? ? ? Bitmap lastImage = null; ? ? ? ? ? ? int index = 0; ? ? ? ? ? ? short width = gifImage.Width; ? ? ? ? ? ? short height = gifImage.Height; ? ? ? ? ? ? foreach (GifFrame f in gifImage.Frames) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? int xOffSet = f.ImageDescriptor.XOffSet; ? ? ? ? ? ? ? ? int yOffSet = f.ImageDescriptor.YOffSet; ? ? ? ? ? ? ? ? int iw = f.ImageDescriptor.Width; ? ? ? ? ? ? ? ? int ih = f.ImageDescriptor.Height; ? ? ? ? ? ? ? ? if ((f.Image.Width != width || f.Image.Height != height)) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? f.ImageDescriptor.XOffSet = 0; ? ? ? ? ? ? ? ? ? ? f.ImageDescriptor.YOffSet = 0; ? ? ? ? ? ? ? ? ? ? f.ImageDescriptor.Width = (short)width; ? ? ? ? ? ? ? ? ? ? f.ImageDescriptor.Height = (short)height; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? int transIndex = -1; ? ? ? ? ? ? ? ? if (f.GraphicExtension.TransparencyFlag) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? transIndex = f.GraphicExtension.TranIndex; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if (iw == width && ih == height && index == 0) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? int bgColor = Convert.ToInt32(gifImage.GlobalColorIndexedTable[f.GraphicExtension.TranIndex]); ? ? ? ? ? ? ? ? ? ? Color c = Color.FromArgb(bgColor); ? ? ? ? ? ? ? ? ? ? Bitmap newImg = null; ? ? ? ? ? ? ? ? ? ? Graphics g; ? ? ? ? ? ? ? ? ? ? newImg = new Bitmap(width, height); ? ? ? ? ? ? ? ? ? ? g = Graphics.FromImage(newImg); ? ? ? ? ? ? ? ? ? ? if (lastImage != null) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? g.DrawImageUnscaled(lastImage, new Point(0, 0)); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (f.GraphicExtension.DisposalMethod == 1) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? g.DrawRectangle(new Pen(new SolidBrush(c)), new Rectangle(xOffSet, yOffSet, iw, ih)); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? if (f.GraphicExtension.DisposalMethod == 2 && lastDisposal != 1) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? g.Clear(c); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? g.DrawImageUnscaled(f.Image, new Point(xOffSet, yOffSet)); ? ? ? ? ? ? ? ? ? ? g.Dispose(); ? ? ? ? ? ? ? ? ? ? f.Image.Dispose(); ? ? ? ? ? ? ? ? ? ? f.Image = newImg; ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? lastImage = f.Image; ? ? ? ? ? ? ? ? Quantizer(f.Image, f.Palette); ? ? ? ? ? ? ? ? lastDisposal = f.GraphicExtension.DisposalMethod; ? ? ? ? ? ? ? ? index++; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? GifFrame Merge(List<GifFrame> frames) ? ? ? ? { ? ? ? ? ? ? Bitmap bmp = null; ? ? ? ? ? ? Graphics g = null; ? ? ? ? ? ? foreach (GifFrame f in frames) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? if (bmp == null) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? bmp = f.Image; ? ? ? ? ? ? ? ? ? ? g = Graphics.FromImage(bmp); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? g.DrawImageUnscaled(f.Image, new Point(f.ImageDescriptor.XOffSet, f.ImageDescriptor.YOffSet)); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? ? ? if (g != null) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? g.Dispose(); ? ? ? ? ? ? } ? ? ? ? ? ? GifFrame frame = new GifFrame(); ? ? ? ? ? ? Color32[] pellatte = new OcTreeQuantizer(8).Quantizer(bmp); ? ? ? ? ? ? Quantizer(bmp, pellatte); ? ? ? ? ? ? frame.Image = bmp; ? ? ? ? ? ? frame.LocalColorTable = GetColorTable(pellatte); ? ? ? ? ? ? frame.ImageDescriptor = new ImageDescriptor(); ? ? ? ? ? ? frame.ImageDescriptor.LctFlag = true; ? ? ? ? ? ? frame.ImageDescriptor.LctSize = pellatte.Length; ? ? ? ? ? ? frame.ImageDescriptor.Width = (short)bmp.Width; ? ? ? ? ? ? frame.ImageDescriptor.Height = (short)bmp.Height; ? ? ? ? ? ? frame.ColorDepth = 8; ? ? ? ? ? ? frame.GraphicExtension = new GraphicEx(); ? ? ? ? ? ? frame.GraphicExtension.DisposalMethod = 0; ? ? ? ? ? ? frame.GraphicExtension.TransparencyFlag = true; ? ? ? ? ? ? frame.GraphicExtension.TranIndex = 255; ? ? ? ? ? ? return frame; ? ? ? ? } ? ? ? ? byte[] GetColorTable(Color32[] pellatte) ? ? ? ? { ? ? ? ? ? ? byte[] buffer = new byte[pellatte.Length * 3]; ? ? ? ? ? ? int index = 0; ? ? ? ? ? ? for (int i = 0; i < pellatte.Length; i++) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? buffer[index++] = pellatte[i].Red; ? ? ? ? ? ? ? ? buffer[index++] = pellatte[i].Green; ? ? ? ? ? ? ? ? buffer[index++] = pellatte[i].Blue; ? ? ? ? ? ? } ? ? ? ? ? ? return buffer; ? ? ? ? } ? ? ? ? #endregion ? ? ? ? #region 获取水印内容的位置 ? ? ? ? /// <summary> ? ? ? ? /// 获取水印内容的位置 ? ? ? ? /// </summary> ? ? ? ? /// <param name="ST">绘图位置</param> ? ? ? ? /// <param name="Width">图片宽度</param> ? ? ? ? /// <param name="Hight">图片高度</param> ? ? ? ? /// <param name="ImageWidth">水印宽度</param> ? ? ? ? /// <param name="ImageHight">水印高度</param> ? ? ? ? /// <param name="x">坐标X</param> ? ? ? ? /// <param name="y">坐标Y</param> ? ? ? ? private void getImageST(int ST, int Width, int Hight, int ImageWidth, int ImageHight, out int x, out int y) ? ? ? ? { ? ? ? ? ? ? switch (ST) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? case 1://左上 ? ? ? ? ? ? ? ? ? ? x = (int)(Width * (float).01); ? ? ? ? ? ? ? ? ? ? y = (int)(Hight * (float).01); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 2://上中 ? ? ? ? ? ? ? ? ? ? x = (int)((Width * (float).50) - (ImageWidth / 2)); ? ? ? ? ? ? ? ? ? ? y = (int)(Hight * (float).01); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 3://右上 ? ? ? ? ? ? ? ? ? ? x = (int)((Width * (float).99) - ImageWidth); ? ? ? ? ? ? ? ? ? ? y = (int)(Hight * (float).01); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 4://中左 ? ? ? ? ? ? ? ? ? ? x = (int)(Width * (float).01); ? ? ? ? ? ? ? ? ? ? y = (int)(Hight * (float).50) - (ImageHight / 2); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 5://中心 ? ? ? ? ? ? ? ? ? ? x = (int)((Width * (float).50) - (ImageWidth / 2)); ? ? ? ? ? ? ? ? ? ? y = (int)((Hight * (float).50) - (ImageHight / 2)); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 6://中右 ? ? ? ? ? ? ? ? ? ? x = (int)((Width * (float).99) - ImageWidth); ? ? ? ? ? ? ? ? ? ? y = (int)((Hight * (float).50) - (ImageHight / 2)); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 7://左下 ? ? ? ? ? ? ? ? ? ? x = (int)(Width * (float).01); ? ? ? ? ? ? ? ? ? ? y = (int)((Hight * .99) - ImageHight); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? case 8://下中 ? ? ? ? ? ? ? ? ? ? x = (int)((Width * (float).50) - (ImageWidth / 2)); ? ? ? ? ? ? ? ? ? ? y = (int)((Hight * (float).99) - ImageHight); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? ? ? default://右下 ? ? ? ? ? ? ? ? ? ? x = (int)((Width * (float).99) - ImageWidth); ? ? ? ? ? ? ? ? ? ? y = (int)((Hight * (float).99) - ImageHight); ? ? ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? #endregion ? ? } }
试试其它关键字
同语言下
.
C#实现的html内容截取
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
.
实现对图片上传的接收
.
去除字符串中的空格,回车,换行符转变成‘;’在按‘
.
按照回车换行符分割字符串
.
文件MD5码 比较,检测文件是否一样
可能有用的
.
C#实现的html内容截取
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
.
实现对图片上传的接收
.
去除字符串中的空格,回车,换行符转变成‘;’在按‘
.
按照回车换行符分割字符串
.
文件MD5码 比较,检测文件是否一样
贡献的其它代码
Label
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3