Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Задание по работе с графикой

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: PHP скрипт для локального использования
Brat
Отправлено: 18 Августа, 2011 - 22:22:09
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




Доброе время суток всем!

Мне на работе поставили задачу научиться как и написать скрип по работе с изображениями на PHP выполняющий следующие требования:
    1) необходимо на изображениях разместить watermark`и (перманентно) ввиде текста;
    2) необходимо использовать изображения находящиеся в каталоге на локальном компьютере, задача усложняется еще за счет того, что искать изображение надо и в подпапках;
    3) надо проверять разрешение (размер) изображения, чтобы не ставить watermark`и на мелких.
    4) изображения будут попадаться как в jpg так и в gif с png


Я как верстальщик не знаю с чего начать. Я читаю сейчас про GD, но не знаю что читать по задаче №2, №3 и №4.

Подскажите что мне требуеться знать и читать, чтобы выполнить поставленную передомною задачу?

Заранее благодарен!
 
 Top
White
Отправлено: 18 Августа, 2011 - 22:32:16
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




2) glob(), scandir() на выбор, чтобы смотреть вложенные, обойти рекурсией
3) это тоже GD
4) gd работает со всеми этими форматами


-----
if(time()>1356048000) die();
 
 Top
Brat
Отправлено: 18 Августа, 2011 - 22:37:06
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




White пишет:
2) glob(), scandir() на выбор, чтобы смотреть вложенные, обойти рекурсией
3) это тоже GD
4) gd работает со всеми этими форматами

Благодарю за ответ и за столь быстрый ответ!
 
 Top
illy
Отправлено: 19 Августа, 2011 - 18:07:36
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




Состряпал почти готовый скрипт.
Дальше сами разберётесь.
Цитата:
Сори за фтопик Ха-ха в скрипте не тот путь поставил и на всех моих фотках надпись и водняной знак Ха-ха

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $document_root = 'Photo/';//каталог для сканирования
  3. // ИСКАТЬ ФОТО С ШИРИНОЙ И ВЫСОТОЙ БОЛЬШЕ ИЛИ РАВНЫЕ:
  4. $w=40; // ШИРИНА В ПИКСЕЛЯХ
  5. $h=30; // ВЫСОТА В ПИКСЕЛЯХ
  6.  
  7. function water_mark($file){
  8. $size = 14; // РАЗМЕР ШРИФТА
  9. $font = "tahoma.ttf"; // ПУТЬ К ШРИФТАМ
  10. $color='0xc00000'; // ЦВЕТ ТЕКСТА
  11. $angle='0'; // НАКЛОН ТЕКСТА В ГРАДУСАХ
  12. $t='Hello, world!!!'; // Текст на фото
  13. $q=90; // КАЧЕСТВО JPEG ФОТО ПОСЛЕ НАЛОЖЕНИЯ ЗНАКА
  14. $f='photo.png'; // ПУТЬ К ФОТКЕ ВОДЯНОГО ЗНАКА
  15.  
  16. $z=getimagesize($file);
  17.  
  18. if($z[2]=='1'){ $p=ImageCreateFromgif($file); }
  19. if($z[2]=='2'){ $p=ImageCreateFromjpeg($file); }
  20. if($z[2]=='3'){ $p=ImageCreateFrompng($file); }
  21. $d=imagecreatetruecolor($z[0],$z[1]);
  22. imagefill($d,0,0,0xffffff);
  23. imagecopyresampled($d,$p,0,0,0,0,$z[0],$z[1],$z[0],$z[1]);
  24. $m=getimagesize($f);
  25. imagecopyresampled($d,$wm,($z[0]-$m[0])/2,$z[1]-$m[1],0,0,$m[0],$m[1],$m[0],$m[1]);
  26. imagettftext($d,$size,$angle,0,$z[1]-30,$color,$font,$t);
  27. if($z[2]=='1'){ imagegif($d,$file); }
  28. if($z[2]=='2'){ imagejpeg($d,$file, 90); }
  29. if($z[2]=='3'){ imagepng($d,$file); }
  30.  
  31. }
  32.  
  33. $structure = read_all_files($document_root,$w,$h);
  34.  
  35. foreach ($structure['files'] as $file){
  36. echo $file."<br>";
  37. }
  38.  
  39. echo "<br>Всё что нашёл";
  40.  
  41. function read_all_files($root = '.',$w,$h){
  42. $files = array('files'=>array(), 'dirs'=>array());
  43. $directories = array();
  44. $last_letter = $root[strlen($root)-1];
  45. $root = ($last_letter == '\\' || $last_letter == '/') ? $root : $root.DIRECTORY_SEPARATOR;
  46.  
  47. $directories[] = $root;
  48.  
  49. while (sizeof($directories)) {
  50. $dir = array_pop($directories);
  51. if ($handle = opendir($dir)) {
  52. while (false !== ($file = readdir($handle))) {
  53. if ($file == '.' || $file == '..') {
  54. continue;
  55. }
  56. $file = $dir.$file;
  57. if (is_dir($file)) {
  58. $directory_path = $file.DIRECTORY_SEPARATOR;
  59. array_push($directories, $directory_path);
  60. $files['dirs'][] = $directory_path;
  61. } elseif (is_file($file) && preg_match('#.(jpg|gif|png)$#i',$file)) {
  62. $z=getimagesize($file);
  63. if($z[0]>=$w && $z[1]>=$h){
  64. water_mark($file);
  65. $files['files'][] = $file;
  66. }
  67. }
  68. }
  69. closedir($handle);
  70. }
  71. }
  72.  
  73. return $files;
  74. }
  75. ?>
  76.  

