浏览代码

图像处理改进

懒得勤快 6 年之前
父节点
当前提交
98ab11fdd5

+ 4 - 63
Masuit.Tools.Core/Masuit.Tools.Core.csproj

@@ -2,71 +2,12 @@
 
   <PropertyGroup>
     <TargetFramework>netcoreapp2.1</TargetFramework>
-    <Version>2.2.3.4</Version>
+    <Version>2.2.3.5</Version>
     <Authors>懒得勤快</Authors>
     <Company>masuit.com</Company>
     <Description>包含一些常用的操作类,大都是静态类,加密解密,反射操作,硬件信息,字符串扩展方法,日期时间扩展操作,大文件拷贝,图像裁剪,html处理,验证码、NoSql等常用封装。
-
-示例代码:
-
-1.检验字符串是否是Email
-
-bool isEmail="[email protected]".MatchEmail();
-
-2.获取线程内唯一对象
-
-CallContext&lt;T&gt;.GetData("db");
-
-3.获取当前请求上下文
-
-var context=HttpContext2.Current;
-
-4.获取IP详细地理信息
-
-var address="114.114.114.114".GetPhysicsAddress();
-
-5.大文件操作
-
-FileStream fs = new FileStream(@"D:\boot.vmdk", FileMode.OpenOrCreate, FileAccess.ReadWrite);
-
-{
-
-//fs.CopyToFile(@"D:\1.bak");//同步复制大文件
-
-fs.CopyToFileAsync(@"D:\1.bak");//异步复制大文件
-
-string md5 = fs.GetFileMD5Async().Result;//异步获取文件的MD5
-
-}
-
-6.html的防XSS处理:
-
-string html = @"&lt;link href="/Content/font-awesome/css" rel="stylesheet" /&gt;
-
-&lt;!--[if IE 7]&gt;
-
-&lt;link href='/Content/font-awesome-ie7.min.css' rel='stylesheet'/&gt;
-
-&lt;![endif]--&gt;
-
-&lt;script src="/Scripts/modernizr"&gt;&lt;/script&gt;
-
-&lt;div id="searchBox" role="search"&gt;
-
-&lt;form action="/packages" method="get"&gt;
-
-&lt;span class="user-actions"&gt;&lt;a href="/users/account/LogOff"&gt;退出&lt;/a&gt;&lt;/span&gt;
-
-&lt;input name="q" id="searchBoxInput" /&gt;
-
-&lt;input id="searchBoxSubmit" type="submit" value="Submit" /&gt;
-
-&lt;/form&gt;
-
-&lt;/div&gt;";
-
-string s = html.HtmlSantinizerStandard();//清理后:&lt;div&gt;&lt;span&gt;&lt;a href="/users/account/LogOff"&gt;退出&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
-</Description>
+官网教程:https://masuit.com/55
+github:https://github.com/ldqk/Masuit.Tools</Description>
     <Copyright>Copyright © 懒得勤快</Copyright>
     <PackageProjectUrl>https://github.com/ldqk/Masuit.Tools</PackageProjectUrl>
     <PackageTags>Masuit.Tools</PackageTags>
@@ -92,7 +33,7 @@ string s = html.HtmlSantinizerStandard();//清理后:&lt;div&gt;&lt;span&gt;&l
 
   <ItemGroup>
     <PackageReference Include="AngleSharp" Version="0.9.11" />
-    <PackageReference Include="HtmlSanitizer" Version="4.0.199" />
+    <PackageReference Include="HtmlSanitizer" Version="4.0.201" />
     <PackageReference Include="Microsoft.AspNetCore.All" Version="2.1.5" />
     <PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
     <PackageReference Include="SharpCompress" Version="0.22.0" />

+ 52 - 0
Masuit.Tools.Core/Media/ImageUtilities.cs

@@ -4,6 +4,8 @@ using System.Drawing.Drawing2D;
 using System.Drawing.Imaging;
 using System.IO;
 using System.Linq;
+using System.Net.Http;
+using System.Net.Http.Headers;
 using System.Threading.Tasks;
 
 namespace Masuit.Tools.Media
@@ -1180,5 +1182,55 @@ namespace Masuit.Tools.Media
             }
             return bmp2;
         }
