修改图片文件 Hash 值

修改图片文件 Hash 值,第1张

准备工作:

使用 ImageMagick 对 png 做轻量压缩,及不损失质量,又可改变文件 hash 值。方法:

1切换cd至工程目录你自己的工程目录

2执行

网页组成内容无非就是文字,,js,动画flash,视频元素,早在几年前,在搜索引擎发展初级阶段的时候,搜索引擎的抓取内容方式是及其原始和简陋的,而且只能抓取网页的title等页头部分。

当时站长群也很少,而且做一个关键词也非常容易,主要随便修改一下网页的标题就可以达到很好的排名,随着搜索引擎数据发掘技术的发展,搜索引擎慢慢会尝试去抓取更多的东西,比如网页的其他文字内容,并且不再将网页标题作为唯一的排名标准,并且加入了很多其他的算法来给一个网站在搜索引擎上综合的排名。

目前来说,百度能够很好的识别和把握中文内容,不然也不会对外号称自己是全球第一大中文搜索引擎,对能够有一定程度的识别,而对flash动画和视频抓取技术还比不上google;谷歌虽然不主张站长使用动画来作为网站主要展示内容的方式,但是经过大家试验,一些简单的flash动画内的问题google能够很好的识别,并将该元素内抓取的内容作为网站综合排名的依据,而百度似乎还是停留在文字和基础上。

谷歌对于一些单色背景能够很好的识别,比如黑色背景上打上白色的字,谷歌的识别几乎达到了100%。

感知哈希算法是一类哈希算法的总称,其作用在于生成每张图像的“指纹”(fingerprint)字符串,比较不同图像的指纹信息来判断图像的相似性。结果越接近图像越相似。感知哈希算法包括均值哈希(aHash)、感知哈希(pHash)和dHash(差异值哈希)。

aHash速度较快,但精确度较低;pHash则反其道而行之,精确度较高但速度较慢;dHash兼顾二者,精确度较高且速度较快。

在得到64位hash值后,使用汉明距离量化两张图像的相似性。汉明距离越大,图像的相似度越小,汉明距离越小,图像的相似度越大。

a) 缩放:为了保留图像的结构,降低图像的信息量,需要去掉细节、大小和横纵比的差异,建议把统一缩放到88,共64个像素的;

b) 转化为灰度图:把缩放后的转化为256阶的灰度图;

c) 计算平均值: 计算进行灰度处理后的所有像素点的平均值;

d) 比较像素灰度值:遍历灰度每一个像素,如果大于平均值记录为1,否则为0;

e) 构造hash值:组合64个bit位生成hash值,顺序随意但前后保持一致性即可;

f) 对比指纹:计算两幅的指纹,计算汉明距离。

感知哈希算法可以获得更精确的结果,它采用的是DCT(离散余弦变换)来降低频率。

a) 缩小尺寸

为了简化了DCT的计算,pHash以小开始(建议大于8x8,32x32)。

b) 简化色彩

与aHash相同,需要将转化成灰度图像,进一步简化计算量(具体算法见aHash算法步骤)。

c) 计算DCT

DCT是把分解频率聚集和梯状形。这里以32x32的为例。

d) 缩小DCT

DCT的结果为32x32大小的矩阵,但只需保留左上角的8x8的矩阵,这部分呈现了中的最低频率。

e) 计算平均值

如同均值哈希一样,计算DCT的均值

f) 进一步减小DCT

根据8x8的DCT矩阵进行比较,大于等于DCT均值的设为”1”,小于DCT均值的设为“0”。的整体结构保持不变的情况下,hash结果值不变。

g) 构造hash值

组合64个bit位生成hash值,顺序随意但前后保持一致性即可。

h)对比指纹:计算两幅的指纹,计算汉明距离。

相比pHash,dHash的速度更快,相比aHash,dHash在效率几乎相同的情况下的效果要更好,它是基于渐变实现的。

a) 缩小:收缩至98的大小,它有72的像素点;

