通过图像数组运行imagecreatefrompng但是数组只返回1个图像

时间:2014-11-11 09:48:39

标签: php image crop php-gd

我正在尝试裁剪图像的底部,这是我从远程网站获得的。 得到它也使用以下代码:

$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文件中获取Image Path,我使用xpath进行过滤。所以我完成的所有Image url都存储在一个数组中。但我的代码只生成了1张图片,其中包含了我需要的完美尺寸。

这是因为它最终只生成了1 img。也许还会发生,因为它只返回一个名为img。

的图像

问题:是否有人知道为什么它不会返回所有图片?

例如:

  1. 数组包含15个图像链接。
  2. 我在阵列中运行我的foreach循环。
  3. Foreach循环仅返回1张图片。

1 个答案:

答案 0 :(得分:0)

您的问题是由最后两行引起的:

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

这与在浏览器中打开单个图像文件(如.PNG)具有相同的效果。您不能同时查看多个图像文件,除非它们嵌入在HTML页面中。

如果要在浏览器中一次显示所有15个图像,则需要在处理时保存每个图像,然后输出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;