Adaugare sigla si text cu php la imagine

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
MelecaCristian
Mesaje:176

Adaugare sigla si text cu php la imagine

Buna, este posibil cu php sa creez o imagine care sa i se adauge si o sigla si un text?
Am scriptul de mai jos care adauga o sigla in imagine, si sub el ce am incercat sa il editez pentru a adauga si posibilitatea de a adauga si un text dar imi da eroare.

Cod: Selectaţi tot

<?php
$main_img = "http://sphotos-h.ak.fbcdn.net/hphotos-ak-ash4/429020_466465880056408_618248483_n.jpg"; // imagine fundal 
$watermark_img    = "https://lh5.googleusercontent.com/-tPLXra2s3bA/UL77G3f_F8I/AAAAAAAAAKE/BcnaS6yZKvc/s487/RenderedImage.png"; // sigla format png 
$padding     = 1; // neimportant
$opacity        = 100;  //opacitatea

$watermark  = imagecreatefrompng($watermark_img); // creeaza logo-ul
$image      = imagecreatefromjpeg($main_img); // creaza imaginea

if(!$image || !$watermark) die("Neah ceva nu merge ...");

$watermark_size     = getimagesize($watermark_img);
$watermark_width    = $watermark_size[0];  
$watermark_height   = $watermark_size[1];  

//setari de pozitionare a siglei
$image_size     = getimagesize($main_img);  
$dest_x         = $image_size[0] - $watermark_width - $padding;  
$dest_y         = "40";

// procesarea imaginii final
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $opacity);

// returneaza imaginea procesata
header("content-type: image/jpeg");   
imagejpeg($image);  
// goleste memoria.
imagedestroy($image);  
imagedestroy($watermark);  
?>
Editat de mine:

Cod: Selectaţi tot

<?php
$main_img = "http://sphotos-h.ak.fbcdn.net/hphotos-ak-ash4/429020_466465880056408_618248483_n.jpg"; // imagine fundal 
$watermark_img    = "https://lh5.googleusercontent.com/-tPLXra2s3bA/UL77G3f_F8I/AAAAAAAAAKE/BcnaS6yZKvc/s487/RenderedImage.png"; // sigla format png 
$text = "acesta este un DEMO"; // text
$padding     = 1; // neimportant
$opacity        = 100;  //opacitatea

$watermark  = imagecreatefrompng($watermark_img); // creeaza logo-ul
$image      = imagecreatefromjpeg($main_img); // creaza imaginea
$textwh = @imagecreate(110, 20) ; //propietati text
$text_color = imagecolorallocate($textwh, 233, 14, 91); // culoare text

if(!$image || !$watermark) die("Neah ceva nu merge ...");

$watermark_size     = getimagesize($watermark_img);
$watermark_width    = $watermark_size[0];  
$watermark_height   = $watermark_size[1];  

//setari de pozitionare a siglei
$image_size     = getimagesize($main_img);  
$dest_x         = $image_size[0] - $watermark_width - $padding;  
$dest_y         = "40";

// procesarea imaginii final
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $opacity,$textwh, 1, 5, 5,  $text, $text_color);

// returneaza imaginea procesata
header("content-type: image/jpeg");   
imagejpeg($image);  
// goleste memoria.
imagedestroy($image);  
imagedestroy($watermark);  
imagedestroy($textwh);
?>
si imi da eroare:

Cod: Selectaţi tot

Warning: Wrong parameter count for imagecopymerge() in /home/desehixc/public_html/app/test/poza.php on line 27

Warning: Cannot modify header information - headers already sent by (output started at ..../poza.php:27) in ..../poza.php on line 31
„Uneori o greşeală poate fi tot ce este necesar pentru o realizare valoroasă.” — Henry Ford

MarPlo Mesaje:4343
Eroarea aceea indica faptul ca nu ai adaugat numarul corespunzator de argumente la functia imagecopymerge(), are 9 parametri, vezi cum se foloseste in manualul php la pagina:
php.net/manual/en/function.imagecopymerge.php

Daca vrei sa adaugi o imagine si un text (sau 2 imagini separate) la o alta imagine cu php, merge folosind de 2 ori functia imagecopymerge() .
Incearca sa folosesti /adaptezi acest script dupa cum iti trebuie.

Cod: Selectaţi tot

<?php
$main_img = "http://sphotos-h.ak.fbcdn.net/hphotos-ak-ash4/429020_466465880056408_618248483_n.jpg";   // imagine fundal 
$watermark_img = "https://lh5.googleusercontent.com/-tPLXra2s3bA/UL77G3f_F8I/AAAAAAAAAKE/BcnaS6yZKvc/s487/RenderedImage.png"; // sigla format png 
$text = "acesta este un DEMO";    // text
$padding = 1;
$opacity = 100;     //opacitatea

$watermark = imagecreatefrompng($watermark_img);     // creeaza logo-ul
$image = imagecreatefromjpeg($main_img);      // creaza imaginea