b) 转化为灰度图:把缩放后的转化为256阶的灰度图。(具体算法见aHash算法步骤);

c) 计算差异值:计算相邻像素间的差异值,这样每行9个像素之间产生了8个不同的差异,一共8行,则产生了64个差异值;

d) 比较差异值:如果前一个像素的颜色强度大于第二个像素,那么差异值就设置为“1”,如果不大于第二个像素,就设置“0”。

e) 构造hash值:组合64个bit位生成hash值,顺序随意但前后保持一致性即可。

f) 对比指纹:计算两幅的指纹,计算汉明距离。

在将私有组件打成二进制包的时候,我们可以选择打包成 静态库 或者 动态库 , 静态库 和 动态库 读取的方式也略有不同,同时在私有组件里面指定资源的方式也分两种,即 resources 和 resource_bundles ,下面做具体分析

1resources

使用 resources 来指定资源,被指定的资源只会简单的被 copy 到目标工程中,如:

官方认为用 resources 是无法避免每个库和主工程之间的同名资源冲突,同时,Xcode 也不会对这些资源做优化。

2resource_bundles

resource_bundles 允许定义当前 Pod 库的资源包的名称和文件。用 hash 的形式来声明,key 是 bundle 的名称,value 是需要包括的文件的通配 patterns。比如:

CocoaPods 官方强烈推荐使用 resource_bundles,因为用 key-value 可以避免每个库和主工程之间的同名资源冲突

1如果使用 resourses 指定资源:

读取可以直接从MainBundle读取:

2如果使用 resource_bundles 方式指定资源:

读取就要从自己的bundle读取,也就是OTSDebugPluginsModulebundle:

1如果使用 resourses 指定资源:

需要到自己的 frameWork 里的bundle读取:

2如果使用 resource_bundles 方式指定资源:

读取同样也需要到 frameWork 里的bundle读取,但是bundle名称是OTSDebugPluginsModulebundle:

后来试了一下不指定 OTSDebugPluginsModulebundle 也行(注意:Xib和Storyboard不行,必须要指定OTSDebugPluginsModulebundle):

动态库加载:

针对动态库和静态库通过resource_bundles获取资源,封装了一个分类UIImage+OTSAssetsh:

1动态库获取资源

2静态库获取资源

方案一:通过bundle获取

方案二:通过bundleName获取

有了这个分类的话,在业务组件里面获取资源就很方便了,比如在登录模块OTSAccountModule:

声明:

这样就可以全局使用了:

javascript 获取文件域 (type=file) 的完整路径一直是很麻烦的问题,问题主要出在一些浏览器基于安全性考虑而不能正常获取到文件域中选中的决对路径,尤其一些基于webkit的浏览器比如 Chrome, Safire等浏览器,下面是一个可以兼容 IE 6 , 7, 8 和 firefox 的获取 input file 完整路径的方法,该方法不支持 Chrome 和 Safire,要支持这些浏览器可能要使用到 Flash ,对程序员来说比较麻烦。

HTML页面:

<input type="file" name="attachment" id="attachment" />

<input type="text" name="trueattachment" id="trueattachment" />js部分:

<script type="text/javascript">

var attachment=documentgetElementById("attachment");

var trueattachment=documentgetElementById("trueattachment");

attachmentonchange=function(){

trueattachmentvalue=getFullPath(this);

}

function getFullPath(obj){

if(obj)

{

//ie

if (windownavigatoruserAgentindexOf("MSIE")>=1)

{

objselect();

return documentselectioncreateRange()text;

}

//firefox

else if(windownavigatoruserAgentindexOf("Firefox")>=1)

{

if(objfiles)

{

return objfilesitem(0)getAsDataURL();

}

return objvalue;

}

return objvalue;

}

}

</script>

以上就是关于修改图片文件 Hash 值全部的内容,包括:修改图片文件 Hash 值、搜索引擎到底会不会抓取图片,js,fhash内容、感知哈希算法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9316684.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存