C#怎么验证两个QQ头像相似度
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章主要介绍了C#怎么验证两个QQ头像相似度的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#怎么验证两个QQ头像相似度文章都会有所收获,下面我们一起来看看吧。利用c
千家信息网最后更新 2025年02月02日C#怎么验证两个QQ头像相似度
这篇文章主要介绍了C#怎么验证两个QQ头像相似度的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#怎么验证两个QQ头像相似度文章都会有所收获,下面我们一起来看看吧。
利用c#查看出某个其他qq的头像与自己头像的相似度,先看效果图
这里我是将左边的头像作为比对的基本图,我目前做的是一图比对一图,因为理解好了一对一,一对多也不难,我们可以得出相似的像素,然后大于多少百分比就是同一图的改变了,以下是完整代码
using Newtonsoft.Json;using Newtonsoft.Json.Linq;using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.Drawing;using System.Drawing.Drawing2D;using System.Drawing.Imaging;using System.IO;using System.Linq;using System.Net;using System.Net.Http;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace WindowsFormsApp1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } public static int width; //图片宽 public static int height;//图片高 public static string mypicurl;//我的图片地址 public static string picurl;//图片地址 private void Form1_Load(object sender, EventArgs e) { this.MyPicture.SizeMode = PictureBoxSizeMode.StretchImage; this.MyPicture.BorderStyle = BorderStyle.FixedSingle; this.OtherPicture.SizeMode = PictureBoxSizeMode.StretchImage; this.OtherPicture.BorderStyle = BorderStyle.FixedSingle; this.explain.Text = "操作步骤:左边输入自己qq号查看显示,右边输入别人qq号,点击查看,点击验证,得出结果。"; } private void button2_Click(object sender, EventArgs e) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); int countSame = 0; int countDifferent = 0; Image img = this.MyPicture.Image; Bitmap bitmapSource = new Bitmap(img); //Bitmap bitmapSource = BytesToBitmap(ResizeImage(mypicurl)); width = bitmapSource.Width; height = bitmapSource.Height; Bitmap bitmapTarget = BytesToBitmap(ResizeImage(picurl)); //照片尺寸必须一样 for (int i = 0; i < bitmapTarget.Width; i++) { for (int j = 0; j < bitmapTarget.Height; j++) { if (bitmapSource.GetPixel(i, j).Equals(bitmapTarget.GetPixel(i, j))) { countSame++; } else { countDifferent++; } } } stopwatch.Stop(); this.result.Text = "相同像素个数:" + countSame + ",不同像素个数:" + countDifferent + "用时:" + stopwatch.ElapsedMilliseconds + " 毫秒"; } //byte[] 转图片 public static Bitmap BytesToBitmap(byte[] Bytes) { MemoryStream stream = null; try { stream = new MemoryStream(Bytes); return new Bitmap((Image)new Bitmap(stream)); } catch (ArgumentNullException ex) { throw ex; } catch (ArgumentException ex) { throw ex; } finally { stream.Close(); } } ////// 图片大小裁剪 /// /// ///public static byte[] ResizeImage(string filePath) { WebRequest request = (WebRequest)HttpWebRequest.Create(filePath); WebResponse response = request.GetResponse(); using (Stream stream = response.GetResponseStream()) { Bitmap bm = (Bitmap)Image.FromStream(stream); bm = GetThumbnail(bm, height, width); MemoryStream ms = new MemoryStream(); bm.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); byte[] bytes = ms.GetBuffer(); //byte[] bytes= ms.ToArray(); 这两句都可以,至于区别么,下面有解释 ms.Close(); return bytes; } } /// /// 修改图片的大小 /// /// /// /// ///public static Bitmap GetThumbnail(Bitmap b, int destHeight, int destWidth) { System.Drawing.Image imgSource = b; System.Drawing.Imaging.ImageFormat thisFormat = imgSource.RawFormat; int sW = 0, sH = 0; // 按比例缩放 int sWidth = imgSource.Width; int sHeight = imgSource.Height; if (sHeight > destHeight || sWidth > destWidth) { if ((sWidth * destHeight) > (sHeight * destWidth)) { sW = destWidth; sH = (destWidth * sHeight) / sWidth; } else { sH = destHeight; sW = (sWidth * destHeight) / sHeight; } } else { sW = sWidth; sH = sHeight; } Bitmap outBmp = new Bitmap(destWidth, destHeight); Graphics g = Graphics.FromImage(outBmp); g.Clear(Color.Transparent); // 设置画布的描绘质量 g.CompositingQuality = CompositingQuality.HighQuality; g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.DrawImage(imgSource, new Rectangle((destWidth - sW) / 2, (destHeight - sH) / 2, sW, sH), 0, 0, imgSource.Width, imgSource.Height, GraphicsUnit.Pixel); g.Dispose(); // 以下代码为保存图片时,设置压缩质量 EncoderParameters encoderParams = new EncoderParameters(); long[] quality = new long[1]; quality[0] = 100; EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality); encoderParams.Param[0] = encoderParam; imgSource.Dispose(); return outBmp; } private void button3_Click(object sender, EventArgs e) { if (this.OtherQQ.Text == "") { MessageBox.Show("请输入qq号!"); return; } HttpClient httpClient = new HttpClient(); string url = "https://api.usuuu.com/qq/" + this.OtherQQ.Text; var rsp = httpClient.GetAsync(url).Result; var str = rsp.Content.ReadAsStringAsync().Result; JObject jo = (JObject)JsonConvert.DeserializeObject(str); if ((string)jo["code"] == "200") { Image pic = Image.FromStream(WebRequest.Create((string)jo["data"]["avatar"]).GetResponse().GetResponseStream()); this.OtherPicture.Image = pic; picurl = (string)jo["data"]["avatar"]; } else { MessageBox.Show("请输入正确的qq号!"); } } private void button4_Click(object sender, EventArgs e) { if (this.MyQQ.Text == "") { MessageBox.Show("请输入qq号!"); return; } HttpClient httpClient = new HttpClient(); string url = "https://api.usuuu.com/qq/" + this.MyQQ.Text; var rsp = httpClient.GetAsync(url).Result; var str = rsp.Content.ReadAsStringAsync().Result; JObject jo = (JObject)JsonConvert.DeserializeObject(str); if ((string)jo["code"] == "200") { Image pic = Image.FromStream(WebRequest.Create((string)jo["data"]["avatar"]).GetResponse().GetResponseStream()); this.MyPicture.Image = pic; mypicurl = (string)jo["data"]["avatar"]; } else { MessageBox.Show("请输入正确的qq号!"); } } }}
关于"C#怎么验证两个QQ头像相似度"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"C#怎么验证两个QQ头像相似度"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
图片
头像
相似
输入
验证
两个
C#
像素
知识
个数
代码
内容
地址
大小
篇文章
质量
不同
相同
一对一
价值
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
邯郸互联网软件开发报价
成都软件开发系统集成
怎么使用数据库自动查询
软件开发连锁吴通控股
政府如何做好网络安全工作
引种数据库
上海手机棋牌软件开发
学校宽带无法连接到服务器
观看网络安全专题教育心得体会
河北立体化软件开发发展现状
智能照明网络技术
双阳区质量网络技术服务哪家好
kali网络安全实验
网络安全所面临的威胁有两大类
软件开发 文档归类
win搭建git服务器
GP数据库某个表赋权语句
怎么处理1亿条数据库
app软件开发费用价格
发票开成软件还是软件开发服务费
违停终端服务器图片
九一互联网科技有限公司
初中网络安全主题班队会
网络安全设备验收方案
济宁高校党建软件开发
德州戴尔服务器代理多少钱
搭建阿帕奇服务器
软件开发图元
网络技术全双工半双工模式
重庆应用软件开发靠谱吗