21

Re: Порівняти зображення

В мене був подібний приклад на С# перед прийняттям на першу роботу  :)  Називався "знайти всі групи однакових за вмістом файлів у вказаній папці" (Адже однакові хеш-коди не гарантують однакового вмісту).
Перевірка в лоб виявилась вкрай повільною.
А той алгоритм, що я навів - буде працювати на порядок швидше.

22

Re: Порівняти зображення

Знаю про навантаження,можна було б звязати з бд.

23 Востаннє редагувалося mike (24.09.2014 12:48:34)

Re: Порівняти зображення

yarko написав:

В мене був подібний приклад на С# перед прийняттям на першу роботу  :)  Називався "знайти всі групи однакових за вмістом файлів у вказаній папці" (Адже однакові хеш-коди не гарантують однакового вмісту).
Перевірка в лоб виявилась вкрай повільною.
А той алгоритм, що я навів - буде працювати на порядок швидше.

наведіть приклад, коли два різні файли і мають однаковий хеш.

UPD. тут мається на увазі однакова довжина файлу? чи хеш за іншими ознаками генериться?

24 Востаннє редагувалося yarko (24.09.2014 12:52:29)

Re: Порівняти зображення

google "Колізія хеш-функції вікі"
для md5 я вже десь бачив такі приклади однакової довжини на вікіпедії, тільки не памятаю на якій саме сторінці

UPD. http://habrahabr.ru/post/137316/

Подякували: mike1

25

Re: Порівняти зображення

тут же на вікі радять дописувати сіль на початку або вкінці файлу перед хешуванням або конкатенувати підряд два різні хеші.

26

Re: Порівняти зображення

Це жах...
Розставте відступи, ваш код читати боляче.
Дайте нормальну назву функції (findPictureByContent, наприклад).
Визначати глобальні константи в функції, яка має інше призначення - не найкраща ідея.
Виводити повідомлення, а тим більше робити exit в функції - теж не варто, хай вона повертає щось адекватніше (наприклад шлях до малюнка, що вже існує чи був завантажений, чи false, якщо щось не так).
Про оптимізацію вже сказали - це ЖАХ.

Подякували: yarko, mike2

27

Re: Порівняти зображення

Ну і при будь-якому хешуванні слід пам'ятати, що хеш - то засіб знаходити різні значення. А однакові треба перевіряти "в лоба", хоча, звісно, спосіб пана yarko значно швидший - якщо читати файли кластерами (512-4096 байт).

28

Re: Порівняти зображення

Щось типу такого

$imageGet = $DB->real_escape_string(file_get_contents($_FILES['filename']['tmp_name']));
$get_contents = $DB->query("SELECT * FROM images WHERE get_contents = '$imageGet' LIMIT 1");
if($get_contents->fetch_row() > 0)
{
$get_query = $DB->query("SELECT * FROM images WHERE get_contents = '$imageGet' LIMIT 1");
$get = $get_query->fetch_assoc();
//виводимо інфу про вже існуючий файл
}
else
{
//завантажуємо та пишемо його контент в бд
}

29

Re: Порівняти зображення

koala написав:

Ну і при будь-якому хешуванні слід пам'ятати, що хеш - то засіб знаходити різні значення. А однакові треба перевіряти "в лоба", хоча, звісно, спосіб пана yarko значно швидший - якщо читати файли кластерами (512-4096 байт).

Чому в лоба? Достатньо буде перевірити один такий кластер.

30

Re: Порівняти зображення

koala написав:

Це жах...
Розставте відступи, ваш код читати боляче.
Дайте нормальну назву функції (findPictureByContent, наприклад).
Визначати глобальні константи в функції, яка має інше призначення - не найкраща ідея.
Виводити повідомлення, а тим більше робити exit в функції - теж не варто, хай вона повертає щось адекватніше (наприклад шлях до малюнка, що вже існує чи був завантажений, чи false, якщо щось не так).
Про оптимізацію вже сказали - це ЖАХ.

