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

Форум PHP

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

 

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

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

тема: Вытащить дату из цифровой фотографии средствами PHP
 
 автор: special_   (06.09.2005 в 00:17)
 
 

Доброго времени суток ув. Дизайнер!
Я знаю, Вы можете все и теперь вопрос(просьба) ....
Есть простая фотография, каждое фото хранит в себе (дискрипшн) - тоесть дату создания его на цифровом фотоапарате, не могули бы Вы подсказать, как средствами PHP - вытащить эту дату из фото..
Жду вашего ответа с нетепрением!!!

   
 
 автор: cheops   (06.09.2005 в 00:47)   письмо автору
 
   для: special_   (06.09.2005 в 00:17)
 

Можно наверное извратится на GDLib и заняться распознаванием образов, тем более задача максимально упрощена - дата всегда находится в нижнем углу - но уж больно геморройная задача - не дешевле перебить вручную дату или нанять человека за скромное вознаграждение?

   
 
 автор: isset   (06.09.2005 в 01:01)   письмо автору
 
   для: special_   (06.09.2005 в 00:17)
 

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

   
 
 автор: isset   (06.09.2005 в 01:04)   письмо автору
 
   для: isset   (06.09.2005 в 01:01)
 

Попробуйте открыть фотографию в блокноте, там в первых же строках будет дата снимка

   
 
 автор: special_   (06.09.2005 в 01:06)
 
   для: isset   (06.09.2005 в 01:01)
 

isset
Именно это и надо !!!
cheops
Есть фото, на котором нету надписи с датой... Говорят что можно вытащить ? Или это очень редкий вопрос? Так давайте его дружным колективом все решим!

   
 
 автор: cheops   (06.09.2005 в 01:15)   письмо автору
 
   для: special_   (06.09.2005 в 01:06)
 

А, если там в начале фотографии есть какая-то информация давайте её сюда - это меняет дело - с этим можно повозится - она в двоичной форме или текстовой?

   
 
 автор: cheops   (06.09.2005 в 01:21)   письмо автору
 
   для: cheops   (06.09.2005 в 01:15)
 

Всё нашёл... а у вас фотоаппарат какой?

   
 
 автор: _isset   (06.09.2005 в 01:29)
 
   для: cheops   (06.09.2005 в 01:21)
 

Не в фотоаппарате дело. нужно найти описание цифровых фотографий

   
 
 автор: cheops   (06.09.2005 в 01:36)   письмо автору
 
   для: _isset   (06.09.2005 в 01:29)
 

Вообще-то даже оно не нужно - там же одни двоичные данные, а дата в текстовом, поэтому простейшее регулярное выражение на дату срабатывает на ура, по крайней мере на тех образцах, что у меня под рукой
<?php 
  
// Извлекаем содержимое файла
  
$filename 'PICT0018.JPG';
  
$content file_get_contents($filename);
  
// Извлекаем дату
  
preg_match('|([\d]{4}:[\d]{2}:[\d]{2} [\d]{2}:[\d]{2}:[\d]{2})|i',$content,$out);
  echo 
$out[0];
?>

   
 
 автор: isset   (06.09.2005 в 01:41)   письмо автору
 
   для: cheops   (06.09.2005 в 01:36)
 

Не думаю что это лучше, в своих образцах я нашел несколько разных дат, видимо одна из них дата редактирования, а вот третья не знаю, но она такая же как и дата создания...

   
 
 автор: isset   (06.09.2005 в 01:36)   письмо автору
 
   для: _isset   (06.09.2005 в 01:29)
 

Нашел, http://www.ozhiker.com/electronics/pjmt/index.html

Скачать можно тут: http://www.ozhiker.com/electronics/pjmt/PHP_JPEG_Metadata_Toolkit_1.11.zip

Поддерживаются следующие марки фотоаппаратов:
Agfa, Canon, Casio, Contax, Epson, Fujifilm, Konica, Minolta, Kyocera, Nikon, Olympus, Panasonic, Pentax (Asahi), Ricoh и Sony

   
 
 автор: isset   (06.09.2005 в 01:39)   письмо автору
 
   для: isset   (06.09.2005 в 01:36)
 

PS: Протестил, все работает, не думал что можно извлечь столько информации из обычной фотографии :-)

   
 
 автор: special_   (06.09.2005 в 09:38)
 
   для: isset   (06.09.2005 в 01:39)
 

