Наложение ватермарков

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 3 октября 2016 в 04:43
По старой привычке использую редактор TinyMce в связке с загрузчиком Responsivefilemanager. Для двойки прикрутил, спасибо пользователю oll, его тема.

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

В загрузчике Responsivefilemanager нет возможности налаживать водяной знак на картинки, хотя есть функция в файле php_image_magician:
  1. public function addWatermark($watermarkImage, $pos, $padding = 0, $opacity = 0)
  2. # Author: Jarrod Oberto
  3. # Date: 18-11-09
  4. # Purpose: Add watermark image
  5. # Param in: (str) $watermark: The watermark image
  6. # (str) $pos: Could be a pre-determined position such as:
  7. # tl = top left,
  8. # t = top (middle),
  9. # tr = top right,
  10. # l = left,
  11. # m = middle,
  12. # r = right,
  13. # bl = bottom left,
  14. # b = bottom (middle),
  15. # br = bottom right
  16. # Or, it could be a co-ordinate position such as: 50x100
  17. #
  18. # (int) $padding: If using a pre-determined position you can
  19. # adjust the padding from the edges by passing an amount
  20. # in pixels. If using co-ordinates, this value is ignored.
  21. # Param out:
  22. # Reference: http://www.php.net/manual/en/image.examples-watermark.php
  23. # Notes: Based on example in reference.
  24. #
  25. #
  26. {
  27.  
  28. // Load the stamp and the photo to apply the watermark to
  29. $stamp = $this->openImage ($watermarkImage); # stamp
  30. $im = $this->imageResized; # photo
  31.  
  32. // *** Get stamps width and height
  33. $sx = imagesx($stamp);
  34. $sy = imagesy($stamp);
  35.  
  36. // *** Find co-ords to place image
  37. $posArray = $this->calculatePosition($pos, $padding, $sx, $sy);
  38. $x = $posArray['width'];
  39. $y = $posArray['height'];
  40.  
  41. // *** Set watermark opacity
  42. if (fix_strtolower(strrchr($watermarkImage, '.')) == '.png') {
  43.  
  44. $opacity = $this->invertTransparency($opacity, 100);
  45. $this->filterOpacity($stamp, $opacity);
  46. }
  47.  
  48. // Copy the watermark image onto our photo
  49. imagecopy($im, $stamp, $x, $y, 0, 0, imagesx($stamp), imagesy($stamp));
  50.  
  51. }
