Создайте изображение с GD, содержащим другие изображения

Я хотел бы создать изображение в PHP с GD, составленным различными другими изображениями. Например, у меня есть 6 изображений (или больше), и я хотел бы создать ОДНО изображение, кто содержит эти различные изображения.

Трудность состоит в том, что мое конечное изображение должно иметь фиксированную ширину и высоту (304x179), поэтому если различные изображения являются слишком большими, они должны быть сокращены. Это - пример от IconFinder:

This picture have 6 images

Это изображение составлено 6 изображениями, но 3-я (зеленая) птица является cutted, и 4, 5 и 6 являются cutted в нижней части. Это - то, что я хочу, можно ли дать мне некоторую справку для написания этого кода в PHP?

Спасибо

6
задан Glorfindel 28 July 2019 в 03:06
поделиться

2 ответа

Здесь непроверенный спинет модификации из одного из моих скриптов, надеюсь, он может быть полезен:

    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);
      }unset($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){
        $counter++;

        $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){
          if($images_by_row%$counter){
            $offset_y += $images_rows_height;
          }
        }

      }unset($a);

      imagepng($photoImage);
0
ответ дан 8 December 2019 в 18:33
поделиться

Создайте свое основное изображение и считайте его своим «холстом».

Оттуда используйте imagecopy () , чтобы скопировать меньшие изображения в изображение холста.

См. Это для примера:

<?php
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
imagejpeg($canvas);
?>

В моем примере icon.jpg - это изображение размером 100x100, которое я помещаю на холст таким образом, чтобы его верхний левый угол располагался на 275, 102 на холсте. , который обрезает правую сторону.

Править

Я скорректировал код, чтобы он был больше похож на то, что вы делаете.

13
ответ дан 8 December 2019 в 18:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: