{"id":13413192,"url":"https://github.com/corona10/goimagehash","last_synced_at":"2025-05-15T05:05:40.800Z","repository":{"id":23408469,"uuid":"98671333","full_name":"corona10/goimagehash","owner":"corona10","description":"Go Perceptual image hashing package","archived":false,"fork":false,"pushed_at":"2024-01-21T13:47:09.000Z","size":1587,"stargazers_count":790,"open_issues_count":13,"forks_count":75,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-05-09T21:26:26.742Z","etag":null,"topics":["ahash","dhash","golang","hacktoberfest","hash","image","image-hash","perceptual","phash"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/corona10.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.md","dei":null},"funding":{"github":null,"patreon":null,"open_collective":"goimagehash","ko_fi":null,"tidelift":null,"custom":null}},"created_at":"2017-07-28T17:15:58.000Z","updated_at":"2025-05-07T20:56:02.000Z","dependencies_parsed_at":"2024-01-30T04:58:43.331Z","dependency_job_id":null,"html_url":"https://github.com/corona10/goimagehash","commit_stats":{"total_commits":54,"total_committers":10,"mean_commits":5.4,"dds":0.2222222222222222,"last_synced_commit":"464cef2de9ecd41cb6a8be0ae6d5607a34dccd68"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corona10%2Fgoimagehash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corona10%2Fgoimagehash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corona10%2Fgoimagehash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corona10%2Fgoimagehash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/corona10","download_url":"https://codeload.github.com/corona10/goimagehash/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254092878,"owners_count":22013295,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ahash","dhash","golang","hacktoberfest","hash","image","image-hash","perceptual","phash"],"created_at":"2024-07-30T20:01:34.821Z","updated_at":"2025-05-15T05:05:40.775Z","avatar_url":"https://github.com/corona10.png","language":"Go","funding_links":["https://opencollective.com/goimagehash"],"categories":["Images","图片","Relational Databases","图像","Images 图像处理"],"sub_categories":["Search and Analytic Databases","检索及分析资料库","Advanced Console UIs","交流","SQL 查询语句构建库"],"readme":"![GitHub Action](https://github.com/corona10/goimagehash/workflows/goimagehash%20workflow/badge.svg)\n[![GoDoc](https://godoc.org/github.com/corona10/goimagehash?status.svg)](https://godoc.org/github.com/corona10/goimagehash)\n[![Go Report Card](https://goreportcard.com/badge/github.com/corona10/goimagehash)](https://goreportcard.com/report/github.com/corona10/goimagehash)\n\n# goimagehash\n\u003e Inspired by [imagehash](https://github.com/JohannesBuchner/imagehash)\n\nA image hashing library written in Go. ImageHash supports:\n* [Average hashing](http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html)\n* [Difference hashing](http://www.hackerfactor.com/blog/index.php?/archives/529-Kind-of-Like-That.html)\n* [Perception hashing](http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html)\n* [Wavelet hashing](https://fullstackml.com/wavelet-image-hash-in-python-3504fdd282b5) [TODO]\n\n## Installation\n```\ngo get github.com/corona10/goimagehash\n```\n## Special thanks to\n* [Haeun Kim](https://github.com/haeungun/)\n\n## Usage\n\n``` Go\nfunc main() {\n        file1, _ := os.Open(\"sample1.jpg\")\n        file2, _ := os.Open(\"sample2.jpg\")\n        defer file1.Close()\n        defer file2.Close()\n\n        img1, _ := jpeg.Decode(file1)\n        img2, _ := jpeg.Decode(file2)\n        hash1, _ := goimagehash.AverageHash(img1)\n        hash2, _ := goimagehash.AverageHash(img2)\n        distance, _ := hash1.Distance(hash2)\n        fmt.Printf(\"Distance between images: %v\\n\", distance)\n\n        hash1, _ = goimagehash.DifferenceHash(img1)\n        hash2, _ = goimagehash.DifferenceHash(img2)\n        distance, _ = hash1.Distance(hash2)\n        fmt.Printf(\"Distance between images: %v\\n\", distance)\n        width, height := 8, 8\n        hash3, _ := goimagehash.ExtAverageHash(img1, width, height)\n        hash4, _ := goimagehash.ExtAverageHash(img2, width, height)\n        distance, _ = hash3.Distance(hash4)\n        fmt.Printf(\"Distance between images: %v\\n\", distance)\n        fmt.Printf(\"hash3 bit size: %v\\n\", hash3.Bits())\n        fmt.Printf(\"hash4 bit size: %v\\n\", hash4.Bits())\n\n        var b bytes.Buffer\n        foo := bufio.NewWriter(\u0026b)\n        _ = hash4.Dump(foo)\n        foo.Flush()\n        bar := bufio.NewReader(\u0026b)\n        hash5, _ := goimagehash.LoadExtImageHash(bar)\n}\n```\n\n## Release Note\n### v1.1.0\n- The performance of Perceptionhash is enhanced.\n\n### v1.0.3\n- Add workflow for GithubAction\n- Fix typo on the GoDoc for LoadImageHash\n\n### v1.0.2\n- go.mod is now used for install goimagehash\n\n### v1.0.1\n- Perception/ExtPerception hash creation times are reduced\n\n### v1.0.0\n**IMPORTANT**\ngoimagehash v1.0.0 does not have compatible with the before version for future features\n\n- More flexible extended hash APIs are provided ([ExtAverageHash](https://godoc.org/github.com/corona10/goimagehash#ExtAverageHash), [ExtPerceptionHash](https://godoc.org/github.com/corona10/goimagehash#ExtPerceptionHash), [ExtDifferenceHash](https://godoc.org/github.com/corona10/goimagehash#ExtDifferenceHash))\n- New serialization APIs are provided([ImageHash.Dump](https://godoc.org/github.com/corona10/goimagehash#ImageHash.Dump), [ExtImageHash.Dump](https://godoc.org/github.com/corona10/goimagehash#ExtImageHash.Dump))\n- [ExtImageHashFromString](https://godoc.org/github.com/corona10/goimagehash#ExtImageHashFromString), [ImageHashFromString](https://godoc.org/github.com/corona10/goimagehash#ImageHashFromString) is deprecated and will be removed\n- New deserialization APIs are provided([LoadImageHash](https://godoc.org/github.com/corona10/goimagehash#LoadImageHash), [LoadExtImageHash](https://godoc.org/github.com/corona10/goimagehash#LoadExtImageHash))\n- Bits APIs are provided to measure actual bit size of hash\n\n### v0.3.0\n- Support DifferenceHashExtend.\n- Support AverageHashExtend.\n- Support PerceptionHashExtend by @TokyoWolFrog.\n\n### v0.2.0\n- Perception Hash is updated.\n- Fix a critical bug of finding median value.\n\n### v0.1.0\n- Support Average hashing\n- Support Difference hashing\n- Support Perception hashing\n- Use bits.OnesCount64 for computing Hamming distance by @dominikh\n- Support hex serialization methods to ImageHash by @brunoro\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcorona10%2Fgoimagehash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcorona10%2Fgoimagehash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcorona10%2Fgoimagehash/lists"}