А у меня не получилось протестить :((
Как Вы запускали скрипт ?

   
 
 автор: isset   (06.09.2005 в 16:07)   письмо автору
 
   для: special_   (06.09.2005 в 09:38)
 

После распаковки вы найдете в корне скрипта файл Example.php
найдите там:

 <?php
                        
// Turn off Error Reporting
                        
error_reporting );


и после добавьте:

$GLOBALS['HTTP_GET_VARS']['jpeg_fname'] = "путь/до/файла.jpg";

теперь можно запустить example.php из браузера

   
 
 автор: isset   (06.09.2005 в 16:20)   письмо автору
 
   для: special_   (06.09.2005 в 09:38)
 


<?php
$filename 
"c:/photo.jpg";
error_reporting );
$Toolkit_Dir "./";   
$GLOBALS['HIDE_UNKNOWN_TAGS'] = TRUE;
include 
$Toolkit_Dir 'Toolkit_Version.php';
include 
$Toolkit_Dir 'JPEG.php';  
include 
$Toolkit_Dir 'JFIF.php';
include 
$Toolkit_Dir 'PictureInfo.php';
include 
$Toolkit_Dir 'XMP.php';
include 
$Toolkit_Dir 'Photoshop_IRB.php';
include 
$Toolkit_Dir 'EXIF.php';
$info get_EXIF_JPEG$filename ); 
echo 
$info[0][34665][Data][0][36867][Data][0]; 
?>

Вот подчищенный пример, но нет гарантии что он прочитает всё правильно :-(

   
 
 автор: glsv (Дизайнер)   (06.09.2005 в 05:08)   письмо автору
 
   для: special_   (06.09.2005 в 00:17)
 

>Жду вашего ответа с нетепрением!!!
По моему, я уже не нужен :)

   
 
 автор: special_   (07.09.2005 в 00:11)
 
   для: glsv (Дизайнер)   (06.09.2005 в 05:08)
 

Ну отлично, с этим разобрались..
Теперь точно нужна помощь дизайнера:
Вообщем надо полученную дату, записать на фото внизу справа, белым шрифтом. Поможете дизайнер ?

   
 
 автор: glsv (Дизайнер)   (07.09.2005 в 04:11)   письмо автору
 
   для: special_   (07.09.2005 в 00:11)
 

Посмотрите тему по ссылке
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=787&page=1
Будут вопросы - спрашивайте.

   
 
 автор: special_   (07.09.2005 в 14:11)
 
   для: glsv (Дизайнер)   (07.09.2005 в 04:11)
 

Вот в атаче прикрепил архивчик скриптов...
Самый главный - index.php - читает дату из картинки и пишет на ней эту самую дату, остальные - дополнительные модули, с ними все нормально, они нужны лишь для того, что-бы вытащить дату.
Посмотрите пожалуйста файл index.php - что я не так делаю ?

   
 
 автор: special_   (08.09.2005 в 20:01)
 
   для: special_   (07.09.2005 в 14:11)
 

Ну что? Кто-нибудь возмется ?

   
 
 автор: sos   (15.09.2005 в 16:30)
 
   для: special_   (08.09.2005 в 20:01)
 

sory

   
 
 автор: glsv (Дизайнер)   (09.09.2005 в 06:29)   письмо автору
 
   для: special_   (07.09.2005 в 14:11)
 

У вас переменная $dats пустая.
У меня дату получилось добыть вот такой строкой

<?
$dats 
$info[0][306]["Data"][0];
?>

Далее все так-же.
Только в конце уберите вывод даты

echo "$dats";

Он все равно не отображается.
А используемый шрифт arbat.ttf у вас лежит в папке с кодом?

   
 
 автор: special_   (09.09.2005 в 10:56)
 
   для: glsv (Дизайнер)   (09.09.2005 в 06:29)
 

Вот мой код:

<?php 
$filename 
"win.jpg"
error_reporting ); 
$Toolkit_Dir "./";    
$GLOBALS['HIDE_UNKNOWN_TAGS'] = TRUE
include 
$Toolkit_Dir 'Toolkit_Version.php'
include 
$Toolkit_Dir 'JPEG.php';   
include 
$Toolkit_Dir 'JFIF.php'
include 
$Toolkit_Dir 'PictureInfo.php'
include 
$Toolkit_Dir 'XMP.php'
include 
$Toolkit_Dir 'Photoshop_IRB.php'
include 
$Toolkit_Dir 'EXIF.php'
$info get_EXIF_JPEG$filename ); 
$dats $info[0][306]["Data"][0];


// В переменной $imagefile содержится имя файла с изображением 
  // Если эта переменная пуста, то останавливаем выполнение скрипта 
$imagefile $filename;

  
// Определяем расширение 
  // и в зависимости от него вызываем функции создания изображений из файлов 
  
$path_parts pathinfo($imagefile); 
  
