Запуск imagecreatefrompng массива изображений, но массив только возвращает 1 изображение

0

Я пытаюсь обрезать нижнюю часть изображения, которое я получаю с удаленного сайта. Также он работал со следующим кодом:

$u = $xmlString->xpath('//*[contains(@u, "/fds/")]');

foreach($u as $result) {
    $itemLinks = 'http://exampleurl/'.$result['u'].'.png';

    $in_filename = $itemLinks;
    list($width, $height) = getimagesize($in_filename);

    $offset_x = 0;
    $offset_y = 0;
    $new_height = $height - 264;
    $new_width = $width;

    $image = imagecreatefrompng($in_filename);
    $new_image = imagecreatetruecolor($new_width, $new_height);
    imagealphablending($new_image, false);
    imagesavealpha($new_image, true);
    $transparentindex = imagecolorallocatealpha($new_image, 255, 255, 255, 127);
    imagefill($new_image, 0, 0, $transparentindex);
    imagecopy($new_image, $image, 0, 0, $offset_x, $offset_y, $width, $height);

    header("Content-Type: image/png");  
    imagepng($new_image);
}

Единственная проблема с этим кодом заключается в следующем:

Я получаю путь изображения из удаленного XML файла, который я фильтровал с помощью xpath. Таким образом, все мои готовые URL-адреса изображения хранятся в массиве. Но мой код просто генерирует 1 изображение, которое содержит идеальный размер, который мне нужен.

Это происходит потому, что он просто генерирует 1 img в конце. Возможно, также происходит потому, что он просто возвращает 1 изображение с именем img.

Вопрос: Кто-нибудь есть идея, почему он не вернет все изображения?

Например:

  1. Массив содержит 15 ссылок на изображения.
  2. Я запускаю цикл foreach через массив.
  3. Цикл Foreach возвращает только 1 изображение.
Теги:
image
crop
php-gd

1 ответ

0
Лучший ответ

Ваша проблема вызвана двумя последними строками:

header("Content-Type: image/png");
imagepng($new_image);

Это имеет тот же эффект, что и открытие в вашем браузере одного файла изображения (например. PNG). Вы не можете просматривать несколько файлов изображений одновременно, если они не встроены в HTML-страницу.

Если вы хотите показать все пятнадцать изображений одновременно в браузере, вам нужно сохранить каждое изображение при его обработке, а затем вывести файл HTML, что-то вроде этого:

$images = '';
foreach($u as $result) {
    // your existing code...
    imagepng($new_image, './'.$result['u'].'.png');
    $images .= '<img src="'.$result['u'].'.png">';
}

// wrap this in valid HTML syntax (<head>, <body>, etc.)
echo $images;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню