Autor Zpráva
pe3k
Profil *
pracujem so zmensovanim obrazkov, vsetko funguje ok, len potreboval by som este zmenseny obrazok "doplnit" do potrebnych rozmerov,

mam. napr. original obrazok 450x440 ... po uploudnuti ho zmensi do stvorca 80x80 stym ze vysledne rozmery su 80x77 a potreboval by som ten obrazok doplnit bielou alebo inou farbou do rozmeru 80x80, je na to v phpcku nejaka funkcia ktorou by som to spravil ?
BetaCam
Profil
pe3k

Tady máš takovej základ z čeho můžeš vycházet. Je to bez ochran fungovat by to mělo jen s jpg, neni to resize, ale pouze fill obrázku na určitou velikost. Je tam "centrování" takže by obrázek měl bejt vždy na středu. Jinak je to psané narychlo takže zrovna moc pěknej návrh ta třída nemá, ale na pochopení by ti to mělo stačit.

class ImageFill{
	private $fillColorRed = 255;
	private $fillColorBlue = 255;
	private $fillColorGreen = 255;
	private $fillWidth = 80;
	private $fillHeight = 80;
	private $image;
	private $imageWidth;
	private $imageHeight;
	private $output;

	public function setFillWidth($width){ $this->fillWidth = $width; return $this; }
	public function setFillHeight($height){	$this->fillHeight = $height; return $this; }
	public function setFillColor($red, $green, $blue){
		$this->fillColorRed = $red;
		$this->fillColorGreen = $green;
		$this->fillColorBlue = $blue;
		return $this;
	}
	public function setImage($image){
		$this->image = imagecreatefromjpeg($image);
		$data = getimagesize($image);
		$this->imageWidth = $data[0];
		$this->imageHeight = $data[1];
		return $this;
	}
	public function execute(){
		$this->output = imagecreatetruecolor($this->fillWidth, $this->fillHeight);
		$color = imagecolorallocate($this->output, $this->fillColorRed,
									 $this->fillColorGreen, $this->fillColorBlue);
		imagecopy($this->output, $this->image,
					round(($this->fillWidth/2)-($this->imageWidth/2)),
					round(($this->fillHeight/2)-($this->imageHeight/2)),
					0, 0, $this->fillWidth, $this->imageHeight);
		imagefill($this->output, 0, 0, $color);
		return $this;
	}
	public function save($path){
		imagejpeg($this->output, $path);
		imagedestroy($this->image);
		imagedestroy($this->output);
	}
	public function render(){
		header('Content-Type: image/jpeg');
		imagejpeg($this->output);
		imagedestroy($this->image);
		imagedestroy($this->output);
	}
}

$obr = new ImageFill();
$obr->setImage('obrazek.jpg')
	->setFillWidth(200)
	->setFillHeight(200)
	->setFillColor(200,200,100)
	->execute();
$obr->render();


metoda setImage() - nastavení cesty k obrázku
metoda setFillWidth() - nastavení na jakou šířku se má obrázek doplňovat
metoda setFillHeight()- nastavení na jakou výšku se má obrázek doplňovat
metoda setFillColor() - nastavení barvy kterou se bude doplňovat ( RGB )
metoda execute() - doplní obrázek na požadovanou velikost
metoda render() - pošle obrázek na výstup
metoda save() - nastavení cesty pro uložení obrázku na disk a jeho uložení

Doufám že ti to bude jasné

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0