Довольно далек от php. oll пропал, был бы очень признателен, если кто-то из проггеров помог разобраться в данном вопросе.
#2 3 октября 2016 в 04:45
Загрузчик Responsivefilemanager:
  1. <?php
  2. include('config/config.php');
  3. if($_SESSION['RF']["verify"] != "RESPONSIVEfilemanager") die('forbiden');
  4. include('include/utils.php');
  5.  
  6.  
  7. if (isset($_POST['path']))
  8. {
  9. $storeFolder = $_POST['path'];
  10. $storeFolderThumb = $_POST['path_thumb'];
  11. }
  12. else
  13. {
  14. $storeFolder = $current_path.$_POST["fldr"]; // correct for when IE is in Compatibility mode
  15. $storeFolderThumb = $thumbs_base_path.$_POST["fldr"];
  16. }
  17.  
  18. $path_pos = strpos($storeFolder,$current_path);
  19. $thumb_pos = strpos($storeFolderThumb,$thumbs_base_path);
  20.  
  21. if ($path_pos!==0
  22. || $thumb_pos !==0
  23. || strpos($storeFolderThumb,'../',strlen($thumbs_base_path)) !== FALSE
  24. || strpos($storeFolderThumb,'./',strlen($thumbs_base_path)) !== FALSE
  25. || strpos($storeFolder,'../',strlen($current_path)) !== FALSE
  26. || strpos($storeFolder,'./',strlen($current_path)) !== FALSE )
  27. die('wrong path');
  28.  
  29.  
  30. $path = $storeFolder;
  31. $cycle = TRUE;
  32. $max_cycles = 50;
  33. $i = 0;
  34. while ($cycle && $i < $max_cycles)
  35. {
  36. $i++;
  37. if ($path == $current_path) $cycle = FALSE;
  38. if (file_exists($path."config.php"))
  39. {
  40. require_once($path."config.php");
  41. $cycle = FALSE;
  42. }
  43. $path = fix_dirname($path).'/';
  44. }
  45.  
  46.  
  47. if ( ! empty($_FILES))
  48. {
  49. $info = pathinfo($_FILES['file']['name']);
  50.  
  51. if (in_array(fix_strtolower($info['extension']), $ext))
  52. {
  53. $tempFile = $_FILES['file']['tmp_name'];
  54. $targetPath = $storeFolder;
  55. $targetPathThumb = $storeFolderThumb;
  56. $_FILES['file']['name'] = fix_filename($_FILES['file']['name'],$transliteration,$convert_spaces);
  57.  
  58. // Gen. new file name if exists
  59. if (file_exists($targetPath.$_FILES['file']['name']))
  60. {
  61. $i = 1;
  62. $info = pathinfo($_FILES['file']['name']);
  63.  
  64. // append number
  65. while(file_exists($targetPath.$info['filename']."_".$i.".".$info['extension'])) {
  66. $i++;
  67. }
  68. $_FILES['file']['name'] = $info['filename']."_".$i.".".$info['extension'];
  69. }
  70.  
  71. $targetFile = $targetPath. $_FILES['file']['name'];
  72. $targetFileThumb = $targetPathThumb. $_FILES['file']['name'];
  73.  
  74. // check if image (and supported)
  75. if (in_array(fix_strtolower($info['extension']),$ext_img)) $is_img=TRUE;
  76. else $is_img=FALSE;
  77.  
  78. // upload
  79. move_uploaded_file($tempFile,$targetFile);
  80. chmod($targetFile, 0755);
  81.  
  82. if ($is_img)
  83. {
  84. $memory_error = FALSE;
  85. if ( ! create_img($targetFile, $targetFileThumb, 122, 91))
  86. {
  87. $memory_error = FALSE;
  88. }
  89. else
  90. {
  91. // TODO something with this long function baaaah...
  92. if( ! new_thumbnails_creation($targetPath,$targetFile,$_FILES['file']['name'],$current_path,$relative_image_creation,$relative_path_from_current_pos,$relative_image_creation_name_to_prepend,$relative_image_creation_name_to_append,$relative_image_creation_width,$relative_image_creation_height,$relative_image_creation_option,$fixed_image_creation,$fixed_path_from_filemanager,$fixed_image_creation_name_to_prepend,$fixed_image_creation_to_append,$fixed_image_creation_width,$fixed_image_creation_height,$fixed_image_creation_option))
  93. {
  94. $memory_error = FALSE;
  95. }
  96. else
  97. {
  98. $imginfo = getimagesize($targetFile);
  99. $srcWidth = $imginfo[0];
  100. $srcHeight = $imginfo[1];
  101.  
  102. // resize images if set
  103. if ($image_resizing)
  104. {
  105. if ($image_resizing_width == 0) // if width not set
  106. {
  107. if ($image_resizing_height == 0)
  108. {
  109. $image_resizing_width = $srcWidth;
  110. $image_resizing_height = $srcHeight;
  111. }
  112. else
  113. {
  114. $image_resizing_width = $image_resizing_height*$srcWidth/$srcHeight;
  115. }
  116. }
  117. elseif ($image_resizing_height == 0) // if height not set
  118. {
  119. $image_resizing_height = $image_resizing_width*$srcHeight/$srcWidth;
  120. }
  121.  
  122. // new dims and create
  123. $srcWidth = $image_resizing_width;
  124. $srcHeight = $image_resizing_height;
  125. create_img($targetFile, $targetFile, $image_resizing_width, $image_resizing_height, $image_resizing_mode);
  126. }
  127.  
  128. //max resizing limit control
  129. $resize = FALSE;
  130. if ($image_max_width != 0 && $srcWidth > $image_max_width && $image_resizing_override === FALSE)
  131. {
  132. $resize = TRUE;
  133. $srcWidth = $image_max_width;
  134.  
  135. if ($image_max_height == 0) $srcHeight = $image_max_width*$srcHeight/$srcWidth;
  136. }
  137.  
  138. if ($image_max_height != 0 && $srcHeight > $image_max_height && $image_resizing_override === FALSE){
  139. $resize = TRUE;
  140. $srcHeight = $image_max_height;
  141.  
  142. if ($image_max_width == 0) $srcWidth = $image_max_height*$srcWidth/$srcHeight;
  143. }
  144.  
  145. if ($resize) create_img($targetFile, $targetFile, $srcWidth, $srcHeight, $image_max_mode);
  146. }
  147. }
  148.  
  149. // not enough memory
  150. if ($memory_error)
  151. {
  152. unlink($targetFile);
  153. header('HTTP/1.1 406 Not enought Memory',TRUE,406);
  154. exit();
  155. }
  156. }
  157. }
  158. else // file ext. is not in the allowed list
  159. {
  160. header('HTTP/1.1 406 file not permitted',TRUE,406);
#3 4 октября 2016 в 02:47
Ребята подсказали, но до конца разобраться не смог. Нужно прописать пути в эти строки функции:
  1. $stamp = $this->openImage ($watermarkImage); # stamp
  2. $im = $this->imageResized; # photo
Как правильно и что прописать в вышеприведенные строки скрипта? Первое — путь к ватермарке, второе — путь к загружаемым изображением, так вроде.

У загрузчика путь: move_uploaded_file($tempFile,$targetFile); (полный код файлов в спойлерах постом выше)
#4 4 октября 2016 в 03:36
Oll — это девочка. Она умница и отличный программер. Она не пропала, просто у нее проблемы со здоровьем, как она мне сказала.
Теперь о ватермарке. Наложение ватермарка делается через библиотеку GD. Возможно, подсказку получите здесь.
#5 4 октября 2016 в 12:26

Она умница и отличный программер.

Странник
Несомненно. Пусть выздоравливает побыстрей, хороший программист с большим сердцем и без мещанских замашек — редкость

Наложение ватермарка делается через библиотеку GD. Возможно, подсказку получите здесь.

Странник
Там решение для первой ветки, мне нужно для 2.5.1, да и не решение, как таковое, а просто рекомендация программиста "как правильно сделать" в данном конкретном случае.
#6 4 октября 2016 в 16:14
Рекомендация программиста такая:
1. Откройте документацию по библиотеке GD и дерзайте.
2. Если не хотите сами осваивать библиотеку GD (она и для первой и для второй ветки одинакова, как нетрудно догадаться) — нанимайте программиста)))
#7 4 октября 2016 в 17:08

Рекомендация программиста такая:
1. Откройте документацию по библиотеке GD и дерзайте.
2. Если не хотите сами осваивать библиотеку GD (она и для первой и для второй ветки одинакова, как нетрудно догадаться) — нанимайте программиста)))

Странник
Ответ, как на форуме у буржуев) Странник, пока денег на программистов нет, но я держусь. smile

Разработчик загрузчика пообещал доработать функцию наложения ватермарок в следующей версии скрипта. Пока буду добавлять во время редактирования в фотошопе.

Приветствуется безвозмездная помощь в решении вопроса:

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

#8 4 октября 2016 в 19:35
Удалось прикрутить сторонний скрипт. Вопрос решен.

Похожие темы

Ватермарк

Дизайн / Графика / Искусство Создана 4 года назад 2 сообщения

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.