php比较图片相似度代码示例

php中文网
发布: 2016-07-25 08:52:06
原创
2055人浏览过
  1. /**

  2. * 图片相似度比较
  3. *
  4. * @version $id: imagehash.php 4429 2012-04-17 13:20:31z jax $
  5. * @authorjax.hu
  6. * www.osxue.com
  7. *//sample_1
  8. *$ahash = imagehash::hashimagefile('wsz.11.jpg');
  9. *$bhash = imagehash::hashimagefile('wsz.12.jpg');
  10. *var_dump(imagehash::ishashsimilar($ahash, $bhash));
  11. *
  12. *//sample_2
  13. *var_dump(imagehash::isimagefilesimilar('wsz.11.jpg', 'wsz.12.jpg'));
  14. *
  15. */
  16. class ImageHash {

  17. /**取样倍率 1~10
  18. * @access public
  19. * @staticvar int
  20. * */
  21. public static $rate = 2;
  22. /**相似度允许值 0~64

  23. * @access public
  24. * @staticvar int
  25. * */
  26. public static $similarity = 80;
  27. /**图片类型对应的开启函数

  28. * @access private
  29. * @staticvar string
  30. * */
  31. private static $_createFunc = array(
  32. IMAGETYPE_GIF =>'imageCreateFromGIF',
  33. IMAGETYPE_JPEG=>'imageCreateFromJPEG',
  34. IMAGETYPE_PNG =>'imageCreateFromPNG',
  35. IMAGETYPE_BMP =>'imageCreateFromBMP',
  36. IMAGETYPE_WBMP=>'imageCreateFromWBMP',
  37. IMAGETYPE_XBM =>'imageCreateFromXBM',
  38. );
  39. /**从文件建立图片

  40. * @param string $filePath 文件地址路径
  41. * @return resource 当成功开启图片则传递图片 resource ID,失败则是 false
  42. * */
  43. public static function createImage($filePath){
  44. if(!file_exists($filePath)){ return false; }

    立即学习PHP免费学习笔记(深入)”;

  45. /*判断文件类型是否可以开启*/

  46. $type = exif_imagetype($filePath);
  47. if(!array_key_exists($type,self::$_createFunc)){ return false; }
  48. $func = self::$_createFunc[$type];

  49. if(!function_exists($func)){ return false; }
  50. return $func($filePath);

  51. }
  52. /**hash 图片

  53. * @param resource $src 图片 resource ID
  54. * @return string 图片 hash 值,失败则是 false
  55. * */
  56. public static function hashImage($src){
  57. if(!$src){ return false; }
  58. /*缩小图片尺寸*/

  59. $delta = 8 * self::$rate;
  60. $img = imageCreateTrueColor($delta,$delta);
  61. imageCopyResized($img,$src, 0,0,0,0, $delta,$delta,imagesX($src),imagesY($src));
  62. /*计算图片灰阶值*/

    代码小浣熊
    代码小浣熊

    代码小浣熊是基于商汤大语言模型的软件智能研发助手,覆盖软件需求分析、架构设计、代码编写、软件测试等环节

    代码小浣熊 51
    查看详情 代码小浣熊
  63. $grayArray = array();
  64. for ($y=0; $y for ($x=0; $x $rgb = imagecolorat($img,$x,$y);
  65. $col = imagecolorsforindex($img, $rgb);
  66. $gray = intval(($col['red']+$col['green']+$col['blue'])/3)& 0xFF;
  67. $grayArray[] = $gray;

  68. }
  69. }
  70. imagedestroy($img);
  71. /*计算所有像素的灰阶平均值*/

  72. $average = array_sum($grayArray)/count($grayArray);
  73. /*计算 hash 值*/

  74. $hashStr = '';
  75. foreach ($grayArray as $gray){
  76. $hashStr .= ($gray>=$average) ? '1' : '0';
  77. }
  78. return $hashStr;
  79. }
  80. /**hash 图片文件

  81. * @param string $filePath 文件地址路径
  82. * @return string 图片 hash 值,失败则是 false
  83. * */
  84. public static function hashImageFile($filePath){
  85. $src = self::createImage($filePath);
  86. $hashStr = self::hashImage($src);
  87. imagedestroy($src);
  88. return $hashStr;

  89. }
  90. /**比较两个 hash 值,是不是相似

  91. * @param string $aHash A图片的 hash 值
  92. * @param string $bHash B图片的 hash 值
  93. * @return bool 当图片相似则传递 true,否则是 false
  94. * */
  95. public static function isHashSimilar($aHash, $bHash){
  96. $aL = strlen($aHash); $bL = strlen($bHash);
  97. if ($aL !== $bL){ return false; }
  98. /*计算容许落差的数量*/

  99. $allowGap = $aL*(100-self::$similarity)/100;
  100. /*计算两个 hash 值的汉明距离*/

  101. $distance = 0;
  102. for($i=0; $i if ($aHash{$i} !== $bHash{$i}){ $distance++; }
  103. }
  104. return ($distance }

  105. /**比较两个图片文件,是不是相似

  106. * @param string $aHash A图片的路径
  107. * @param string $bHash B图片的路径
  108. * @return bool 当图片相似则传递 true,否则是 false
  109. * */
  110. public static function isImageFileSimilar($aPath, $bPath){
  111. $aHash = ImageHash::hashImageFile($aPath);
  112. $bHash = ImageHash::hashImageFile($bPath);
  113. return ImageHash::isHashSimilar($aHash, $bHash);
  114. }
  115. }
复制代码


PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号