// creaza imaginea cu textul
$imtxt = @imagecreate(140, 18) or exit("Cannot Initialize new GD image stream");
$background_color = imagecolorallocate($imtxt, 233, 14, 91);
$text_color = imagecolorallocate($imtxt, 233, 233, 233);
imagestring($imtxt, 3, 5, 5, $text, $text_color);

if(!$image || !$watermark) exit("Neah ceva nu merge ...");

// dimensiuni imagine sigla
$watermark_size = getimagesize($watermark_img);
$watermark_width = $watermark_size[0];  
$watermark_height = $watermark_size[1];  

// setari de pozitionare a siglei
$image_size = getimagesize($main_img);  
$dest_x = $image_size[0] - $watermark_width - $padding;  
$dest_y = 40;

// procesarea imaginii (uneste sigla la imaginea principala, apoi tot  la ea uneste imaginea-text)
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $opacity);
imagecopymerge($image, $imtxt, $dest_x, $dest_y, 0, 0, 140, 18, $opacity);

// returneaza imaginea procesata
header("content-type: image/jpeg");   
imagejpeg($image);

// goleste memoria
imagedestroy($image);
imagedestroy($watermark);
imagedestroy($imtxt); 

MelecaCristian Mesaje:176
Multumesc, am vazut si acolo exemplul.
Dar nu mam gandit sa fac 2 imagecopymerge().

Am incercat sa ii adaug si un font la:

Cod: Selectaţi tot

imagecopymerge($image, $imtxt, $dest_x, $dest_y, $font, 0, 0, 140, 18, $opacity); 
Nu merge. Trebuie sa folosesc alta propietate in loc de : imagecopymerge()?
„Uneori o greşeală poate fi tot ce este necesar pentru o realizare valoroasă.” — Henry Ford

MarPlo Mesaje:4343
Fontul nu tine de functia imagecopymerge(), ci de imaginea cu textul.
Nu stiu sigur cum merge, cred ca textul trebuie creat cu functia imagefttext(), vezi pe php.net exemplele (si ce functii mai sunt pe acolo) de la adresa:
php.net/manual/en/function.imagefttext.php

MelecaCristian Mesaje:176
Am cautat pe internet si am gasit unul gata facut.
phpjabbers.com/put-watermark-on-images-using-php-php20.html
Aparent nu are nici o greseala.

Cod: Selectaţi tot

<?php
$SourceFile = 'http://sphotos-h.ak.fbcdn.net/hphotos-ak-ash4/429020_466465880056408_618248483_n.jpg'; //imagine bg
$DestinationFile = "http://i0.wp.com/www.protectiamediului.org/wp-content/plugins/buddypress/bp-core/images/mystery-man.jpg"; //sigla
$WaterMarkText = $_GET['nume'];    // text
watermarkImage ($SourceFile, $WaterMarkText, $DestinationFile);

function watermarkImage ($SourceFile, $WaterMarkText, $DestinationFile) { 
   list($width, $height) = getimagesize($SourceFile);
   $image_p = imagecreatetruecolor($width, $height);
   $image = imagecreatefromjpeg($SourceFile);
   imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width, $height); 
   $black = imagecolorallocate($image_p, 0, 0, 0);
   $font = 'font.TTF';
   $font_size = 10; 
   imagettftext($image_p, $font_size, 0, 10, 20, $black, $font, $WaterMarkText);
   if ($DestinationFile<>'') {
      imagejpeg ($image_p, $DestinationFile, 100); 
   } else {
      header('Content-Type: image/jpeg');
      imagejpeg($image_p,null, 100);
   };
   imagedestroy($image); 
   imagedestroy($image_p); 
};
?>
Merge daca nu ii pun image la variabila $DestinationFile , imi da eroarea

Cod: Selectaţi tot

Warning: imagejpeg() [function.imagejpeg]: Unable to access http://i0.wp.com/www.protectiamediului.org/wp-content/plugins/buddypress/bp-core/images/mystery-man.jpg in /test/poza.php on line 17

Warning: imagejpeg() [function.imagejpeg]: Invalid filename in /test/poza.php on line 17
„Uneori o greşeală poate fi tot ce este necesar pentru o realizare valoroasă.” — Henry Ford

MarPlo Mesaje:4343
Al doilea argument de la functia imagejpeg() este adresa si numele de salvare a imaginii create, cand vrei sa o salvezi pe server.
Dar cum la $DestinationFile e o adresa externa unde php nu poate crea fisierul, da eroare
Deci, daca vrei sa o salvezi pe server intr-un director in care php are permisiuni de scriere, sintaxa e asa:

Cod: Selectaţi tot

imagejpeg($image, 'dirimg/nume.jpg', 100); 
Daca vrei sa fie afisata direct, se adauga header() inainte, apoi functia imagejpeg() doar cu un argument.

Cod: Selectaţi tot

header('Content-Type: image/jpeg');
imagejpeg($image); 

Subiecte similare