2013-07-02 2 views
0

저는 캔버스 페인트 아트 생성기의 일종 인 앱을 제작하고 있습니다. 세부 사항은 중요하지 않습니다. 중요한 것은 같은 이미지가 두 번 저장되지 않는다는 것입니다.PHP : 파일을 저장하지 않고 이미지를 비교하는 방법은 무엇입니까?

동일한 이미지가 두 번 이상 생성되었지만 저장되기 전에 동일한 복사본에 대한 모든 이미지의 날짜를 확인해야합니다. 결국에는 수천, 심지어는 수백만 개의 이미지가 생길 수 있으므로 원시 파일을 저장하고 모든 파일을 활성 파일과 비교하여 검사하는 것은 상당히 비합리적입니다. 고유 한 키 또는 문자열로 이미지 파일을 줄이는 방법이 있습니까?

나는 일종의 SHA 변환을 고려했다. 로그 된 해시 테이블에 대해 이미지의 해시를 확인하는 것은 정말 쉽다.하지만 주제에 대한 정보가 부족하고 SHA에 중복 가능성이 적다. 어떤 도움을 주셔서 감사합니다 - 감사합니다!

+0

이미지 데이터를 기반으로 해시 값을 계산하고 저장된 이미지 축소판의 파일 이름을 생성하는 데 사용하여 비슷한 결과를 보았습니다. 이것은 가능하지만 약 10 만 개의 이미지에서 꽤 잘 작동하고 잘못된 일치를 보지 못했습니다. 그것은 중복을 찾는 꽤 좋은 직업을했다. –

답변

1

이 작업을 수행하려면 hash_file 함수를 사용할 수 있습니다. (pecl 확장)

$hash = hash_file("sha256", $filename); 

기본적으로 해시와의 충돌은 가능하지만 매우있을 법하지 않습니다. 추가로 파일을 보호하기 위해 파일 크기와 같은 추가 속성을 해시에 추가 할 수 있습니다.

$hash = hash_file("sha256", $filename)."-".filesize($filename); 

이제 충돌은 동일한 해시를 생성하는 동일한 크기의 두 파일에서만 가능합니다.

관련 문제