За последние 24 часа нас посетил 22971 программист и 1268 роботов. Сейчас ищут 952 программиста ...

Как выставить водяной знак по центру?

Тема в разделе "PHP для новичков", создана пользователем Sice, 18 мар 2020.

Метки:
  1. Sice

    Sice Активный пользователь

    С нами с:
    16 фев 2012
    Сообщения:
    45
    Симпатии:
    0
    Доброго времени суток друзья.

    Накладываю водяной знак на загружаемые изображения через форму.
    Пытаюсь оцентровать водяной знак, чтобы вне зависимости от загружаемого изображения, водяной знак ложился по центру.
    Делаю так:
    PHP:
    1. <?php
    2.     $sx = imagesx($watermark);
    3.     $sy = imagesy($watermark);
    4. imagecopy($imgg, $watermark, (imagesx($imgg) / 2) - (($sx) / 2), (imagesy($imgg) / 2) - (($sy) / 2), 0, 0, imagesx($watermark), imagesy($watermark));  
    5. ?>

    Но в итоге так не выходит. В итоге для изображений с вертикальной ориентацией, видна только середина водяного знака, права и левая часть обрезается.
    Подскажите пожалуйста как правильно сделать, чтобы вне зависимости от размера изображения, водяной знак был строго по центру (по высоте и ширине). Спасибо.
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    PHP:
    1. <?php
    2.  
    3. $im = new stdclass;
    4.  
    5. $im -> logo = imagecreatefrompng ( 'logo.png' );
    6.  
    7. $x = imagesx ( $im -> logo );
    8.  
    9. $y = imagesy ( $im -> logo );
    10.  
    11. #--------
    12.  
    13. $im -> watermark = imagecreatefrompng ( 'watermark.png' );
    14.  
    15. imagecopyresampled ( $im -> logo, $im -> watermark,
    16.    ( int ) ceil ( ( $x - imagesx ( $im -> watermark ) ) / 2 ),
    17.    ( int ) ceil ( ( $y - imagesy ( $im -> watermark ) ) / 2 ),
    18.    0, 0,
    19.    imagesx ( $im -> watermark ), imagesx ( $im -> watermark ),
    20.    imagesx ( $im -> watermark ), imagesy ( $im -> watermark )
    21. );
    22.  
    23. imagepng ( $im -> logo, 'new.png' );
    24.  
    25. foreach ( [ 'logo', 'watermark' ] AS $name )
    26. {
    27.    imagedestroy ( $im -> {$name} );
    28. }
    Посмотреть вложение 4456
     
    #2 MouseZver, 19 мар 2020
    Последнее редактирование: 19 мар 2020
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
  4. Hovik

    Hovik Активный пользователь

    С нами с:
    22 окт 2018
    Сообщения:
    89
    Симпатии:
    0
    Проще работать с wideimage