[php5][GD] zmiana rozmiaru obrazków - wyświetla tylko jeden

0

Witam,

napisałem taką oto funkcję wykorzystującą GD do zmiany rozmiaru obrazka oraz do wyświetlenia ramki:

<?php
function resize($zdjecie)
{
$img = imagecreatefromjpeg($zdjecie);
$size = getimagesize($zdjecie);
$width = 140;
$height = $size[1] * $width/$size[0];
if ($height>105) {
$height = 105;
$width = $size[0] * $height/$size[1];
}
$im = imagecreatetruecolor($width,$height);
imagecopyresampled($im, $img, 0, 0, 0, 0, $width, $height, imagesx($img), imagesy($img)); 
$destinationSize  =  array(imagesx($im)+6, imagesy($im)+6);
$destination = imagecreatetruecolor($destinationSize[0],$destinationSize[1]);
$white = imagecolorallocate($destination, 255, 255, 255);
$border = imagecolorallocate($destination, 59, 70, 77);
$rog = imagecolorallocate($destination, 58, 68, 76);
imagefill($destination, 0, 0, $white);

imagecopyresampled($destination, $im, 3, 3, 0, 0, imagesx($im),imagesy($im),imagesx($im),imagesy($im));

//top
imageline($destination, 1,0, $destinationSize[0]-2,0, $border);
imagesetpixel($destination, 0,0, $rog);
//lewa
imageline($destination, 0,1,0,$destinationSize[1]-2, $border);
imagesetpixel($destination, 0,$destinationSize[1]-1, $rog);
//prawa
imageline($destination, $destinationSize[0]-1,1,$destinationSize[0]-1,$destinationSize[1]-2, $border);
imagesetpixel($destination, $destinationSize[0]-1,$destinationSize[1]-1, $rog);
//bottom
imageline($destination, 1,$destinationSize[1]-1, $destinationSize[0]-2,$destinationSize[1]-1, $border);
imagesetpixel($destination, $destinationSize[0]-1,0, $rog);

header('Content-Type: image/jpeg');

imagejpeg($destination);
}
resize("tlo.jpg");
resize("morze.jpg");
resize("morze2.jpg");
?>

Problem polega na tym, że nie mogę wyświetlić 3 obrazków na raz, bo kod wykona się takjakby raz dla jednego obrazka i na tym poprzestaje... Czy ktoś ma jakiś pomysł jak to naprawić, ewentualnie jak usprawnić skrypt? Do ImageMagick nie mam dostępu...

0

Wysyłasz nagłowek obrazka, i wysylasz go do usera, wiec nie dziw się ze skrypt nie wykona sie dalej.
Sposobów jest kilka, ale chyba najprościej bedzie zapisac obrazki po obróbce na dysku, a dopiero potem serwować je userowi

0

kod się dalej wykonuje no ale pomyśl jaki to ma sens
to tak jakbyś 3 obrazki .jpg połączył w jeden plik - wyświetli się tylko pierwszy bo w nagłówku jest zdefiniowana taka szerokość
albo to tak jakbyś złączył ze sobą dwa pliki .exe i myślał że po uruchomieniu tego złączonego pliku uruchomią się dwa programy na raz...
pomyśl co tak naprawdę chcesz zrobić
albo chcesz wyświetlić 3 obrazki osobne - wtedy robisz osobną stronę w html wyświetlającą te 3 obrazki:

obrazek1.php obrazek2.php obrazek3.php

i robisz 3 skrypty obrabiające odpowiednie obrazki (względnie jeden rozpoznający który obrazek ma zaserwować poprzez zmienną $_GET

albo łączysz fizycznie te 3 obrazki w jeden tak samo jak w programie graficznym - wtedy musisz zdefiniować że obrazek będzie 3 razy szerszy i pozostałe 2 skopiować na płótno tego pierwszego (albo nowego obrazka)

0

Propozycja taka, sprawdzona.
Potraktuj strone z kodem do resize jak sciezke do obrazka.
Ustawiaj w adresie parametry z nazwa obrazka (oczywiscie folder z obrazkami trzeba sobie gdzies na sztywno ustawic) oraz rozmiar jaki chcesz mu nadac.
Następnie W kodzie html piszesz sobie

<img src="image_resize.php?obrazek=nazwa&rozmiar=2">

Dzieki temu przegladarka będzie myślała że sciaga sobie obrazek z serwera a nie, że gdzieś tam w tle jest wykonywany jakiś skrypt php.

1 użytkowników online, w tym zalogowanych: 0, gości: 1