Компонент демотиваторов

Создание компонента демотиваторов на базе скрипта

#16 13 ноября 2011 в 17:01
fact Спасибо за оценку! Но к сожалению это не мои заслуги.
А демотиваторам я сразу нашел ему применение, мне будет очень кстати для одной задумки на сайте, но мне еще нужен будет слайдер фото, чтоб он брал фото из папки демотиваторов.
#17 14 ноября 2011 в 12:24
получилось?
#18 14 ноября 2011 в 22:56


Попробовал прикрутить скрипт к галерее.
Пока получилось так — cms-i.ru/photos/1036
Логин и пароль — tester

Когда придумаю как реализовать кнопку "Демотивировать", опишу решение

Max
Во, классно! Останется сделать свой tpl для данного альбома — и будет полноценный демотиватора альбом!
А я все даже и не брался :(
Касательно кнопки — прикручиваете условие и направляете в другой шаблон
#19 14 ноября 2011 в 23:28
Хотел было описать в блоге, но сейчас нет времени на оформление...
поэтому по-быстрому тут напишу.


1) Из архива catsiteuvsr.stu.ru/dm/root_dm.zip, берем копируем в корень сайта 2 файла шрифтов и dm.php



2) В файле dm.php первой строкой на всякий случай пишем
  1. if(!defined('VALID_CMS')) { die('ACCESS DENIED'); }
а вместо строки
  1. ImageJpeg($img2);
пишем
  1. ImageJpeg($img2,$image,80);


3) В файле /components/photos/model.php
после
  1. $this->deletePhotoFile($photo_file, $uploaddir);
вставить
  1. if ($album['title']=='Демотиваторы'){
  2. include ("dm.php");
  3. demotivator($uploadphoto,$_SESSION['icms']['mod']['title'],$_SESSION['icms']['mod']['description'],"instantcms.ru");}


4) Файл /templates/ШАБЛОН/components/com_photos_add1.tpl
Вместо
  1. <tr>
  2. <td colspan="2" valign="top">
  3. <input id="only_mod" name="only_mod" type="checkbox" value="1" onclick="mod_text()" /> <label for="only_mod">{$LANG.ADD_MULTY}</label></td>
  4. </tr>
  5.  
Вставить
  1. {if $album.title != 'Демотиваторы'}
  2. <tr>
  3. <td colspan="2" valign="top">
  4. <input id="only_mod" name="only_mod" type="checkbox" value="1" onclick="mod_text()" /> <label for="only_mod">{$LANG.ADD_MULTY}</label></td>
  5. </tr>
  6. {/if}
  7.  


5) Файл /templates/ШАБЛОН/components/com_photos_view.tpl
Вместо
  1. <a class="photo_add_link" href="/photos/{$album.id}/addphoto.html">{$LANG.ADD_PHOTO_TO_ALBUM}</a>
Вставить
  1. {if $pagetitle == 'Демотиваторы'}
  2. <a class="photo_add_link" href="/photos/{$album.id}/addphoto.html">Создать демотиватор</a>
  3. {else}
  4. <a class="photo_add_link" href="/photos/{$album.id}/addphoto.html">{$LANG.ADD_PHOTO_TO_ALBUM}</a>
  5. {/if}
  6.  

Вроде все…
#20 14 ноября 2011 в 23:34

Касательно кнопки — прикручиваете условие и направляете в другой шаблон

