Je travaille sur un système d'avatar personnalisé pour un projet, mais je n'ai jamais beaucoup fait beaucoup avec le côté image de PHP. Je suppose que je dois utiliser GD d'une certaine manière, mais je ne sais pas où commencer.
Fondamentalement, il y a un tas d'images PNG transparentes pré-fabriquées. Les utilisateurs peuvent sélectionner 2 à 3 d'entre eux de personnaliser leur avatar, et je souhaite pouvoir prendre ces images et en sortir une seule image pour être stockée dans un dossier.
$image_1 = imagecreatefrompng('image_1.png');
$image_2 = imagecreatefrompng('image_2.png');
imagealphablending($image_1, true);
imagesavealpha($image_1, true);
imagecopy($image_1, $image_2, 0, 0, 0, 0, 100, 100);
imagepng($image_1, 'image_3.png');
Cela m'a aidé à créer une image PNG à partir de 3 autres fichiers PNG pour créer une image en filigrane avec un arrière-plan. J'espère que cela aide quelqu'un d'autre.
$bgFile = __DIR__ . "/background-layer-1.png"; // 93 x 93
$imageFile = __DIR__ . "/icon-layer-2.png"; // 76 x 76
$watermarkFile = __DIR__ . "/stars-layer-3.png"; // 133 x 133
(Est des étoiles blanches)
<?php
// Download the image files if we don't have them
function get_file($file, $from) {
if (!file_exists(__DIR__ . "/" . $file)) { file_put_contents(__DIR__ . "/" . $file, file_get_contents($from)); }
}
get_file("background-layer-1.png", "http://i.imgur.com/6pgf3WK.png");
get_file("icon-layer-2.png", "http://i.imgur.com/0sJt52z.png");
get_file("stars-layer-3.png", "http://i.imgur.com/1Tvlokk.png");
$bgFile = __DIR__ . "/background-layer-1.png"; // 93 x 93
$imageFile = __DIR__ . "/icon-layer-2.png"; // 76 x 76
$watermarkFile = __DIR__ . "/stars-layer-3.png"; // 133 x 133
// We want our final image to be 76x76 size
$x = $y = 76;
// dimensions of the final image
$final_img = imagecreatetruecolor($x, $y);
// Create our image resources from the files
$image_1 = imagecreatefrompng($bgFile);
$image_2 = imagecreatefrompng($imageFile);
$image_3 = imagecreatefrompng($watermarkFile);
// Enable blend mode and save full alpha channel
imagealphablending($final_img, true);
imagesavealpha($final_img, true);
// Copy our image onto our $final_img
imagecopy($final_img, $image_1, 0, 0, 0, 0, $x, $y);
imagecopy($final_img, $image_2, 0, 0, 0, 0, $x, $y);
imagecopy($final_img, $image_3, 0, 0, 0, 0, $x, $y);
ob_start();
imagepng($final_img);
$watermarkedImg = ob_get_contents(); // Capture the output
ob_end_clean(); // Clear the output buffer
header('Content-Type: image/png');
echo $watermarkedImg; // outputs: `http://i.imgur.com/f7UWKA8.png`
Les sorties:
Aussi peut être fait de cette manière. J'espère que cela sera utile pour les futurs visiteurs.
$base = imagecreatefrompng('your base image path');
//logo is transparent: in this case stackoverflow logo
$logo = imagecreatefrompng("path for image with transparent background");
//Adjust paramerters according to your image
imagecopymerge_alpha($base, $logo, 60, 60, 0, 0, 300, 200, 100);
header('Content-Type: image/png');
imagepng($base);
//@see: http://php.net/manual/en/function.imagecopymerge.php for below function in first comment
function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){
// creating a cut resource
$cut = imagecreatetruecolor($src_w, $src_h);
// copying relevant section from background to the cut resource
imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h);
// copying relevant section from watermark to the cut resource
imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h);
// insert cut resource to destination image
imagecopymerge($dst_im, $cut, $dst_x, $dst_y, 0, 0, $src_w, $src_h, $pct);
}
Exemple de travail: c'est une image de fond
[.____] C'est le logo Stackoverflow.
[.____]
Ceci est combiné résultat.
[.____]
Ce que vous voulez utiliser sont les utilitaires PHP ImageMagick .
Spécifiquement, la commande combineimages .