Во-первых, вы должны рассмотреть возможность использования image copy resampled для лучшего качества результата от процесса.
Затем вам необходимо правильно использовать функцию imagejpeg, в настоящее время вы просто загружаете JPG и вывозите их напрямую, что может быть тем, что вы хотите, но вы находитесь в цикле, и вы не можете напрямую загружать сразу несколько изображений в тот же файл. Это также означает, что изображение, которое вы видите (или нет), является окончательным изображением в наборе.
Ваша проблема заключается в том, что цикл for
выполняется три раза, но у вас есть только данные, связанные с первыми двумя экземплярами, но третий экземпляр пуст, и поскольку он является самым последним, это единственный экземпляр, выводимый в браузер.
Итак:
1) Сохранение изображений вы сгенерированные с imagejpeg($data,$filename);
. Вы можете определить имя файла как $filename = $img+3.".jpg";
или подобное.
2) Было бы намного проще отлаживать и читать ваш код, если бы вы использовали массивы вместо числовых переменных, это очень грязный способ написания кода!
3) Если вы хотите выводить изображение непосредственно в браузере нужно PHP, чтобы поставить заголовок, такие как header('Content-Type: image/jpeg');
перед тем вывода содержимого imagejpeg
.
Перепев вашего код:
$w = 100;
$h = 400;
$img[1] = imagecreatefromjpeg('image1.jpg');
$img[2] = imagecreatefromjpeg('image2.jpg');
for ($i = 3; $i < 5; $i++) {
$img[$i] = imagecreatetruecolor($h, $h);
$j = $i -2;
imagecopyresampled($img[$i], $img[$j], 0, 0, 0, 0, $h, $h, $w, $h,);
// this function also contains destination width and destination
// height, which are equal to the size of the destination image so
// are set as $h, $h in the function above.
$img[$i] = imagerotate($img[$i], 90, 0);
$img[$i] = imagecrop($img[$i], array(0, 0, $h, $w));
$filename = "image-".$i.".jpg";
imagejpeg($img[$i], $filename);
imagedestroy($img[$i]);
imagedestroy($img[$j]);
}
и вы получаете ошибки в журнале? – RamRaider
no, nothing ... – Dick