Home » Php » php – Create a picture with GD containing other images

php – Create a picture with GD containing other images

Posted by: admin July 12, 2020 Leave a comment


I would like to create a picture in PHP with GD composed by different other pictures. For example I have 6 pictures (or more) and I would like to create ONE picture who contain these different pictures.

The Difficulty is that my final picture must have a fixed width and height (304×179), so if the different pictures are too big they must be cut. This is an example from IconFinder :

This picture have 6 images

This picture is composed by 6 images, but the 3rd bird (green) is cutted, and the 4, 5 and 6 are cutted in the bottom. This is what I want, can you give me some help to write this code in PHP ?


How to&Answers:

Create your primary image and consider it your “canvas.”

From there, use imagecopy() to copy the smaller images into the canvas image.

See this for example:

header('Content-Type: image/jpg');
$canvas = imagecreatetruecolor(304, 179);
$icon1 = imagecreatefromjpeg('icon.jpg');
$icon2 = imagecreatefromjpeg('icon2.jpg');
// ... add more source images as needed
imagecopy($canvas, $icon1, 275, 102, 0, 0, 100, 100);
imagecopy($canvas, $icon2, 0, 120, 0, 0, 100, 100);
// ... copy additional source images to the canvas as needed

In my example, icon.jpg is a 100×100 image which I am placing in the canvas such that its top left corner is located at 275, 102 in the canvas, which cuts off the right side.


I adjusted the code to be more similar to what you’re doing.


Here a none tested modify spinet from one of my scripts, hope it can be usefull:

    header('Content-type: image/png');

    $image = array() //Populate this array with the image paths

    //Create the Letters Image Objects
      foreach($image as $a){
        $image['obj'][] = imageCreateFromPNG($a);

      $canvasW = 300;
      $canvasH = 300;

    //Create Canvas
      $photoImage = imagecreatetruecolor($canvasW,$canvasH);
      imagesavealpha($photoImage, true);
      $trans_color = imagecolorallocatealpha($photoImage, 0, 0, 0, 127);
      imagefill($photoImage, 0, 0, $trans_color);

    //Merge Images
      $Offset_y = 0;
      $images_by_row = 3;
      $images_rows_height = 100; // height of each image row
      $counter = 0;

      foreach($image['obj'] as $a){

        $width = ceil(imagesx($a));
        $height = ceil(imagesy($a));

        if(!isset($offset)){ $offset = 1; }

        imageComposeAlpha($photoImage, $a, $offset, $Offset_y,$width,$height);

        if($offset >= 1){
          $offset = $offset + $width;

        //Check if new row next time
        if($counter >= $images_by_row){
            $offset_y += $images_rows_height;