$ext $path_parts["extension"]; 
  switch (
$ext
  { 
    case 
"jpg"
      
$img imagecreatefromjpeg($imagefile); 
      break; 
    case 
"gif"
      
$img imagecreatefromgif($imagefile);       
      break; 
    default: 
      echo 
"Неизвестное расширение файла"
      exit(); 
  }         
   
  
// Если изображение создано   
  
if ($img
  { 
    
// Назначаем цвет 
    
$color imagecolorallocatealpha($img0255050); 
    
// Пишем текст поверх изображения 
    
$box imagettftext($img50010150$color"arial.ttf""$dats"); 
    
// Выводим изображение в браузер 
    
switch ($ext
    { 
      case 
"jpg"
        
header("Content-type: " .image_type_to_mime_type(IMAGETYPE_JPEG)); 
        
imagejpeg($img);       
        break; 
      case 
"gif"
        
header("Content-type: " .image_type_to_mime_type(IMAGETYPE_GIF)); 
        
imagegif($img); 
        break; 
      default: 
        echo 
"Неизвестное расширение файла"
        exit(); 
    }             
  } 



?> 

Залил шрифт: arial.ttf в папку, где лежит код. Пробовал ставить chmod 777 на картинки, всеравно не пишет (

   
 
 автор: glsv (Дизайнер)   (10.09.2005 в 06:15)   письмо автору
 
   для: special_   (09.09.2005 в 10:56)
 

Скопировал ваш код без изменений - работает.
Выводит просто картинку без подписи? Или вообще не выводит?
Проверьте все таки есть ли дата

<?
$dats 
$info[0][306]["Data"][0];
echo 
$dats;
exit();
?>

   
 
 автор: special_   (10.09.2005 в 15:07)
 
   для: glsv (Дизайнер)   (10.09.2005 в 06:15)
 

Дата хранится в переменной, все нормальноя проверил.
Но писаться поверх картинки не хочет ((

   
 
 автор: special_   (13.09.2005 в 00:12)
 
   для: special_   (10.09.2005 в 15:07)
 

Помогите пожалуйста дизайнер

   
 
 автор: glsv (Дизайнер)   (13.09.2005 в 08:03)   письмо автору
 
   для: special_   (13.09.2005 в 00:12)
 

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

   
 
 автор: special_   (13.09.2005 в 11:49)
 
   для: glsv (Дизайнер)   (13.09.2005 в 08:03)
 

Поменял и все по проежнему. Скажите а у Вас скрипт пишет дату по фотографии?

   
 
 автор: napTu3aH   (13.09.2005 в 12:26)   письмо автору
 
   для: glsv (Дизайнер)   (13.09.2005 в 08:03)
 

Осмелюсь предположить, что дело в фотографиях. Если фотографии без обработки сразу с цифрового фотоаппарата, то в нем 95% должна быть дата, в самом файле.
После обработки и сохранения, этой даты, а также информации о фотоаппарате может и не быть. Вы можете легко это проверить открыв графические файлы разных форматов в ACDSee и посмотрев инфо о файле.

   
 
 автор: glsv (Дизайнер)   (13.09.2005 в 12:28)
 
   для: napTu3aH   (13.09.2005 в 12:26)
 

special_ говорит, что дата есть при выводе ее просто на экран с помощью echo

   
 
 автор: napTu3aH   (13.09.2005 в 12:31)   письмо автору
 
   для: glsv (Дизайнер)   (13.09.2005 в 12:28)
 

а библиотека для работы с графикой?

   
 
 автор: special_   (13.09.2005 в 16:18)
 
   для: napTu3aH   (13.09.2005 в 12:31)
 

gd2
Все нормально, с картинками раньше работал, ставил фотогалерею

   
 
 автор: special_   (14.09.2005 в 18:03)
 
   для: special_   (13.09.2005 в 16:18)
 

НУ что ребята ?

   
 
 автор: glsv (Дизайнер)   (15.09.2005 в 07:33)   письмо автору
 
   для: special_   (14.09.2005 в 18:03)
 

Видимо тупик.
Вот так тоже не работает?

 $box = imagettftext($img, 50, 0, 10, 150, $color, "arial.ttf", "Текст");

И закомментарьте строку

<?
// error_reporting ( 0 );
?>

Может все таки ошибка где проскакивает.
Шрифт пробовали менять на другой?

>Скажите а у Вас скрипт пишет дату по фотографии?
Да, правда даты не совсем правильные, но пишет. В левом верхнем углу.

   
 
 автор: special_   (15.09.2005 в 12:34)
 
   для: glsv (Дизайнер)   (15.09.2005 в 07:33)
 

Нет! Не пишет

   
 
 автор: sos   (15.09.2005 в 16:28)
 
   для: special_   (14.09.2005 в 18:03)
 

proverka

   
Rambler's Top100
вверх

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