php , gd, create watermark, change watermark text size and background color, imagecreatefromjpeg

只愿长相守 提交于 2020-07-02 03:12:01

问题


I need to create a watermark apply it on a picture and save it with a different name . The current script works pretty well but the only problem is that I need to increase the size of the "sample text" and change the background from black to white . I tried different scenarios , changed the opacity but still can't change the background color.

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:


Why use a stamp at all? I use the following code on one of my sites:

  $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);

This code runs fast enough that we use it to add dynamic labels on the fly to photos from our photo section as they're downloaded, rather than save them to disk.




回答2:


here in my code, i fixed some common mistakes like :

1) Watermark Text goes outside of the image.

2) PNG & JPG image error.

So i calculate image width and decide font size. so font size is Dynamic.

so you can just copy my method and paste where you want to use it.

function waterMark($SourceFile,$ext='png',$WaterMarkText)
{
    if( $ext == "jpg" or  $ext == 'jpeg')
        $image = imagecreatefromjpeg($SourceFile);
    else
        $image = imagecreatefrompng($SourceFile);

    list($width, $height) = getimagesize($SourceFile);
    $font = public_path('fonts/arial.ttf');
    $size = $width*4/100;  // calculating font size based on image width.

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

    $black = imagecolorallocate($image, 0, 0, 0);
    $white = imagecolorallocate($image, 255, 255, 255);
    imagettftext($image, $size, 0, $x + 1, $y + 1, $black, $font, $WaterMarkText);
    imagettftext($image, $size, 0, $x + 0, $y + 1, $black, $font, $WaterMarkText);
    imagettftext($image, $size, 0, $x + 0, $y + 0, $white, $font, $WaterMarkText);

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

    if ($SourceFile <> '') {
        imagejpeg ($image, $SourceFile, 100);
    } else {
        header('Content-Type: image/jpeg');
        imagejpeg($image, null, 100);
    };
    imagedestroy($image);
  return 1; // you can remove it...
}


来源:https://stackoverflow.com/questions/3720618/php-gd-create-watermark-change-watermark-text-size-and-background-color-ima

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!