如何在PHP中将多个图像拼接成一个单独的图像?

I am bulding a facebook app,I need to switch multiple profile pictures into one large image. Is there any way possible in php?

See the example on http://www.php.net/manual/en/function.imagecopy.php and use imagecopy() multiple times.

I am new to this question, but I am developing a script to take images and stitch them together. Right now it only works if all the images are the same size, but I am working to change that and I welcome contributions. I've used this to make CSS image-hover/non-hover state graphics for web site:

    /**
     * Image stitching function.
     *
     * Now operates with images of varying heights as well as widths.
     *
     * @param array $files
     * An array of files. Each element is a path to the file in question.
     *
     * @param int $rows
     * The number of rows the end resulting image will have. The images
     * will be added to the new image in the order of the array divided
     * equally in number to the rows specified here.
     * 
     * @param int $action
     * An integer (or static define) of the action to take on the resulting
     * image.
     *  IMAGE_STITCH_DISPLAY - Display the item (default action).
     *  IMAGE_STITCH_SAVE - Save the image to the file system (path required).
     *  IMAGE_STITCH_RETURN - Return the resulting file pointer to the calling
     *                       function for processing there.
     *
     * @param string $path
     * The path of where to save the resulting new image.
     *
     * @return image $image
     * The image data that can have whatever done to it.
     */
    function image_stitch($files, $rows = 2, $action = IMAGE_STITCH_DISPLAY, $path = NULL) {
      foreach($files as $file) {
        $path = explode('.', $file);
        if ($path[count($path)-1] == 'png') {
          $images[] = imagecreatefrompng($file);
        } 
        else {
          $images[] = imagecreatefromjpeg($file);
        }
      }
      $number_of_images = count($images);
      $number_of_columns = ($number_of_images / $rows) - 1;
      $total_width = 0;
      $max_width = 0;
      $total_heights = array();
      $widths = array(array());
      $grid = array(array());
      for ($y = 1; $y <= $rows; $y++) {
        $this_height = $this_width = 0; 
        for ($x = 0; $x <= $number_of_columns; $x++) {
          if (empty($files[(( $y + ($x - 1)) + ($number_of_columns * ($y - 1)))])) {
            next;
          }
          $image_size = getimagesize($files[(( $y + ($x - 1)) + ($number_of_columns * ($y - 1)))]);
          $grid[$x][$y] = $images[(( $y + ($x - 1)) + ($number_of_columns * ($y - 1)))];
          $width = $image_size[0];
          $height = $image_size[1];
          $widths[$x][$y][] = $width;

          $this_width += $width;
          if ($height > $this_height) {
            $this_height = $height;
          }

          if ($x == 0 && $y > 1) {
            $total_heights[] = $this_height;
            if ($max_width < $this_width) {
              $max_width = $this_width;
            }
          }
        }
      }

      $total_heights[] = $this_height;
      if ($max_width < $this_width) {
        $max_width = $this_width;
      }

      $destination_image = imagecreatetruecolor($max_width, array_sum($total_heights));
      $black = imagecolorallocate($destination_image, 0, 0, 0);
      imagecolortransparent($destination_image, $black);
      imagealphablending($destination_image, FALSE);
      imagesavealpha($destination_image, TRUE);

      // place our images
      foreach($grid as $instance_key => $instance) {
        $height = $total_heights[$instance_key];
        foreach($instance as $reference_key => $reference) {
          imagecopyresampled($destination_image, $reference, $instance_key * 180, ($reference_key - 1) * 180, 0, 0, 180, 180, 180, 180);
        }
      }

      // Display the image if directed
      if ($action = IMAGE_STITCH_DISPLAY) {
        header('content-type: image/png');
        imagepng($destination_image);
        imagedestroy($destination_image);
        exit();
      }

      // Return the image if directed.
      if ($action == IMAGE_STITCH_RETURN) {
        return $destination_image;
      }

      // If we are saving the image, save it with no compression or filters.
      if (!$empty($path)) {
        imagepng($destination_image, $path, 0, PNG_NO_FILTER);
      }

      return TRUE;
    }