Examples
Find duplicate uploads
php
$index = new ImageHashIndex();
foreach ($existingImages as $image) {
$index->add($image->id, $image->hash);
}
$matches = $index->search($newUploadHash, maxDistance: 3, limit: 10);
if (count($matches) > 0) {
echo "This upload may already exist.";
}Search screenshots
php
$index = ImageHashIndex::load('/data/screenshots.idx');
$matches = $index->search(
$targetHash,
maxDistance: 8,
limit: 50
);
foreach ($matches as $match) {
echo "Possible match: {$match['id']} distance {$match['distance']}\n";
}Image Moderation
php
$bannedIndex = ImageHashIndex::load('/data/banned.idx');
$matches = $bannedIndex->search(
$uploadedImageHash,
maxDistance: 5,
limit: 10
);
if (count($matches) > 0) {
echo "Upload requires moderator review.";
}Useful for:
- detecting previously removed images
- identifying slightly modified reposts
- forum and community moderation
- reducing manual review workload
What this means
Even if a user crops, resizes or slightly edits an image, perceptual hashing can often identify that it is visually similar to content that has already been reviewed or removed.
Choosing maxDistance
Start strict, then loosen.
text
0-2 near exact
3-5 very similar
6-10 similar enough to review
10+ expect noiseThe best threshold depends on your images. Screenshot datasets may behave differently to photos.
