php, gd, создать водяной знак, изменить размер текста водяного знака и цвет фона, imagecreatefromjpeg - PullRequest
0 голосов
/ 15 сентября 2010

Мне нужно создать водяной знак, нанести его на картинку и сохранить под другим именем.Текущий скрипт работает довольно хорошо, но единственная проблема заключается в том, что мне нужно увеличить размер «образца текста» и изменить фон с черного на белый.Я пробовал разные сценарии, изменил прозрачность, но все еще не могу изменить цвет фона.

function watermark($imag_path, $photo_id) {
    // Load the stamp and the photo to apply the watermark to
    $im = imagecreatefromjpeg("$imag_path");
    echo "imag_path is $imag_path and photoid is $photo_id";
    // First we create our stamp image manually from GD
    $stamp = imagecreatetruecolor(490, 20);

    //$im = imagecreatefromjpeg("$photo_id");
    imagestring($stamp, 5, 20, 2, 'sample text', 0xff0000);

    // Set the margins for the stamp and get the height/width of the stamp image
    $marge_right  = 10;
    $marge_bottom = 10;
    $sx           = imagesx($stamp);
    $sy           = imagesy($stamp);

    // Merge the stamp onto our photo with an opacity (transparency) of 100%
    imagecopymerge($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp), 100);
    $new_photo_id = $photo_id . "sample.JPG";
    // Save the image to file and free memory
    imagejpeg($im, "tmp/$new_photo_id");
    imagedestroy($im);
}

1 Ответ

3 голосов
/ 15 сентября 2010

Зачем вообще использовать штамп? Я использую следующий код на одном из моих сайтов:

  $im = imagecreatefromjpeg($path);

  function shadow_text($im, $size, $x, $y, $font, $text)
  {
    $black = imagecolorallocate($im, 0, 0, 0);
    $white = imagecolorallocate($im, 255, 255, 255);
    imagettftext($im, $size, 0, $x + 1, $y + 1, $black, $font, $text);
    imagettftext($im, $size, 0, $x + 0, $y + 1, $black, $font, $text);
    imagettftext($im, $size, 0, $x + 0, $y + 0, $white, $font, $text);
  }

  $font = '../fonts/verdana.ttf';
  $size = 11;

  # calculate maximum height of a character 
  $bbox = imagettfbbox($size, 0, $font, 'ky');
  $x = 8; $y = 8 - $bbox[5];

  $text = 'text to be added';
  shadow_text($im, $size, $x, $y, $font, $text);

  header("Content-Type: image/jpeg");
  imagejpeg($im, null, 90);

Этот код работает достаточно быстро, поэтому мы используем его для добавления динамических меток на фотографии из нашего раздела фотографий по мере их загрузки, а не для сохранения их на диск.

...