Проверьте, загружено ли то же изображение, сравнив BASE64?

Мой вопрос касается моей идеи, где я мог бы проверить, было ли уже загружено изображение, сравнивая их строки в кодировке base64 …

Примером использования будет поиск дубликатов в вашей базе данных …

Думаю, операция будет довольно большой — сначала конвертируем изображение в base64, а затем используем что-то вроде strcmp () для сравнения.

Не уверен, что в этом есть смысл, но что вы думаете об этой идее?

Будет ли это слишком большой операцией? Насколько точным это будет? Имеет ли идея смысл?

2

Решение

Вот функция, которая может помочь вам сравнить файлы быстрее.

Помимо проверки очевидной вещи, такой как размер файла, вы можете играть больше, сравнивая двоичные фрагменты.
Например, проверьте последние n байтов, а также фрагмент случайного смещения.

Я использовал сравнение контрольной суммы в качестве последнего средства.

При оптимизации порядка проверки вы также можете принять во внимание, ожидаете ли вы, что файлы будут другими или нет.

function areEqual($firstPath, $secondPath, $chunkSize = 500){

// First check if file are not the same size as the fastest method
if(filesize($firstPath) !== filesize($secondPath)){
return false;
}

// Compare the first ${chunkSize} bytes
// This is fast and binary files will most likely be different
$fp1 = fopen($firstPath, 'r');
$fp2 = fopen($secondPath, 'r');
$chunksAreEqual = fread($fp1, $chunkSize) == fread($fp2, $chunkSize);
fclose($fp1);
fclose($fp2);

if(!$chunksAreEqual){
return false;
}

// Compare hashes
// SHA1 calculates a bit faster than MD5
$firstChecksum = sha1_file($firstPath);
$secondChecksum = sha1_file($secondPath);
if($firstChecksum != $secondChecksum){
return false;
}

return true;
}
2

Другие решения

Если бы я делал что-то подобное, я бы использовал хэш md5 вместо base64_encode.

$equal = ( md5($image1) == md5($image2)) ? true : false;
0

По вопросам рекламы [email protected]