catsite
Кнопку "Демотивировать" я пока не делал — совершенно нет времени. К томуже с ней всё не так просто…
#21 15 ноября 2011 в 01:30
У кого нибудь получилось? Чет у меня вообще не хочет работать…
#22 15 ноября 2011 в 01:59
Пункт 1 и пункт 2 заменить на этот пункт:
В файл /includes/graphic.inc.php вставить следующее:
[hide]развернуть
  1.  
  2. // =========================================================================
  3. function demotivator($image, $slogan1, $slogan2, $copyright) {
  4.  
  5. // преобразование win в utf
  6. $slogan1 = dm_win2utf($slogan1);
  7. $slogan2 = dm_win2utf($slogan2);
  8. $copyright = dm_win2utf($copyright);
  9.  
  10.  
  11. $ext = getimagesize($image);
  12.  
  13.  
  14. // Открываем изображение
  15. switch($ext[2]) {
  16.  
  17. case 2: {$img = ImageCreateFromJPEG($image); break;}
  18. case 1: {$img = ImageCreateFromGIF($image); break; }
  19. case 3: {$img = ImageCreateFromPNG($image); break;}
  20. case 6: {$img = ImageCreateFromBMP($image); break;}
  21. default : {
  22. unlink ($image);
  23. return 2;
  24. }
  25.  
  26. }
  27.  
  28.  
  29.  
  30. // Получение размеров изображения
  31. $x = ImageSX($img); // X
  32. $y = ImageSY($img); // Y
  33.  
  34.  
  35. // Размер черного прямоугольника, который будем рисовать
  36. $tx = $x * 0.1;
  37. $ty = $x * 0.1;
  38.  
  39. $bx = $x + $tx;
  40. $by = $y + $ty;
  41.  
  42. $dx= $x * 0.01; // Смещение. Необходимо для рисования рамки
  43. $dy= $x * 0.01;
  44.  
  45. // Черный фон
  46. $black = ImageColorAllocate($img, 0, 0, 0);
  47.  
  48.  
  49. // Создаем новое изображение
  50. $img2 = ImageCreateTrueColor($bx + $tx, $by + $tx * 2.6);
  51. $black = ImageColorAllocate($img2, 0, 0, 0);
  52.  
  53. // Масштабирование
  54. ImageCopyResized($img2, $img, $tx, $ty, 0, 0, $bx-$tx, $y, $x, $y);
  55.  
  56.  
  57. // Расчет смещений для рисования рамки
  58. $x1 = $tx;
  59. $y1 = $ty;
  60. $x2 = $bx;
  61. $y2 = $y + $ty;
  62.  
  63.  
  64. // Цвета рамки, слоганов и копирайта
  65. $col = ImageColorAllocate($img2, 255, 255, 255); // Цвет слоганов
  66. $col2 = ImageColorAllocate($img2, 255, 255, 255); // Цвет копирайта
  67. $col3 = ImageColorAllocate($img2, 255, 255, 255); // Цвет рамки
  68.  
  69.  
  70. // Рамки на изображении
  71. ImageRectangle($img2, $x1 - 5, $y1 - 5, $x2 + 4, $y2 + 4, $col3);
  72. ImageRectangle($img2, $x1 - 6, $y1 - 6, $x2 + 5, $y2 + 5, $col3);
  73.  
  74.  
  75. // Пишем слоганы, сначала с X=0, чтобы получить линейные размеры текста
  76. $s1 = ImageTTFText($img2, 0.06 * $bx, 0, $dx, $by + $ty, $col, "times.ttf", $slogan1);
  77. $s2 = ImageTTFText($img2, 0.035 * $bx, 0, $dx, $by + $ty + 0.08 * $bx, $col, "arial.ttf", $slogan2);
  78.  
  79.  
  80.  
  81. // 1-й слоган не помещается в картинку - ошибка!
  82. if (($s1[2] - $s1[0]) > $bx + $tx) $sl1 = 1;
  83.  
  84.  
  85. $dx = (($bx + $tx) - ($s1[2] - $s1[0]))/2; // Смещение. Эта величина определяет центровку текста для 1-го слогана
  86.  
  87.  
  88. // Непосредственно текст. 1-й слоган
  89. ImageFilledRectangle($img2, 0, $y2 + 10, $bx + $tx, $by + $tx * 2.8, $black);
  90. ImageTTFText($img2, 0.06 * $bx, 0, $dx, $by + 1.1*$ty, $col, "times.ttf", $slogan1);
  91.  
  92. $dx = (($bx + $tx) - ($s2[2] - $s2[0]))/2; // Смещение. Эта величина определяет центровку текста для 2-го слогана
  93.  
  94.  
  95. // Непосредственно текст. 2-й слоган (таглайн)
  96. if ($dx < 0) {
  97.  
  98. // Текст не умещается в картинку, масштабируем.
  99. $s = $s2[2] - $s2[0];
  100. $size = (0.035 * $bx * $bx) /$s;
  101. $s2 = ImageTTFText($img2, $size, 0, $dx, $by + $ty + 0.08 * $bx, $col, "arial.ttf", $slogan2);
  102.  
  103.  
  104. $dx = (($bx + $tx) - ($s2[2] - $s2[0]))/2;
  105.  
  106. ImageFilledRectangle($img2, 0, $by + 1.2* $tx, $bx + $tx, $by + $tx * 2.6, $black);
  107. ImageTTFText($img2, $size, 0, $dx, $by + $ty + 0.08 * $bx, $col, "arial.ttf", $slogan2);
  108.  
  109. } else {
  110.  
  111. $size = 0.035 * $bx;
  112.  
  113. ImageFilledRectangle($img2, 0, $by + 1.4*$tx, $bx + $tx, $by + $tx * 2.3, $black);
  114. ImageTTFText($img2, $size, 0, $dx, $by + $ty + 0.08 * $bx, $col, "arial.ttf", $slogan2);
  115.  
  116. }
  117.  
  118. // Copyright
  119. ImageTTFText($img2, $size/1.7, 0, 10, $by + $tx * 2.5, $col2, "arial.ttf", $copyright);
  120.  
  121. ImageJpeg($img2, $image,80);
  122. ImageDestroy($img2);
  123.  
  124. return 0;
  125.  
  126. }
  127. // =========================================================================
  128. // Преобразование win-1251 в UTF-8
  129. // Взято с сайта: www.php.net, Автор: SiMM
  130. function dm_win2utf($string){
  131.  
  132. if (function_exists("iconv")) {
  133. $string = iconv("Windows-1251","UTF-8",$string);
  134. return $string;
  135. } else {
  136.  
  137.  
  138. $out = '';
  139. for ($i = 0; $i<strlen($string); ++$i){
  140.  
  141. $ch = ord($string{$i});
  142. if ($ch < 0x80) $out .= chr($ch);
  143. else
  144. if ($ch >= 0xC0)
  145. if ($ch < 0xF0)
  146. $out .= "\xD0".chr(0x90 +
#23 15 ноября 2011 в 02:04
catsite,

В файл /includes/graphic.inc.php вставить следующее:

catsite
А можно подробнее, куда вставить? после каких строк?
#24 15 ноября 2011 в 02:12
В начало, вы же функцию описываете
после этого прямо:
  1. if(!defined('VALID_CMS')) { die('ACCESS DENIED'); }
#25 15 ноября 2011 в 02:52


В начало, вы же функцию описываете
после этого прямо:

  1. if(!defined('VALID_CMS')) { die('ACCESS DENIED'); }

catsite


Вставил куда сказано, попробовал на денвере. При загрузке картинки для демотивации выдало ошибку
Fatal error: Call to undefined function dm_win2utf() in Z:\home\test2.ru\www\includes\graphic.inc.php on line 20

это строка $slogan1 = dm_win2utf($slogan1);
Что не так?
#26 15 ноября 2011 в 02:53
забыл конвертер, поправил пост, повторите действие снова
#27 15 ноября 2011 в 03:40
Не загружается фото…
#28 15 ноября 2011 в 03:59

Не загружается фото…

Алфей
Сейчас фото загружается, рамка накладывается, но текст не вставляется…
#29 15 ноября 2011 в 09:22
Вот что значит спешка… пропустил в инструкции строку подключения чужого кода в model.php ((
  1. include ("dm.php");
Подредактировал инструцию.

Впрочем, можно действительно как советует catsite вместо копирования и подключения кода перенести функции себе.

Алфей, строки могут быть пустыми если забыл скопировать шрифты
#30 15 ноября 2011 в 11:48

cms-i.ru/photos/1036

catsite
что то я нашел только галлерею готовых демотиваторов, а самой кнопки сделать демотиватор так и не обнаружил.(( Кто нибудь покажет как это работает?))
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.