+
+        /// <summary>
+        /// 上传图片到百度图床
+        /// </summary>
+        /// <param name="stream"></param>
+        /// <returns></returns>
+        public static async Task<string> UploadImageAsync(Stream stream)
+        {
+            using (HttpClient httpClient = new HttpClient()
+            {
+                BaseAddress = new Uri("https://sm.ms"),
+            })
+            {
+                httpClient.DefaultRequestHeaders.UserAgent.Add(ProductInfoHeaderValue.Parse("Mozilla/5.0"));
+                using (var bc = new StreamContent(stream))
+                {
+                    bc.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
+                    {
+                        FileName = "1.jpg",
+                        Name = "smfile"
+                    };
+                    bc.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg");
+                    using (var content = new MultipartFormDataContent { bc })
+                    {
+                        return await await httpClient.PostAsync("/api/upload", content).ContinueWith(async t =>
+                        {
+                            if (t.IsCanceled || t.IsFaulted)
+                            {
+                                Console.WriteLine("发送请求出错了" + t.Exception);
+                                return string.Empty;
+                            }
+                            var res = await t;
+                            if (res.IsSuccessStatusCode)
+                            {
+                                string s = await res.Content.ReadAsStringAsync();
+                                //var token = JObject.Parse(s);
+                                //if ((int)token["errno"] == 0)
+                                //{
+                                //    s = (string)token["data"]["imageUrl"];
+                                //    return s;
+                                //}
+                                //s = (string)token["errmsg"];
+                                return s;
+                            }
+                            return string.Empty;
+                        });
+                    }
+                }
+            }
+        }
     } //end class
 }

+ 1 - 1
Masuit.Tools.NoSQL.MongoDBClient/Masuit.Tools.NoSQL.MongoDBClient.csproj

@@ -40,7 +40,7 @@
       <HintPath>..\packages\DnsClient.1.2.0\lib\net45\DnsClient.dll</HintPath>
     </Reference>
     <Reference Include="HtmlSanitizer, Version=3.0.0.0, Culture=neutral, PublicKeyToken=61c49a1a9e79cc28, processorArchitecture=MSIL">
-      <HintPath>..\packages\HtmlSanitizer.4.0.199\lib\net45\HtmlSanitizer.dll</HintPath>
+      <HintPath>..\packages\HtmlSanitizer.4.0.201\lib\net45\HtmlSanitizer.dll</HintPath>
     </Reference>
     <Reference Include="ICSharpCode.SharpZipLib, Version=1.1.0.145, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
       <HintPath>..\packages\SharpZipLib.1.1.0\lib\net45\ICSharpCode.SharpZipLib.dll</HintPath>

+ 1 - 1
Masuit.Tools.NoSQL.MongoDBClient/packages.config

@@ -2,7 +2,7 @@
 <packages>
   <package id="AngleSharp" version="0.9.11" targetFramework="net45" />
   <package id="DnsClient" version="1.2.0" targetFramework="net45" />
-  <package id="HtmlSanitizer" version="4.0.199" targetFramework="net45" />
+  <package id="HtmlSanitizer" version="4.0.201" targetFramework="net45" />
   <package id="MongoDB.Bson" version="2.7.2" targetFramework="net45" />
   <package id="MongoDB.Driver" version="2.7.2" targetFramework="net45" />
   <package id="MongoDB.Driver.Core" version="2.7.2" targetFramework="net45" />

+ 2 - 1
Masuit.Tools/Masuit.Tools.csproj

@@ -44,7 +44,7 @@
       <HintPath>..\packages\AngleSharp.0.9.11\lib\net45\AngleSharp.dll</HintPath>
     </Reference>
     <Reference Include="HtmlSanitizer, Version=3.0.0.0, Culture=neutral, PublicKeyToken=61c49a1a9e79cc28, processorArchitecture=MSIL">
-      <HintPath>..\packages\HtmlSanitizer.4.0.199\lib\net45\HtmlSanitizer.dll</HintPath>
+      <HintPath>..\packages\HtmlSanitizer.4.0.201\lib\net45\HtmlSanitizer.dll</HintPath>
     </Reference>
     <Reference Include="Microsoft.CSharp" />
     <Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
@@ -128,6 +128,7 @@
     <Compile Include="Mapping\MapClass.cs" />
     <Compile Include="Mapping\MapperTools.cs" />
     <Compile Include="Mapping\UnsupportedTypeException.cs" />
+    <Compile Include="Media\ThumbnailCutMode.cs" />
     <Compile Include="Models\BaiduIP.cs" />
     <Compile Include="Models\IspInfo.cs" />
     <Compile Include="Models\PhysicsAddress.cs" />

+ 5 - 57
Masuit.Tools/Media/ImageUtilities.cs

@@ -4,8 +4,6 @@ using System.Drawing.Drawing2D;
 using System.Drawing.Imaging;
 using System.IO;
 using System.Linq;
-using System.Net.Http;
-using System.Net.Http.Headers;
 using System.Threading.Tasks;
 
 namespace Masuit.Tools.Media
@@ -753,7 +751,7 @@ namespace Masuit.Tools.Media
         /// <param name="width">缩略图宽度</param>
         /// <param name="height">缩略图高度</param>
         /// <param name="mode">生成缩略图的方式</param>    
