|
|
|
| Вот, в результате получился такой скрипт, прикрепляю.
Скрипт берет миме-тип, графический размер и размер файла, составляет из них новое имя для картинки, после чего либо находит такую же, загруженную ранее, либо загружает картинку в хранилище, под новым именем, которое, собственно, и содержит в себе "отпечаток пальцев".
Без использования библиотек "php_exif" иже с ними, обошлось.
В качестве примочки для некрупных фотогалерей пойдет, а дальше надо думать ещЁ. Все же, есть небольшой шанс получить две картинки с одинаковым типом, размерами и объемом, но с разным содержанием. | |
|
|
|
|
|
|
|
для: DJ Paltus
(02.08.2005 в 20:53)
| | $fprint=$size_img[0].$size_img[1].$size_fle.$type_fle;
Заменить на:
$fprint=$size_img[0].$size_img[1].$size_fle.$type_fle.rand().time();
:) | |
|
|
|
|
|
|
|
для: isset
(02.08.2005 в 21:04)
| | Вы тоже не поняли идею.
Ну к чему мне файл со случайным именем? оно нарочно сделано НЕслучайным! В идеале, оно должно быть вообще уникальным для каждого файла, но при загрузке ТАКОЙ ЖЕ картинки (а не файла с таким же именем) эта уникальность является защитой от одинаковых фотографий в альбоме. | |
|
|
|
|
автор: Саня_ (02.08.2005 в 22:05) |
|
|
для: DJ Paltus
(02.08.2005 в 21:09)
| | А чем md5_file() не понравилась?
Генерирует уникальный отпечаток "пальцев" любого файла. | |
|
|
|
|
|
|
|
для: Саня_
(02.08.2005 в 22:05)
| | Дольше работать с большими фотками будет | |
|
|
|
|
|
|
|
для: Саня_
(02.08.2005 в 22:05)
| | Объясняю на пальцах!
Вот есть у тебя картинка - pic.jpg. На ней нарисовано "Утро в сосновом лесу" Шишкина. И вторая - utro.jpg. Та же картинка, но с другим именем.
Залил ты pic.jpg на сервер к себе, а за ним полное собрание Третьяковсеой галереи, Эрмитажа и частной коллекции дома Оппенгеймеров. А потом наткнулся на utro.jpg и, не глядя, заливаешь его туда же. Но у тебя там уже лежит репродукция "Утра в сосновом лесу", под именем pic.jpg. И у тебя получается, что в Третьяковке стало два Утра. Хотя картинки-то одинаковые, значит, у них равный размер файла, разрешение и миме-тип. Весь трюк с переименовыванием файла сделан исключительно для скорости нахождения ранее загруженного "УТра". Просто, загружая utro.jpg, скрипт присвоит ему такое же имя, какое давно-давно присвоил pic.jpg, а все потому, что файлы на самом деле одинаковые. И скрипт говорит тебе: "Саня! У нас уже есть репродукция бессмертного холста Шишкина 'Утро в сосновом лесу'! Зачем нам еще одна? Она же будет занимать место на сервере! Она не нужна нам, Саня!"
Вот, для чего этот скрипт! | |
|
|
|
|
|
|
|
для: DJ Paltus
(02.08.2005 в 22:23)
| | а про функцию md5_file я просто не знал, если честно ))) | |
|
|
|
|
|
|
|
для: DJ Paltus
(02.08.2005 в 22:24)
| | $size_img[0].$size_img[1].$size_fle.$type_fle
По идее не факт что одинаковые отпечатки будут только у идентичных файлов. Например, утрировано: 1024х768 картинка, половина красная, половина чёрная. И второй такойже файл, только половины поменяны местами. По идее, елси не вдаваться в вопросы кодирования графических изображений и рассуждатьлогически, или, елси хочешь, схематично, то данные файлов должны быть одинаковы ... А содержимое разное.
Тогда уж нада проверять ещё и несколько пикселей в разных местах картинки и результат тож в код отпечатков включать как-то. Тогда код станет более надёжным. Согласись, сделать картинки разные со скажем 5 одинаковыми пикселями раскидаными по изображению, будет оень сложно. | |
|
|
|
|
|
|
|
для: [CHOL]Scorpion
(02.08.2005 в 22:34)
| | Да я вот и думаю. Перелопатить файл в 70-150 килобайт - это сильно натрудит сервер, если речь идет о платном, но тем не менее популярном хостинге? | |
|
|
|
|
|
|
|
для: DJ Paltus
(02.08.2005 в 22:47)
| | Вот как раз елси о популярном речь, я бы проверял несколько пикселей, создавал из них контрольную сумму и записывал как часть отпечатков. 5 пикселей я думаю вполне хватило бы. И нагрузки на сервер почти никакой. | |
|
|
|
|
|
|
|
для: [CHOL]Scorpion
(02.08.2005 в 22:51)
| | как это механически-то осуществить?
думаю, следует взять длину файла, разделить на 6 (чтоб не лезть заголовок и концовку), и взять байты из конца каждого куска. То есть, имея файл длиной 6000 байт, мы берем 1000-й, 2000-й,..., 5000-й байты.
Какими бишь функциями мы тыкаемся в нужное смещение по файлу? | |
|
|
|
|
|
|
|
для: [CHOL]Scorpion
(02.08.2005 в 22:51)
| | Я бы использовал cr32() :) отличный отпечаток. или md5_file. | |
|
|
|
|
|
|
|
для: Akira
(02.08.2005 в 23:06)
| | насколько я понимаю, crc32 работает со строковыми данными, а вот md5_file, получается, реально обнуляет все мои усилия самим своим существованием :))
Я потестирую md5_file завтра дома, послезавтра доложу. | |
|
|
|
|
|
|
|
для: DJ Paltus
(02.08.2005 в 23:14)
| | нет, crc32 применяется для файлов, но нужен он лишь для проверки не битости файла.. | |
|
|
|
|
|
|
|
для: isset
(02.08.2005 в 23:16)
| | int crc32 ( string str)
Функция вычисляет контрольную сумму по алгоритму CRC32 для строки str. Это обычно используется для контроля правильности передачи данных.
Это я из ководства по пхп почерпнул... | |
|
|
|
|
|
|
|
для: DJ Paltus
(02.08.2005 в 23:18)
| | Угу, правильно, для других это целей | |
|
|
|
|
автор: Саня_ (03.08.2005 в 00:57) |
|
|
для: DJ Paltus
(02.08.2005 в 22:23)
| | > Весь трюк с переименовыванием файла сделан исключительно для
> скорости нахождения ранее загруженного "УТра"...
Мною проведены несколько опытов, в ходе которых два абсолютно одинаковых файла (в т. ч. и изображения), но с разными именами давали одинаковые хеш-коды.
> а про функцию md5_file я просто не знал, если честно )))
Для этого Вы и посещаете этот форум, чтобы узнавать :) | |
|
|
|
|
|
|
|
для: Саня_
(03.08.2005 в 00:57)
| | Вообщет теоретически конечно можно выловить 2 и более относительно похожих файла, но я предпочитаю эту задачи возлагать на imagedupeless. [url]www.imagedupeless.com/ru[/url] за 4 года лучше я не видел софта по поиску дублей :-). Кстати она ищет именно по содержимому, а не по размерам/плотности. Даже если на фото кто-то моргнул, а на др. нет - эти тоже найдутся ! | |
|
|
|
|
|
|
|
для: Duran
(03.08.2005 в 09:03)
| | Указанная софтина является, насколько я понял, приложением винды, и работать на сервере не станет, а уж тем более участвовать в обработке загруженных картинок. Просто полезняк для дома, для семьи. | |
|
|
|
|
|
|
|
для: Саня_
(03.08.2005 в 00:57)
| | Почему-то функция md5_file возвращает мне пустую строку... С чего бы это? | |
|
|
|