Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Троды плудов - паспортизация графического файла.
 
 автор: DJ Paltus   (02.08.2005 в 20:53)   письмо автору
 
 

Вот, в результате получился такой скрипт, прикрепляю.

Скрипт берет миме-тип, графический размер и размер файла, составляет из них новое имя для картинки, после чего либо находит такую же, загруженную ранее, либо загружает картинку в хранилище, под новым именем, которое, собственно, и содержит в себе "отпечаток пальцев".

Без использования библиотек "php_exif" иже с ними, обошлось.

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

   
 
 автор: isset   (02.08.2005 в 21:04)   письмо автору
 
   для: 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();
:)

   
 
 автор: DJ Paltus   (02.08.2005 в 21:09)   письмо автору
 
   для: isset   (02.08.2005 в 21:04)
 

Вы тоже не поняли идею.
Ну к чему мне файл со случайным именем? оно нарочно сделано НЕслучайным! В идеале, оно должно быть вообще уникальным для каждого файла, но при загрузке ТАКОЙ ЖЕ картинки (а не файла с таким же именем) эта уникальность является защитой от одинаковых фотографий в альбоме.

   
 
 автор: Саня_   (02.08.2005 в 22:05)
 
   для: DJ Paltus   (02.08.2005 в 21:09)
 

А чем md5_file() не понравилась?
Генерирует уникальный отпечаток "пальцев" любого файла.

   
 
 автор: isset   (02.08.2005 в 22:23)   письмо автору
 
   для: Саня_   (02.08.2005 в 22:05)
 

Дольше работать с большими фотками будет

   
 
 автор: DJ Paltus   (02.08.2005 в 22:23)   письмо автору
 
   для: Саня_   (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:24)   письмо автору
 
   для: DJ Paltus   (02.08.2005 в 22:23)
 

а про функцию md5_file я просто не знал, если честно )))

   
 
 автор: [CHOL]Scorpion   (02.08.2005 в 22:34)   письмо автору
 
   для: DJ Paltus   (02.08.2005 в 22:24)
 

$size_img[0].$size_img[1].$size_fle.$type_fle


По идее не факт что одинаковые отпечатки будут только у идентичных файлов. Например, утрировано: 1024х768 картинка, половина красная, половина чёрная. И второй такойже файл, только половины поменяны местами. По идее, елси не вдаваться в вопросы кодирования графических изображений и рассуждатьлогически, или, елси хочешь, схематично, то данные файлов должны быть одинаковы ... А содержимое разное.

Тогда уж нада проверять ещё и несколько пикселей в разных местах картинки и результат тож в код отпечатков включать как-то. Тогда код станет более надёжным. Согласись, сделать картинки разные со скажем 5 одинаковыми пикселями раскидаными по изображению, будет оень сложно.

   
 
 автор: DJ Paltus   (02.08.2005 в 22:47)   письмо автору
 
   для: [CHOL]Scorpion   (02.08.2005 в 22:34)
 

Да я вот и думаю. Перелопатить файл в 70-150 килобайт - это сильно натрудит сервер, если речь идет о платном, но тем не менее популярном хостинге?

   
 
 автор: [CHOL]Scorpion   (02.08.2005 в 22:51)   письмо автору
 
   для: DJ Paltus   (02.08.2005 в 22:47)
 

Вот как раз елси о популярном речь, я бы проверял несколько пикселей, создавал из них контрольную сумму и записывал как часть отпечатков. 5 пикселей я думаю вполне хватило бы. И нагрузки на сервер почти никакой.

   
 
 автор: DJ Paltus   (02.08.2005 в 23:05)   письмо автору
 
   для: [CHOL]Scorpion   (02.08.2005 в 22:51)
 

как это механически-то осуществить?
думаю, следует взять длину файла, разделить на 6 (чтоб не лезть заголовок и концовку), и взять байты из конца каждого куска. То есть, имея файл длиной 6000 байт, мы берем 1000-й, 2000-й,..., 5000-й байты.
Какими бишь функциями мы тыкаемся в нужное смещение по файлу?

   
 
 автор: Akira   (02.08.2005 в 23:06)   письмо автору
 
   для: [CHOL]Scorpion   (02.08.2005 в 22:51)
 

Я бы использовал cr32() :) отличный отпечаток. или md5_file.

   
 
 автор: DJ Paltus   (02.08.2005 в 23:14)   письмо автору
 
   для: Akira   (02.08.2005 в 23:06)
 

насколько я понимаю, crc32 работает со строковыми данными, а вот md5_file, получается, реально обнуляет все мои усилия самим своим существованием :))
Я потестирую md5_file завтра дома, послезавтра доложу.

   
 
 автор: isset   (02.08.2005 в 23:16)   письмо автору
 
   для: DJ Paltus   (02.08.2005 в 23:14)
 

нет, crc32 применяется для файлов, но нужен он лишь для проверки не битости файла..

   
 
 автор: DJ Paltus   (02.08.2005 в 23:18)   письмо автору
 
   для: isset   (02.08.2005 в 23:16)
 

int crc32 ( string str)
Функция вычисляет контрольную сумму по алгоритму CRC32 для строки str. Это обычно используется для контроля правильности передачи данных.

Это я из ководства по пхп почерпнул...

   
 
 автор: isset   (02.08.2005 в 23:35)   письмо автору
 
   для: DJ Paltus   (02.08.2005 в 23:18)
 

Угу, правильно, для других это целей

   
 
 автор: Саня_   (03.08.2005 в 00:57)
 
   для: DJ Paltus   (02.08.2005 в 22:23)
 

> Весь трюк с переименовыванием файла сделан исключительно для
> скорости нахождения ранее загруженного "УТра"...
Мною проведены несколько опытов, в ходе которых два абсолютно одинаковых файла (в т. ч. и изображения), но с разными именами давали одинаковые хеш-коды.

> а про функцию md5_file я просто не знал, если честно )))
Для этого Вы и посещаете этот форум, чтобы узнавать :)

   
 
 автор: Duran   (03.08.2005 в 09:03)   письмо автору
 
   для: Саня_   (03.08.2005 в 00:57)
 

Вообщет теоретически конечно можно выловить 2 и более относительно похожих файла, но я предпочитаю эту задачи возлагать на imagedupeless. [url]www.imagedupeless.com/ru[/url] за 4 года лучше я не видел софта по поиску дублей :-). Кстати она ищет именно по содержимому, а не по размерам/плотности. Даже если на фото кто-то моргнул, а на др. нет - эти тоже найдутся !

   
 
 автор: DJ Paltus   (03.08.2005 в 14:12)   письмо автору
 
   для: Duran   (03.08.2005 в 09:03)
 

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

   
 
 автор: DJ Paltus   (04.08.2005 в 12:09)   письмо автору
 
   для: Саня_   (03.08.2005 в 00:57)
 

Почему-то функция md5_file возвращает мне пустую строку... С чего бы это?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования