From da68f9255dd677b6e816f661f71ce03957001436 Mon Sep 17 00:00:00 2001 From: "454313500@qq.com" <454313500@qq.com> Date: Mon, 22 Mar 2021 10:28:36 +0800 Subject: [PATCH] v1.0.4 --- CC.Yi.Common/CC.Yi.Common.csproj | 1 + CC.Yi.Common/HttpHelper.cs | 76 ++++++++++++++ CC.Yi.Common/imageHelper.cs | 167 +++++++++++++++++++++++++++++++ 3 files changed, 244 insertions(+) create mode 100644 CC.Yi.Common/HttpHelper.cs create mode 100644 CC.Yi.Common/imageHelper.cs diff --git a/CC.Yi.Common/CC.Yi.Common.csproj b/CC.Yi.Common/CC.Yi.Common.csproj index 4230a367..3e6d258d 100644 --- a/CC.Yi.Common/CC.Yi.Common.csproj +++ b/CC.Yi.Common/CC.Yi.Common.csproj @@ -9,6 +9,7 @@ + diff --git a/CC.Yi.Common/HttpHelper.cs b/CC.Yi.Common/HttpHelper.cs new file mode 100644 index 00000000..6bfdfb18 --- /dev/null +++ b/CC.Yi.Common/HttpHelper.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace CC.Yi.Common +{ + public static class HttpHelper + { + public static string HttpGet(string Url, string postDataStr="") + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr); + request.Method = "GET"; + request.ContentType = "text/html;charset=UTF-8"; + + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + Stream myResponseStream = response.GetResponseStream(); + StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); + string retString = myStreamReader.ReadToEnd(); + myStreamReader.Close(); + myResponseStream.Close(); + + return retString; + } + + public static bool HttpIOGet(string Url, string file, string postDataStr="") + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr); + request.Method = "GET"; + request.ContentType = "text/html;charset=UTF-8"; + + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + Stream myResponseStream = response.GetResponseStream(); + FileStream writer = new FileStream(file, FileMode.OpenOrCreate, FileAccess.Write); + byte[] buffer = new byte[1024]; + int c; + while ((c = myResponseStream.Read(buffer, 0, buffer.Length)) > 0) + { + writer.Write(buffer, 0, c); + } + writer.Close(); + myResponseStream.Close(); + + return true; + } + + public static string HttpPost(string Url, string postDataStr="") + { + CookieContainer cookie = new CookieContainer(); + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); + request.Method = "POST"; + request.ContentType = "application/x-www-form-urlencoded"; + request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr); + request.CookieContainer = cookie; + Stream myRequestStream = request.GetRequestStream(); + StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312")); + myStreamWriter.Write(postDataStr); + myStreamWriter.Close(); + + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + + response.Cookies = cookie.GetCookies(response.ResponseUri); + Stream myResponseStream = response.GetResponseStream(); + StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); + string retString = myStreamReader.ReadToEnd(); + myStreamReader.Close(); + myResponseStream.Close(); + + return retString; + } + } +} diff --git a/CC.Yi.Common/imageHelper.cs b/CC.Yi.Common/imageHelper.cs new file mode 100644 index 00000000..170aba9c --- /dev/null +++ b/CC.Yi.Common/imageHelper.cs @@ -0,0 +1,167 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.IO; +using System.IO.Compression; +using System.Drawing; + +namespace CC.Yi.Common +{ + public class SimilarPhoto + { + Image SourceImg; + public SimilarPhoto(string filePath) + { + SourceImg = Image.FromFile(filePath); + } + public SimilarPhoto(Stream stream) + { + SourceImg = Image.FromStream(stream); + } + public String GetHash() + { + Image image = ReduceSize(); + Byte[] grayValues = ReduceColor(image); + Byte average = CalcAverage(grayValues); + String reslut = ComputeBits(grayValues, average); + return reslut; + } + // Step 1 : Reduce size to 8*8 + private Image ReduceSize(int width = 8, int height = 8) + { + Image image = SourceImg.GetThumbnailImage(width, height, () => { return false; }, IntPtr.Zero); + return image; + } + // Step 2 : Reduce Color + private Byte[] ReduceColor(Image image) + { + Bitmap bitMap = new Bitmap(image); + Byte[] grayValues = new Byte[image.Width * image.Height]; + for (int x = 0; x < image.Width; x++) + for (int y = 0; y < image.Height; y++) + { + Color color = bitMap.GetPixel(x, y); + byte grayValue = (byte)((color.R * 30 + color.G * 59 + color.B * 11) / 100); + grayValues[x * image.Width + y] = grayValue; + } + return grayValues; + } + // Step 3 : Average the colors + private Byte CalcAverage(byte[] values) + { + int sum = 0; + for (int i = 0; i < values.Length; i++) + sum += (int)values[i]; + return Convert.ToByte(sum / values.Length); + } + // Step 4 : Compute the bits + private String ComputeBits(byte[] values, byte averageValue) + { + char[] result = new char[values.Length]; + for (int i = 0; i < values.Length; i++) + { + if (values[i] < averageValue) + result[i] = '0'; + else + result[i] = '1'; + } + SourceImg.Dispose(); + return new String(result); + } + // Compare hash + public static Int32 CalcSimilarDegree(string a, string b) + { + if (a.Length != b.Length) + throw new ArgumentException(); + int count = 0; + for (int i = 0; i < a.Length; i++) + { + if (a[i] != b[i]) + count++; + } + return count; + } + } + public static class imageHelper + { + public static int Compare(string filePath1, string filePath2) + { + SimilarPhoto photo1 = new SimilarPhoto(filePath1); + SimilarPhoto photo2 = new SimilarPhoto(filePath2); + return SimilarPhoto.CalcSimilarDegree(photo1.GetHash(), photo2.GetHash()); + } + public static bool ByStringToSave(string name, string iss) + { + iss = iss.Replace("data:image/png;base64,", "").Replace("data:image/jgp;base64,", "") + .Replace("data:image/jpg;base64,", "").Replace("data:image/jpeg;base64,", ""); + byte[] arr = Convert.FromBase64String(iss); + MemoryStream ms = new MemoryStream(arr); + Bitmap bmp = new Bitmap(ms); + string StudentWorkImages = "StudentWorkImages"; + + if (Directory.Exists(@"./wwwroot/" + StudentWorkImages) == false)//如果不存在就创建file文件夹 + { + Directory.CreateDirectory(@"./wwwroot/" + StudentWorkImages); + } + + + + bmp.Save(@"./wwwroot/" + StudentWorkImages + "/" + name + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg); + ms.Close(); + return true; + } + public static bool CreateZip() + { + string file_path = @"./wwwroot/StudentWorkImages.zip"; + string file_path2 = @"./wwwroot/StudentWorkImages/"; + if (File.Exists(file_path)) + { + File.Delete(file_path); + } + + ZipFile.CreateFromDirectory(file_path2, file_path); + return true; + } + public static bool DeleteAll() + { + string file_path = @"./wwwroot/StudentWorkImages/"; + if (Directory.Exists(file_path)) + { + DelectDir(file_path); + return true; + } + else + return false; + } + public static bool DeleteByString(string name) + { + File.Delete(@"./wwwroot/StudentWorkImages/" + name + ".jpg"); + return true; + } + public static void DelectDir(string srcPath) + { + try + { + DirectoryInfo dir = new DirectoryInfo(srcPath); + FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录 + foreach (FileSystemInfo i in fileinfo) + { + if (i is DirectoryInfo) //判断是否文件夹 + { + DirectoryInfo subdir = new DirectoryInfo(i.FullName); + subdir.Delete(true); //删除子目录和文件 + } + else + { + File.Delete(i.FullName); //删除指定文件 + } + } + } + catch (Exception e) + { + Console.Write(e.ToString()); + } + } + } +}