Справа не в цьому,я такий код зазвичай в народ не пускаю,я не ставив питання про оптимізацію. Чого нападаєте,не розумію.

31

Re: Порівняти зображення

я такий код зазвичай в народ не пускаю

Варто було б продовжувати.

32 Востаннє редагувалося 0xDADA11C7 (24.09.2014 13:20:01)

Re: Порівняти зображення

Ну з умови і було неявно сказано,шо потрібно створити велосипед).

Звичайно, що створення велосипедів для освітньої мети це добре, але у вас вийшло щось наподобі оцього:
http://piramida-ds.ru/published/publicdata/PIRAMBASE/attachments/SC/products_pictures/%D0%BA%D0%BE%D0%BD%D1%8C%20%D1%81%D0%BA%D0%B0%D0%BA45543b.jpg

Знаєте, дуже хотілося б подивитись на швидкість виконання, особливо коли на сервері вже є сотня схожих зображень по кілька мегабайтів.

при великій кількості підключень, буде суттєве навантаження на диск, цей код хоч і робочий, але... imho.

Насправді нині можна делегувати порівняння файлів файловій системі, яка знов-таки зробить це за допомогою геш функції. Але чи зможе компілятор зрозуміти що саме від нього хоче індус - складне питання.

Подякували: quez1

33

Re: Порівняти зображення

koala написав:

Це жах...
Розставте відступи, ваш код читати боляче.
Дайте нормальну назву функції (findPictureByContent, наприклад).
Визначати глобальні константи в функції, яка має інше призначення - не найкраща ідея.
Виводити повідомлення, а тим більше робити exit в функції - теж не варто, хай вона повертає щось адекватніше (наприклад шлях до малюнка, що вже існує чи був завантажений, чи false, якщо щось не так).
Про оптимізацію вже сказали - це ЖАХ.

lol,оце так пояснення,оце так критика. "повертає щось адекватніше"

34

Re: Порівняти зображення

quez написав:
koala написав:

Ну і при будь-якому хешуванні слід пам'ятати, що хеш - то засіб знаходити різні значення. А однакові треба перевіряти "в лоба", хоча, звісно, спосіб пана yarko значно швидший - якщо читати файли кластерами (512-4096 байт).

Чому в лоба? Достатньо буде перевірити один такий кластер.

Порівняйте так 2 bmp-файла 1024x768 із різними нижніми половинками.

Подякували: yarko1

35

Re: Порівняти зображення

VTrim написав:

lol,оце так пояснення,оце так критика. "повертає щось адекватніше"

Ну вибачте, я чомусь думав, що ви вже більше двох тижнів програмуванням займаєтеся.

36

Re: Порівняти зображення

koala написав:
quez написав:
koala написав:

Ну і при будь-якому хешуванні слід пам'ятати, що хеш - то засіб знаходити різні значення. А однакові треба перевіряти "в лоба", хоча, звісно, спосіб пана yarko значно швидший - якщо читати файли кластерами (512-4096 байт).

Чому в лоба? Достатньо буде перевірити один такий кластер.

Порівняйте так 2 bmp-файла 1024x768 із різними нижніми половинками.

У них різні хеші, до порівняння кластерів справа не доходить.

37

Re: Порівняти зображення

quez написав:

У них різні хеші, до порівняння кластерів справа не доходить.

В першому пості вказано не використовувати хешів

38

Re: Порівняти зображення

yarko написав:
quez написав:

У них різні хеші, до порівняння кластерів справа не доходить.

В першому пості вказано не використовувати хешів

koala написав:

Ну і при будь-якому хешуванні слід пам'ятати

39 Востаннє редагувалося VTrim (08.01.2015 11:10:12)

Re: Порівняти зображення

40 Востаннє редагувалося yarko (24.09.2014 14:23:08)

Re: Порівняти зображення

Хіба порівняти 2 файли на одинаковість вмісту є хешуванням?