在谷歌百度以图搜索中, 用户可以上传一张图片, 谷歌百度显示因特网中与此图片相同或者相似的图片.
第一步:将图片缩小到8×8的尺寸,总共64个像素。这一步的作用是去除图片的细节, 只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片差异。
第二步:将缩小后的图片,转为64级灰度。也就是说,所有像素点总共只有64种颜色。
第三步:计算所有64个像素的灰度平均值。
第四步:将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0。
第五步:将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用同样次序。
第六步:计算”汉明距离”(Hamming distance),如果不相同的数据位不超过5,就说明两张图片很相似;如果大于10,就说明这是两张不同的图片。
usi...
9年前 (2016-08-18) 2025℃ 0评论
2喜欢
在iframe与父窗口或者与子窗口传递数据是一个麻烦的事情,如果我们能够写一个一劳永逸的接口那就再方便不过了,下面就来简答介绍一下如何实现此功能。原理就是将数据缓存早window.top这个窗口,这样无论子窗口父窗口的层次如何变化,数据总是存在不会变化的。
var dataShare = {
setData: function(name, value) {
var top = window.top,
cache = top['_CACHE'] || {};
top['_CACHE'] = cache;
return value ? cache[name] = value: cache[name];
},
removeData: function(name) {
var...
9年前 (2016-08-17) 1586℃ 0评论
0喜欢
项目中有短信发送模块,由于SP提供的SDK升级。在项目中需要新增SDK的版本。新版本新增的同时要更新旧版本的Dll引用方式,旧版本之前通过DllImport引用使用绝对路径。地址更换后,在操作短信发送的时候就会报“无法加载DLL’*.dll’,找不到指定的模块”。(相关的DLL已经放到Bin目录下)。
当使用绝对路径或者把相关DLL拷贝到系统目录(C:\WINDOWS\system32)后,此类错误不再出现。虽说问题得以解决,但无论是绝对路径还是把相关DLL放到系统目录,这都不是很好的解决办法。很多服务器是不允许在非网站应用程序下新建文件的。而在网上基本都是三种解决方案,如下:
1、将相关的DLL拷贝到Bin目录下
2、将相关的DLL放到系统目录(C:\WINDOWS\system32)
3、使用绝对路径,例如:E:\dll\xxxx.dll
以上三种解决方案在不同...
9年前 (2016-08-16) 2485℃ 0评论
3喜欢
这个之前(很久之前了吧)使用webform的时候使用的验证码,实现的方式也很简单。
using System;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
using System.Text;
using System.Collections;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
namespace WebUI.yzm
{
public partial class yzm : System.Web.UI....
9年前 (2016-08-01) 1147℃ 0评论
0喜欢
在某些情况下对文本文件进行读取会出现乱码,这种情况是因为指定的文本文件的编码类型不是系统默认的编码类型或者不是读取时指定的编码类型。解决这种出现乱码的情况可以先获取指定文本文件的编码类型,然后在进行内容的读取。这样尽可能的避免读取文本文件时出现乱码的机率。代码如下:
/// <summary>
/// 获取指定文件的编码
/// 以防止在不知道文件编码格式的情况下处理文件而造成的乱码问题
/// </summary>
/// <param name="filename">文件路径</param>
/// <returns></returns>
public System.Text.Encoding GetFileEncodeType(string filename)
{
if (!File.Ex...
9年前 (2016-07-19) 2353℃ 0评论
4喜欢
简介
Code39是条形码的一种。由于编制简单、能够对任意长度的数据进行编码、支持设备广泛等特性而被广泛采用。
能够对任意长度的数据进行编码。其局限在于印刷品的长度和条码阅读器的识别范围。 支持设备广泛。目前几乎所有的条形码阅读设备都能阅读Code39码,打印机也是同样情况。 编制简单。简单的开发技术就能快速生成相应的编码图像。 一般Code39码由5条线和分开它们的4条缝隙共9个元素构成。线和缝隙有宽窄之分,而且无论线还是缝隙仅有3个比其他的元素要宽一定比例。39码因此得名
Code39条形码规则
1、 每五条线表示一个字符;
2、 粗线表示1,细线表示0;
3、 线条间的间隙宽的表示1,窄的表示0;
4、 五条线加上它们之间的四条间隙就是九位二进制编码,而且这九位中必定有三位是1,所以称为39码;
5、 条...
9年前 (2016-07-15) 1560℃ 0评论
2喜欢
首先在Word文档中,插入一个新的书签,并命名(假设建了一个名为”BOOKMARKNAME”的书签),然后使用C#操作Word:
using MSWord = Microsoft.Office.Interop.Word;
//引用命名空间
private MSWord.Application wordApp;
//Word应用程序变量
private MSWord.Document wordDoc;
//Word文档变量
private Object Nothing = Missing.Value;
//初始化
wordApp = new MSWord.ApplicationClass();
wordDoc = wordApp.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref ...
9年前 (2016-07-14) 2864℃ 0评论
2喜欢
在某些情况下,需要获得用户的DPI。以下方法是用JavaScript实现获取用户的DPI。
function getDPI() {
var arrDPI = new Array;
var devicePixelRatio = window.devicePixelRatio || 1;
var tmpNode = document.createElement("DIV");
tmpNode.style.cssText = "height: 1in; left: -100%; position: absolute; top: -100%; width: 1in;";
document.body.appendChild(tmpNode);
arrDPI[0] = parseInt(tmpNode.o...
9年前 (2016-07-02) 2766℃ 0评论
3喜欢
此方法为招商银行网上银行对金额进行大写的转换方法。
function ConvertUpperMoney(whole) {
//金额转换。输入数字字符串,低至分位,高位不为零
var GBK_unit1 = "分角";
var GBK_unit2 = "圆拾佰仟";
var GBK_unit3 = "万拾佰仟"
var GBK_unit4 = "亿拾佰仟";
var GBK_num = "零壹贰叁肆伍陆柒捌玖";
var section1 = "";
if (whole.length - 2 >= 0) section1 = whole.substr(whole.length - 2, 2);
else section1 = whole.substr(0, whole.length);
...
9年前 (2016-07-02) 1207℃ 0评论
0喜欢
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript">function shake(id) {
var style = document.getElementById(id).style,
p = [4, 8, 4, 0, -4, -8, -4, 0],
fx = function() {
style.marginLeft = p.shift() + 'px';
if (p.length <= 0) {
style.marginLeft = 0;
...
9年前 (2016-07-02) 1414℃ 0评论
1喜欢
var TpLinkPassWordEnCode = {
_strDe: "RDpbLfCPsJZ7fiv",
_dic: "yLwVl0zKqws7LgKPRQ84Mdt708T1qQ3Ha7xv3H7NyU84p21BriUWBU43odz3iP4rBL3cD02KZciX" +
"TysVXiV8ngg6vL48rPJyAUw0HurW20xqxv9aYb4M9wK1Ae0wlro510qXeU07kV57fQMc8L6aLgML" +
"wygtc0F10a0Dg70TOoouyFhdysuRMO51yY5ZlOZZLEal1h0t9YQW0Ko7oBwmCAHoic4HYbUyVeU3" +
"sfQ1xtXcPcf1aT303wAQhv66qzW",
securityEncode: func...
9年前 (2016-07-01) 2207℃ 0评论
5喜欢
浅拷贝:
function extendCopy(p) {
var c = {};
for (var i in p) {
c[i] = p[i];
}
c.uber = p;
return c;
}
深拷贝:
function deepCopy(p, c) {
var c = c || {};
for (var i in p) {
if (typeof p[i] === 'object') {
c[i] = (p[i].constructor === Array) ? [] : {};
deepCopy(p[i], c[i]);
...
9年前 (2016-07-01) 1237℃ 0评论
0喜欢
/*
var d=new Date();
console.log(d.toString()); //2012-7-27 9:26:52
console.log(d.toString("")); //2012-7-27 9:26:52
console.log(d.toString("yyyy-MM-dd HH:mm:ss")); //2012-07-27 09:26:52
console.log(d.toString("yyyy年MM月dd日 HH:mm:ss")); //2012年07月27日 09:26:52
console.log(d.toString("yyyy-MM-dd HH:mm:ss fff")); //2012-07-27 09:26:52 237
console.log(d.toString("yyyy年 MMM dd ...
9年前 (2016-07-01) 1309℃ 0评论
0喜欢
参数化查询(Parameterized Query )是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,这个方法目前已被视为最有效可预防SQL注入攻击 (SQL Injection) 的攻击手法的防御方式。下面将重点总结下Parameter构建的几种常用方法。
说起参数化查询当然最主要的就是如何构造所谓的参数:比如,我们登陆时需要密码和用户名,一般我们会这样写sql语句,select count(*) from username where names=@names and passwd=@passwd,为了防止sql注入,我们该如何构建@names和@passwd两个参数呢,下面提供7种(其实大部分原理都是一样,只不过代码表现形式不一样,以此仅作对比,方便使用)构建参数的方法,根据不同的情况选用合适的方法即可:
通用数据库...
9年前 (2016-05-05) 1430℃ 0评论
1喜欢
数据库中事务的四大特性(ACID):原子性、一致性、隔离性、持久性。如果一个数据库支持事务的操作,那么该数据库必须要具备以下四个特性:
原子性(Atomicity)
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
一致性(Consistency)
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
隔离性(Isolation)
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
持久性(Durability)
持久性是指一个事务一旦被提交...
9年前 (2016-04-10) 1029℃ 0评论
0喜欢
润年
闰年
闰年是公历中的名词,闰年分为普通闰年和世纪闰年。
普通闰年:能被4整除但不能被100整除的年份为普通闰年。(如2004年就是闰年,1999年不是闰年)
世纪闰年:能被400整除的为世纪闰年。(如2000年是闰年,1900年不是闰年)
闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。补上时间差的年份为闰年。闰年共有366天(1-12月分别为31天,29天,31天,30天,31天,30天,31天,31天,30天,31天,30天,31天)。
凡阳历中有闰日(二月为二十九日)的年;闰余(岁余置闰。阴历每年与回归年相比所差的时日)
注意闰年(公历中名词)和闰月(农历中名词)并没有直接的关联,公历中只分闰年和平年,平年有365天,而闰年有366天(2月中多一天)
平年中也可能有闰月(如2...
9年前 (2016-04-05) 1892℃ 0评论
1喜欢
最近有遇到两个对象的赋值问题,两个对象的属性几乎都一样的,所以写了个通过反射获取属性的然后赋值的方法,把一个对象的属性的值赋值给另对象。
public static class MapperHelper
{
/// <summary>
/// 反射实现两个类的对象之间相同属性的值的复制
/// 适用于初始化新实体
/// </summary>
/// <typeparam name="R">返回的实体</typeparam>
/// <typeparam name="S">数据源实体</typeparam>
/// <param name="s">数据源实体</param&...
10年前 (2015-02-20) 1564℃ 0评论
1喜欢
在数据库进行表设计的时,大多情况下都习惯使用一个自增列作为主键,具体原因这里不会进行描述。在很多情况下需要对现有数据进行数据迁移,这个时候就需要保证迁移后的数据自增列的数据保持不变。SQL SERVER是支持这种迁移方式的。
首先就要先取消自增长,数据迁移完成后再恢复自增长即可。
SET IDENTITY_INSERT
允许将显式值插入表的标识列中。
语法
SET IDENTITY_INSERT [ database.[ owner.] ] { table } { ON | OFF }
实例
set IDENTITY_INSERT tableName on;
INSERT INTO tableName (id,name) VALUES (2,'name');
set IDENTITY_INSER...
13年前 (2012-04-10) 3728℃ 0评论
7喜欢