(Отредактировано автором: 19 Августа, 2011 - 20:05:47)



-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
Brat
Отправлено: 20 Августа, 2011 - 12:18:50
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




illy пишет:
Состряпал почти готовый скрипт.
Дальше сами разберётесь.


Огромное спасибо за помощь и уделенное время!!! Сейчас буду разбирать по кусочкам Улыбка

(Отредактировано автором: 20 Августа, 2011 - 12:19:06)

 
 Top
illy
Отправлено: 20 Августа, 2011 - 12:29:56
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




Brat пишет:
Огромное спасибо за помощь и уделенное время!!! Сейчас буду разбирать по кусочкам

Прост легче дать готовый скрипт чем направлять куда-то почитать там чёто чтоб возникло ещё больше вопросов Ха-ха
И кстати можно накладывать прозрачное фото водяного знака
Вот тебе с комментариями и небольшим исправлением:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $document_root = 'Photo/';//каталог для сканирования
  3. // ИСКАТЬ ФОТО С ШИРИНОЙ И ВЫСОТОЙ БОЛЬШЕ ИЛИ РАВНЫЕ:
  4. $w=40; // ШИРИНА В ПИКСЕЛЯХ
  5. $h=30; // ВЫСОТА В ПИКСЕЛЯХ
  6.  
  7. function water_mark($file){
  8. $size = 14; // РАЗМЕР ШРИФТА
  9. $font = "tahoma.ttf"; // ПУТЬ К ШРИФТАМ
  10. $color='0xc00000'; // ЦВЕТ ТЕКСТА
  11. $angle='0'; // НАКЛОН ТЕКСТА В ГРАДУСАХ
  12. $t='Hello, world!!!'; // Текст на фото на английском. Для русского нужно использовать ttf шрифты
  13. $q=90; // КАЧЕСТВО JPEG ФОТО ПОСЛЕ НАЛОЖЕНИЯ ЗНАКА
  14. $f='photo.gif'; // ПУТЬ К ФОТКЕ ВОДЯНОГО ЗНАКА
  15. // ВЗЯТЬ ДАННЫЕ ФОТО
  16. $z=getimagesize($file);
  17. // ЕСЛИ 2-ЫЕ ДАННЫЕ 1,2,3 ТО СОЗДАТЬ ФОТКУ GIF JPG PNG
  18. if($z[2]=='1'){ $p=ImageCreateFromgif($file); }
  19. if($z[2]=='2'){ $p=ImageCreateFromjpeg($file); }
  20. if($z[2]=='3'){ $p=ImageCreateFrompng($file); }
  21. // ВЗЯТЬ ДАННЫЕ ФОТО ВОДЯНОГО ЗНАКА
  22. $m=getimagesize($f);
  23. // ЕСЛИ 2-ЫЕ ДАННЫЕ 1,2,3 ТО СОЗДАТЬ ФОТКУ GIF JPG PNG
  24. if($m[2]=='1'){ $wm=ImageCreateFromgif($f); }
  25. if($m[2]=='2'){ $wm=ImageCreateFromjpeg($f); }
  26. if($m[2]=='3'){ $wm=ImageCreateFrompng($f); }
  27. // СОЗДАЁМ РАБОЧЕЕ ПОЛЕ РАЗМЕРАМИ ФОТО $file. $z[0] ширина $z[1] высота
  28. $d=imagecreatetruecolor($z[0],$z[1]);
  29. // ДОБАВЛЯЕМ БЕЛЫЙ ФОН
  30. imagefill($d,0,0,0xffffff);
  31. // КОПИРУЕМ НА РАБОЧЕЕ ПОЛЕ НАШУ ФОТКУ
  32. imagecopyresampled($d,$p,0,0,0,0,$z[0],$z[1],$z[0],$z[1]);
  33. // КОПИРУЕМ ЕЩЁ ВОДЯНОЕ ФОТО В САМЫЙ НИЗ ПО СЕРЕДИНЕ
  34. imagecopyresampled($d,$wm,($z[0]-$m[0])/2,$z[1]-$m[1],0,0,$m[0],$m[1],$m[0],$m[1]);
  35. // ПИШЕМ НАШ ТЕКСТ ВНИЗУ
  36. imagettftext($d,$size,$angle,0,$z[1]-30,$color,$font,$t);
  37. // СОХРАНЯЕМ ФОТКУ ПОД ЕЁ ЖЕ ФОРМАТОМ. ЕСЛИ JPG, ТО ДОБАВЛЯЕМ КАЧЕСТВО
  38. if($z[2]=='1'){ imagegif($d,$file); }
  39. if($z[2]=='2'){ imagejpeg($d,$file, $q); }
  40. if($z[2]=='3'){ imagepng($d,$file); }
  41. // УДАЛЯЕМ МУСОР
  42. }
  43. // ФУНКЦИЯ ПОИСКА ФОТО ВЕЗДЕ
  44. function read_all_files($root = '.',$w,$h){
  45. $files = array('files'=>array(), 'dirs'=>array());
  46. $directories = array();
  47. $last_letter = $root[strlen($root)-1];
  48. $root = ($last_letter == '\\' || $last_letter == '/') ? $root : $root.DIRECTORY_SEPARATOR;
  49.  
  50. $directories[] = $root;
  51.  
  52. while (sizeof($directories)) {
  53. $dir = array_pop($directories);
  54. if ($handle = opendir($dir)) {
  55. while (false !== ($file = readdir($handle))) {
  56. if ($file == '.' || $file == '..') {
  57. continue;
  58. }
  59. $file = $dir.$file;
  60. if (is_dir($file)) {
  61. $directory_path = $file.DIRECTORY_SEPARATOR;
  62. array_push($directories, $directory_path);
  63. $files['dirs'][] = $directory_path;
  64. }
  65. // ЕСЛИ ФАЙЛ ФОРМАТА jpg,gif,png ТО ПРОВЕРИТЬ ЕГО РАЗМЕР
  66. elseif (is_file($file) && preg_match('#.(jpg|gif|png)$#i',$file)) {
  67. $z=getimagesize($file);
  68. // ПРОВЕРЯЕМ ШИРИНУ, ВЫСОТУ
  69. if($z[0]>=$w && $z[1]>=$h){
  70. // ВСЁ ОК ЗНАЧИТ НАЧИНАЕМ НАКЛАДЫВАТЬ ЗНАКИ
  71. water_mark($file);
  72. // И ДОБАВЛЯЕМ В СПИСО НАЙДЕНОЕ ФОТО
  73. $files['files'][] = $file;
  74. }
  75. }
  76. }
  77. closedir($handle);
  78. }
  79. }
  80. return $files;
  81. }
  82. // НАЧАТЬ ПОИСК
  83. $structure=read_all_files($document_root,$w,$h);
  84. // ВЫВЕСТИ НАЙДЕНЫЕ ФОТО
  85. foreach ($structure['files'] as $file){
  86. echo $file."<br>";
  87. }
  88. // КОНЕЦ
  89. echo "<br>Всё что нашёл";
  90. ?>

(Отредактировано автором: 20 Августа, 2011 - 12:53:45)



-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
Brat
Отправлено: 22 Августа, 2011 - 14:24:35
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




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

Большое спасибо всем за помощь!
 
 Top
illy
Отправлено: 22 Августа, 2011 - 15:17:28
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


Помог: 28 раз(а)




Служу Российской Федерации Хорошо


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Графика в PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB