2016-09-13 1 views
0

나는 웹 사이트의 이미지를 저장하는 크롬 확장 프로그램을 작성하고 있습니다. 파일 자체를 저장하는 것 외에도 이미지를 해시 유형으로 변환하고 싶습니다.브라우저에서 색인 된 검색을 위해 이미지를 효율적으로 해시하는 방법은 무엇입니까?

목표는 데이터베이스의 이미지를 색인화하여 이미지가 중복되었는지 (크기에 관계없이, 즉 미리보기 이미지와 풀 사이즈 이미지가 중복으로 간주 될 수 있는지) 쉽게 판단 할 수있게하는 것입니다. 나는 약간의 차이 (크기 외에)가있는 이미지에 대해 정말로 걱정하지 않는다.

나는 this library으로 작업을 시도했지만 크기가 커서 원하는 것보다 약간 느리고 (표면적으로는) 더 이상 지원되지 않습니다.

많은 알고리즘 구현을 시도했지만, 내가 알 수있는 한 가까이에서 모두 서버 측 용도로 사용됩니다. 나는 webpack을 사용하고 있는데, libs를 번들링하지 못했습니다. (매우 가능한 사용자 오류입니다. webpack-pro가 아닙니다.)

마지막으로 converting the image to base64을 시도했지만 결과는 10k + 문자이며 다른 크기의 이미지에서 작동한다는 것은 분명하지 않습니다.

답변

1

저는 자바 스크립트에서 빠른 문자열 해시를 구현할 것입니다. 64 기수로 이미지를 변환, 다음에 문자열의 해시를 실행

https://www.npmjs.com/package/non-crypto-hash

또는 알고리즘은 변환 할 수 있습니다 (노드와 브라우저 모두에서 이러한 작업, 당신은 browserify 이것을에서 가져올 수) : 를 http://landman-code.blogspot.ca/2008/06/superfasthash-from-paul-hsieh.html

암호화 된 보안 해시가 필요 없다고 가정하면 가장 빠른 옵션 일 것입니다.

+0

가능합니다. 나는 해시에 대해 무지하다. 해시를 직접 비교하고 있는가? 즉 시각적으로 동일한 이미지 (크기 제외)를 비교하는 것입니까? – Brandon

+0

음, 해시는 매우 유사한 base64 문자열에 대해서도 매우 다른 결과를 제공해야합니다. 그렇지 않으면 깨진 해시입니다. 따라서 해시가 동일하면 base64/images가 동일해야합니다. 해시 콜리 전 (hash collision)을 얻을 수 있습니다.이 경우 해시 충돌을 처리해야합니다. 그러나 가능성은 매우 낮습니다. 내부적으로는 JS 엔진이 객체의 모든 키에 대해 해시를 사용하고 있다고 보장 할 수 있습니다. 그런 거대한 열쇠를 사용하는 것은 아마도 매우 나쁜 생각입니다. 그래서 그 중 하나를 사용하여 단축하십시오. – EdH

관련 문제