Mam dośc poważny problem, bo jeszcze nigdy z czymś takim nie miałem do czynienia. Otóż mam kilka obrazków, powiedzmy 3-4 stałe i reszta innych wskazywanych. Innymi słowy mówiąc chciałbym generować miniaturkę produktu na allegro.

<?php class MultiImage { 'images'=>array(), 'max_width'=>1600 ); } } public function build($saveTo=null){ //rozmiary docelowego obrazu $outputWidth=0; $outputHeight=0; //offset do przeliczenia wlasciwej wysokosci $lastRow=0; //teraz obliczamy wymiary właściwego obrazu i rozkład obrazów foreach ($this->_options['images'] as $path) { if (($t[0]+$outputWidth) > $this->_options['max_width']) { $newRow=TRUE; } else { $outputWidth+=$t[0]; } if ($newRow) { $lastRow=$outputHeight; $outputHeight+=$t[1]; } else { if (($t[1]+$lastRow) > $outputHeight) { $outputHeight=$t[1]+$lastRow; } } } //czysty resource naszego pustego obrazu $newImage=imagecreatetruecolor($outputWidth, $outputHeight); //tutaj mozna pododawac jakies dodatkowe przygotowania //np. pokolorować tło //teraz przechodzimy do właściwego kopiowania obrazów na nowy $offsetX=1; $offsetY=1; $lastRow=0; foreach ($layout as $row) { $offsetX=1; foreach ($row as $path) { switch ($t[3]) { case IMAGETYPE_GIF: $image=imagecreatefromgif($path); break; case IMAGETYPE_PNG: $image=imagecreatefrompng($path); break; case IMAGETYPE_JPEG: $image=imagecreatefromjpeg($path); break; } imagecopyresampled($newImage, $image, $$offsetX, $offsetY, 1, 1, $t[0], $t[1], $t[0], $t[1]); $offsetX+=$t[0]; if ($t[1] > $lastRow) { $lastRow=$t[1]; } } $offsetY+=$lastRow; } //zapisujemy na dysk albio zwracamy do dalszej obróbki imagejpeg($newImage,$saveTo); } else { return $newImage; } } }
'max_width'=>800, 'images'=>array( '/tmp/image1.png', '/tmp/image2.jpg', '/tmp/image2.gif', '/tmp/image4.png' ) ); $savePath='/tmp/nowy.jpg'; $mm=new MultiImage($opcje); $mm->build($savePath);