За последние 24 часа нас посетили 61128 программистов и 1751 робот. Сейчас ищут 835 программистов ...

Другие Размеры на Watermark

Тема в разделе "PHP для новичков", создана пользователем MrAndrew, 19 сен 2010.

  1. MrAndrew

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

    С нами с:
    11 дек 2009
    Сообщения:
    74
    Симпатии:
    0
    Здравствуйте. Подскажите, пожалуйста. Есть watermark, на фотографии с горизонтальной ориентировкой накладывает изображение на ура.

    Но если фото вертикальная, watermark накладывается также как и на горизонтальную, и получается так, что первые и последние буквы Watermark`а не вмещаются...

    Можно ли исправить?

    Вот код:

    PHP:
    1. <?
    2.  
    3. waterMark($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'], "watermark.png", "top=20,center=");
    4.  
    5. function waterMark($original, $watermark, $placement = 'middle=5, center=50', $destination = null) {
    6.    $original = urldecode($original);
    7.    $info_o = @getImageSize($original);
    8.    if (!$info_o)
    9.          return false;
    10.    $info_w = @getImageSize($watermark);
    11.    if (!$info_w)
    12.          return false;
    13.  
    14.    list ($vertical, $horizontal) = split(',', $placement,2);
    15.    list($vertical, $sy) = split('=', trim($vertical),2);
    16.    list($horizontal, $sx) = split('=', trim($horizontal),2);
    17.  
    18.    switch (trim($vertical)) {
    19.       case 'bottom':
    20.          $y = $info_o[1] - $info_w[1] - (int)$sy;
    21.          break;
    22.       case 'middle':
    23.          $y = ceil($info_o[1]/2) - ceil($info_w[1]/2) + (int)$sy;
    24.          break;
    25.       default:
    26.          $y = (int)$sy;
    27.          break;
    28.       }
    29.  
    30.    switch (trim($horizontal)) {
    31.       case 'right':
    32.          $x = $info_o[0] - $info_w[0] - (int)$sx;
    33.          break;
    34.       case 'center':
    35.          $x = ceil($info_o[0]/2) - ceil($info_w[0]/2) + (int)$sx;
    36.          break;
    37.       default:
    38.          $x = (int)$sx;
    39.          break;
    40.       }
    41.  
    42.    header("Content-Type: ".$info_o['mime']);
    43.  
    44.    $original = @imageCreateFromString(file_get_contents($original));
    45.    $watermark = @imageCreateFromString(file_get_contents($watermark));
    46.    $out = imageCreateTrueColor($info_o[0],$info_o[1]);
    47.  
    48.    imageCopy($out, $original, 0, 0, 0, 0, $info_o[0], $info_o[1]);
    49.    if( ($info_o[0] > 250) && ($info_o[1] > 250) )
    50.    {
    51.    imageCopy($out, $watermark, $x, $y, 0, 0, $info_w[0], $info_w[1]);
    52.    }
    53.  
    54.    switch ($info_o[2]) {
    55.       case 1:
    56.          imageGIF($out);
    57.          break;
    58.       case 2:
    59.          imageJPEG($out, NULL, 100);
    60.          break;
    61.       case 3:
    62.          imagePNG($out);
    63.          break;
    64.          }
    65.  
    66.    imageDestroy($out);
    67.    imageDestroy($original);
    68.    imageDestroy($watermark);
    69.  
    70.    return true;
    71.    }
    72.  
    73. ?>
     
  2. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    По-русски это водной знак. Это общепринятый термин и используется уже туеву кучу лет. :)

    По поводу вопроса. Нифига у тебя широкий водяной знак, аж в картинку не влазит! Меняй. Так быть не должно. Он должен быть, конечно, но мелкий и слабо заметный. Люди ходят видить картинку, а не твои знак на, наверняка, тыренной фотке.

    Но если уж. Смотри ширину картинки, если она меньше водяного знака, то уменьшай знак. Если больше - не трогай.
     
  3. MrAndrew

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

    С нами с:
    11 дек 2009
    Сообщения:
    74
    Симпатии:
    0
    Фото все уникальные это по поводу - "тыренной фотке". Для того и нужен мне знак.
    Во-вторых с чего взяли, что он жирный и портит фото?

    И в третьих вопрос в том, можно ли уменьшить "водяной знак" скриптом, если фото будет с вертикальной ориентировкой?
     
  4. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Уникально-спизженая фотка?
     
  5. MrAndrew

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

    С нами с:
    11 дек 2009
    Сообщения:
    74
    Симпатии:
    0
    Ну пусть будет по-вашему так. Люди сами выкладывают свои фотографии, сами у себя значит пизжат!
     
  6. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Он не влезает в вертикальную фотографию. Следовательно, слишком здоровый.

    Фото же вы уменьшаете. Можно и знак уменьшить. Но лучше уменьшать его не программно, а самому. Фоток ного - понятно, что их руками уменьшать глупо. Но знак-то один и сделать несколько вариантов (большой, средний, мелкий) несложно. Зато качество не пострадает.

    Тут вопрос насколько свои. :)

    Вообще изначально неверно задан вопрос. Приведите пример водяного знака, фотографий и их мелких копий. Не надо сами фотографии, нужны размеры. А то, походу, мы говорим об одном, вы - о другом.