J'ai un tableau d'objets (image, texte ou rectangle) et j'essaie de créer une image parmi eux. Mais il me semble que chaque fois que j'insère l'un des éléments, les éléments précédents sont effacés. voici mon code:créer une image avec plusieurs éléments en PHP
if(isset($_GET['elements'])){
$elements = json_decode(stripslashes($_GET['elements']));
$gfx = imagecreate(160,120);
$width = 160;
$height = 120;
$white = imagecolorallocate($gfx, 255, 255, 255);
$id = $_GET['id'];
$username=$_GET['username'];
$name=$_GET['name'];
foreach ($elements as $element){
$type = $element->type;
switch($type){
case 'textBox':
text_thumb($element,$gfx);
break;
case 'image':
image_thumb($element,$gfx,$name,$username);
break;
case 'rectangle':
box_thumb($element,$gfx);
break;
}
}
header('Content-type: image/png');
imagepng($gfx,'../thumbnail/'.$username.'_'.$name.'_'.$id.'.png');
}
function text_thumb ($element,$gfx){
function wrap($fontSize, $angle, $fontFace, $string, $width){
$ret = "";
$arr = explode(' ', $string);
foreach ($arr as $word){
$teststring = $ret.' '.$word;
$testbox = imagettfbbox($fontSize, $angle, $fontFace, $teststring);
if ($testbox[4]-$testbox[0] > $width){
$ret.=($ret==""?"":"\n").$word;
} else {
$ret.=($ret==""?"":' ').$word;
}
}
return $ret;
}
$width = $element->width/5;
$left =$element->left/5;
$top =$element->top/5;
$string = $element->text;
$fontsize = 2.4;
$font = "../fonts/arial.TTF";
$fonth = imagefontheight($fontsize);
$text = wrap($fontsize, 0, $font, $string, $width);
imagettftext($gfx,$fontsize,0,$left,$top,$black,$font,$text);
}
function box_thumb ($element,$gfx){
$width = $element->width/5;
$height = $element->height/5;
$left =$element->left/5;
$top =$element->top/5;
$x2=$left+$width;
$y2=$top+$height;
$black = imagecolorallocate($gfx, 0, 0, 0);
imagefilledrectangle($gfx,$left, $top,$x2,$y2,$black);
}
function image_thumb ($element,$gfx,$name,$username){
$height = $element->height;
$width = $element->width;
$left =$element->left/5;
$top =$element->top/5;
$src =$element->src;
$extype = explode(".", $src);
$type=$extype[1];
if($type=="jpg"||$type=="JPG")$type="jpeg";
$creat="imagecreatefrom".$type;
$insert=$creat("../user_pics/view/{$username}_{$name}_{$src}");
imagecopyresampled($gfx, $insert, $left, $top, 0, 0, $width/5, $height/5, $width, $height);
}
Le code est utilisé comme webservice, voici un exemple de tableau éléments $:
Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[6] =>
[7] => stdClass Object
(
[src] => 019.png
[id] => 7
[type] => image
[width] => 635
[height] => 205
[top] => 395
[left] => 84
[page] => 2
)
[8] => stdClass Object
(
[type] => rectangle
[top] => 33
[left] => 90
[page] => 2
[width] => 602
[height] => 128
[id] => 8
)
[9] => stdClass Object
(
[type] => textBox
[top] => 182
[left] => 171
[page] => 2
[width] => 539
[height] => 154
[id] => 9
[text] => SINA
)
)
dois-je utiliser imagecopymerge ou est-il un moyen plus facile, Considérant que j'ai un nombre variable d'éléments dans l'image?
*** MISE À JOUR:
Je pensais que si je retire le « cas « image »: ... » une partie, à savoir que la créer de la boîte et du texte, il fonctionne très bien, et aussi si j'ai plusieurs images dans mon tableau, il comprend tous correctement, donc pourrait-il être à cause de "imagecopyresampled"?
comment utilisez-vous une fonction une fonction ? –
@Mihai Iorga vous pouvez définir des fonctions dans les fonctions en PHP, pas de problème avec ça. –
ouais, c'est bien tant que vous gardez le champ d'application à l'esprit, quelqu'un a une idée de mon problème? : S –