Скрипт Watermark запретить водяной знак на фото меньше определённого размера

Тема в разделе "Программирование", создана пользователем Sergi, 06.12.2014.

  1. Offline

    Sergi Пользователь

    Регистрация:
    03.11.2009
    Сообщения:
    104
    Симпатии:
    0
    Пол:
    Мужской
    Как указать, что бы на маленьких картинках, не прописывался водяной знак.
    Или как вообще запретить водяной знак на фото меньше определённого размера

    Код (CODE):
    1. <?php
    2. // Скрипт скачен с wdda.pro
    3.  
    4. // Путь до файла с оригинальным изображением
    5. $path = $_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'];
    6. $nameImage = end(explode('/', $_SERVER['REQUEST_URI'])); // Имя изображения
    7. $nameImageId = md5($path). $nameImage;
    8.  
    9. // Проверяем дату для рефреша кеша
    10. $dateImage = filemtime($path);
    11. $dateImageCache = @filemtime($_SERVER['DOCUMENT_ROOT'] . "/watermark/cache/" . $nameImageId);
    12.  
    13. //Устанавливаем качество (вес) картинки на выходе
    14. $quality = 100;
    15.  
    16. if(file_exists('cache/' . $nameImageId) && $dateImage < $dateImageCache)
    17. {
    18. $image = imagecreatefromstring(file_get_contents('cache/' . $nameImageId));
    19. header('Content-type: image/jpeg');
    20. imagejpeg($image, NULL, $quality);
    21. exit();
    22. }
    23. else // Если же нет такой картинки в кэше
    24. {
    25. // Загружаем оригинальное изображение
    26. $image = imagecreatefromstring(file_get_contents($path));
    27.  
    28. // Получаем ширину и высоту оригинально изображения
    29. $w = imagesx($image);
    30. $h = imagesy($image);
    31.  
    32. // Загружаем изображение с водяным знаком
    33. $watermark = imagecreatefrompng('watermark.png');
    34.  
    35. //Вместо 235 можете поставить свое значение, это размер для маленьких фото для них будет испольщоваться маленький ватермарк
    36. if($w == 235)
    37. {
    38. $watermark = imagecreatefrompng('watermark_m.png');
    39. }
    40.  
    41. // Получаем ширину и высоту водяного знака
    42. $ww = imagesx($watermark);
    43. $wh = imagesy($watermark);
    44.  
    45. // Соединяем оригинальное изображение и водяной знак.(водяной знак будет расположен в нижнем правом углу), можете попробовать его двигать меняя 10 и 5.
    46. imagecopy($image, $watermark, $w-$ww-10, $h-$wh-5, 0, 0, $ww, $wh);
    47.  
    48. imagealphablending($image, false);
    49. imagesavealpha($image, true); // Устанавливаем прозрачность для png файла
    50.  
    51. //Изменив значение 100, вы можете снизить качество получаемого фото
    52. imagejpeg($image, 'cache/' . $nameImageId, $quality);
    53. header('Content-type: image/jpeg');
    54. imagejpeg($image, NULL, $quality);
    55. exit();
    56. }
    57. ?>


    В коде есть такое место, может всё же кто-нибудь подскажет как сделать!
    //Вместо 235 можете поставить свое значение, это размер для маленьких фото для них будет испольщоваться маленький ватермарк
    if($w == 235)
    {
    $watermark = imagecreatefrompng('watermark_m.png');
    }
     
  2.  
  3. DKraev
    Offline

    DKraev <i>(aka gft)</i> => Cпециалист <=

    Регистрация:
    16.08.2008
    Сообщения:
    1 627
    Симпатии:
    219
    Пол:
    Мужской
  4. Offline

    Sergi Пользователь

    Регистрация:
    03.11.2009
    Сообщения:
    104
    Симпатии:
    0
    Пол:
    Мужской
    У меня большинство маленьких картинок 300х200, но есть и другие размеры Сделал так не помогло.

    if($w == 235)

    {
    $watermark = '300';
    }

    вот сайт http://туризм-фотографии.рф/
     
  5. DKraev
    Offline

    DKraev <i>(aka gft)</i> => Cпециалист <=

    Регистрация:
    16.08.2008
    Сообщения:
    1 627
    Симпатии:
    219
    Пол:
    Мужской
  6. Offline

    Sergi Пользователь

    Регистрация:
    03.11.2009
    Сообщения:
    104
    Симпатии:
    0
    Пол:
    Мужской
    //Вместо 235 можете поставить свое значение, это размер для маленьких фото для них будет испольщоваться маленький ватермарк
    if($w == 235) -- Это написано разработчиком

    вот надо поставить свое значение, предложенный тобой вариант
    {
    $watermark = '300';
    }
    не подошел
    У меня много маленьких фото с разным разрешением было бы удобнее вообще запретить водяной знак на фото меньше определённого размера.
     
  7. DKraev
    Offline

    DKraev <i>(aka gft)</i> => Cпециалист <=

    Регистрация:
    16.08.2008
    Сообщения:
    1 627
    Симпатии:
    219
    Пол:
    Мужской
    Если перевести на русский, то то условие что янаписал в самом начале говорит: если ширина фото равна 235, то ватермарк не использовать. У тебя ширина равна 300. В моем условии вместо 235 поставь 300. Если надо для все которые меньше, то можно попробовать использовать сравнение <= (меньше либо равно) вместо == ( равно)
     
  8. Offline

    Sergi Пользователь

    Регистрация:
    03.11.2009
    Сообщения:
    104
    Симпатии:
    0
    Пол:
    Мужской
    Я в пхп ноль, но если я правильно понял, то нужно сделать так

    {
    $watermark <= '350';
    }

    то есть мы указали что на фото ширина которых 350 и меньше ватермак не использовать


    //Вместо 235 можете поставить свое значение, это размер для маленьких фото для них будет испольщоваться маленький ватермарк
    if($w <= 350)

    здесь мы сказали, что маленький ватермак использовать на фото 350 и меньше

    Но ни каких изменений не произошло, пробовал убрать if($w <= 350), думал может как то конфликтует, тоже результата нет.
     
  9. OlegK
    Offline

    OlegK Russian Joomla! Team Команда форума ⇒ Профи ⇐

    Регистрация:
    17.01.2011
    Сообщения:
    7 812
    Симпатии:
    771
    Пол:
    Мужской
    Убираем лишнее, а проверку раньше запускаем
    Код (PHP):
    1. $watermark="";
    2. if($w >= 235)
    3. // Загружаем изображение с водяным знаком
    4.  
    5. $watermark = imagecreatefrompng('watermark.png');

    эту часть кода удалить
    Код (PHP):
    1. //Вместо 235 можете поставить свое значение, это размер для маленьких фото для них будет испольщоваться маленький ватермарк
    2. if($w == 235) {
    3. $watermark = imagecreatefrompng('watermark_m.png');
    4.                      }
     
    Sergi нравится это.
  10. Offline

    Sergi Пользователь

    Регистрация:
    03.11.2009
    Сообщения:
    104
    Симпатии:
    0
    Пол:
    Мужской
    Не не выходит

    Сделал так

    Код (CODE):
    1. if($w >= 350)
    2. // Загружаем изображение с водяным знаком
    3.  
    4. {
    5. $watermark = imagecreatefrompng('watermark.png');
    6.  
    7. }


    Пробовал это $watermark = imagecreatefrompng('watermark.png');
    и без скобок как указано выше, разницы нет

    Мне наверное проще было бы что бы на фото от 300 и меньше вообще не было ватермака

    На всякий случай приведу большую часть кода может там что кроется

    Код (CODE):
    1. {
    2.     // Загружаем оригинальное изображение
    3.     $image = imagecreatefromstring(file_get_contents($path));
    4.    
    5.     // Получаем ширину и высоту оригинально изображения
    6.     $w = imagesx($image);
    7.     $h = imagesy($image);
    8.  
    9.    
    10. if($w >= 350)
    11. // Загружаем изображение с водяным знаком
    12.  
    13. {
    14. $watermark = imagecreatefrompng('watermark.png');
    15.  
    16. }
    17.  
    18.    
    19.    
    20.    
    21.  
    22.     // Получаем ширину и высоту водяного знака
    23.     $ww = imagesx($watermark);
    24.     $wh = imagesy($watermark);
    25.    
    26.     // Соединяем оригинальное изображение и водяной знак.(водяной знак будет расположен в нижнем правом углу), можете попробовать его двигать меняя 10 и 5.
    27.     imagecopy($image, $watermark, $w-$ww-10, $h-$wh-5, 0, 0, $ww, $wh);
    28.    
    29.     imagealphablending($image, false);
    30.     imagesavealpha($image, true); // Устанавливаем прозрачность для png файла
    31.  
    32.     //Изменив значение 100, вы можете снизить качество получаемого фото
    33.     imagejpeg($image, 'cache/' . $nameImageId, $quality);
    34.     header('Content-type: image/jpeg');
    35.     imagejpeg($image, NULL, $quality);
    36.     exit();
    37. }
     
  11. OlegK
    Offline

    OlegK Russian Joomla! Team Команда форума ⇒ Профи ⇐

    Регистрация:
    17.01.2011
    Сообщения:
    7 812
    Симпатии:
    771
    Пол:
    Мужской
    Ты папку кеш чистишь от картинок ?
     
  12. Offline

    Sergi Пользователь

    Регистрация:
    03.11.2009
    Сообщения:
    104
    Симпатии:
    0
    Пол:
    Мужской
    я тоже на кеш думал несколько раз браузер обновлял, потом через браузер tor пробовал, далее очистил в панели управления весь кеш, результата нет
     
  13. DKraev
    Offline

    DKraev <i>(aka gft)</i> => Cпециалист <=

    Регистрация:
    16.08.2008
    Сообщения:
    1 627
    Симпатии:
    219
    Пол:
    Мужской
    А Вы как проверяете? Просто обновляете страницу и смотрите? Пробовали загружать новую фотку? На них тоже добавляет?
     
    Sergi нравится это.
  14. Offline

    Sergi Пользователь

    Регистрация:
    03.11.2009
    Сообщения:
    104
    Симпатии:
    0
    Пол:
    Мужской
    Сейчас попробовал на новую фотку маленького размера ватермак не добавился.
    Выходит то что с существующих фоток ватермак теперь не уберешь?
     
  15. DKraev
    Offline

    DKraev <i>(aka gft)</i> => Cпециалист <=

    Регистрация:
    16.08.2008
    Сообщения:
    1 627
    Симпатии:
    219
    Пол:
    Мужской
    Да. Я посмотрел исходный код сайта Вашего. Там подгрузка идет реальных картинок. Т.е. ватермарк уже наложен на них. Т.е. он не на лету накладывается, что, собственно, правильно. Вопрос в том, как у Вас формируется маленькое изображение. Можно попробовать их тупо удалить все, чтобы они перегенерировались заново.

    Только не забудьте сначала бекап сайта сделать!!!
     
  16. Offline

    Sergi Пользователь

    Регистрация:
    03.11.2009
    Сообщения:
    104
    Симпатии:
    0
    Пол:
    Мужской
    Взял просто скопировал фото с хостинга на ноут ничего не меняя и закачал заново, то есть перезаписал ватермак пропал
     
  17. DKraev
    Offline

    DKraev <i>(aka gft)</i> => Cпециалист <=

    Регистрация:
    16.08.2008
    Сообщения:
    1 627
    Симпатии:
    219
    Пол:
    Мужской
  18. Offline

    Sergi Пользователь

    Регистрация:
    03.11.2009
    Сообщения:
    104
    Симпатии:
    0
    Пол:
    Мужской
    конечно)
     

Поделиться этой страницей

Загрузка...