-        public static void MakeThumbnail(this Image originalImage, string thumbnailPath, int width, int height, string mode)
+        public static void MakeThumbnail(this Image originalImage, string thumbnailPath, int width, int height, ThumbnailCutMode mode)
         {
             int towidth = width;
             int toheight = height;
@@ -765,15 +763,15 @@ namespace Masuit.Tools.Media
 
             switch (mode)
             {
-                case "HW": //指定高宽缩放(可能变形)                
+                case ThumbnailCutMode.Fixed: //指定高宽缩放(可能变形)                
                     break;
-                case "W": //指定宽,高按比例                    
+                case ThumbnailCutMode.LockWidth: //指定宽,高按比例                    
                     toheight = originalImage.Height * width / originalImage.Width;
                     break;
-                case "H": //指定高,宽按比例
+                case ThumbnailCutMode.LockHeight: //指定高,宽按比例
                     towidth = originalImage.Width * height / originalImage.Height;
                     break;
-                case "Cut": //指定高宽裁减(不变形)                
+                case ThumbnailCutMode.Cut: //指定高宽裁减(不变形)                
                     if (originalImage.Width / (double)originalImage.Height > towidth / (double)toheight)
                     {
                         oh = originalImage.Height;
@@ -1182,55 +1180,5 @@ namespace Masuit.Tools.Media
             }
             return bmp2;
         }
-
-        /// <summary>
-        /// 上传图片到百度图床
-        /// </summary>
-        /// <param name="stream"></param>
-        /// <returns></returns>
-        public static async Task<string> UploadImageAsync(Stream stream)
-        {
-            using (HttpClient httpClient = new HttpClient()
-            {
-                BaseAddress = new Uri("https://sm.ms"),
-            })
-            {
-                httpClient.DefaultRequestHeaders.UserAgent.Add(ProductInfoHeaderValue.Parse("Mozilla/5.0"));
-                using (var bc = new StreamContent(stream))
-                {
-                    bc.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
-                    {
-                        FileName = "1.jpg",
-                        Name = "smfile"
-                    };
-                    bc.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg");
-                    using (var content = new MultipartFormDataContent { bc })
-                    {
-                        return await await httpClient.PostAsync("/api/upload", content).ContinueWith(async t =>
-                        {
-                            if (t.IsCanceled || t.IsFaulted)
-                            {
-                                Console.WriteLine("发送请求出错了" + t.Exception);
-                                return string.Empty;
-                            }
-                            var res = await t;
-                            if (res.IsSuccessStatusCode)
-                            {
-                                string s = await res.Content.ReadAsStringAsync();
-                                //var token = JObject.Parse(s);
-                                //if ((int)token["errno"] == 0)
-                                //{
-                                //    s = (string)token["data"]["imageUrl"];
-                                //    return s;
-                                //}
-                                //s = (string)token["errmsg"];
-                                return s;
-                            }
-                            return string.Empty;
-                        });
-                    }
-                }
-            }
-        }
     } //end class
 }

+ 28 - 0
Masuit.Tools/Media/ThumbnailCutMode.cs

@@ -0,0 +1,28 @@
+namespace Masuit.Tools.Media
+{
+    /// <summary>
+    /// 图像裁剪模式
+    /// </summary>
+    public enum ThumbnailCutMode
+    {
+        /// <summary>
+        /// 锁定高度
+        /// </summary>
+        LockHeight,
+
+        /// <summary>
+        /// 锁定宽度
+        /// </summary>
+        LockWidth,
+
+        /// <summary>
+        /// 固定宽高
+        /// </summary>
+        Fixed,
+
+        /// <summary>
+        /// 裁剪
+        /// </summary>
+        Cut
+    }
+}

+ 2 - 2
Masuit.Tools/Properties/AssemblyInfo.cs

@@ -36,7 +36,7 @@ using System.Runtime.InteropServices;
 // 方法是按如下所示使用“*”: :
 // [assembly: AssemblyVersion("1.0.*")]
 
-[assembly: AssemblyVersion("2.2.3.3")]
-[assembly: AssemblyFileVersion("2.2.3.3")]
+[assembly: AssemblyVersion("2.2.3.5")]
+[assembly: AssemblyFileVersion("2.2.3.5")]
 [assembly: NeutralResourcesLanguage("zh-CN")]
 

+ 1 - 1
Masuit.Tools/packages.config

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
   <package id="AngleSharp" version="0.9.11" targetFramework="net45" />
-  <package id="HtmlSanitizer" version="4.0.199" targetFramework="net45" />
+  <package id="HtmlSanitizer" version="4.0.201" targetFramework="net45" />
   <package id="Microsoft.AspNet.Mvc" version="5.2.7" targetFramework="net45" />
   <package id="Microsoft.AspNet.Razor" version="3.2.7" targetFramework="net45" />
   <package id="Microsoft.AspNet.WebPages" version="3.2.7" targetFramework="net45" />