User Tools

Site Tools


php:kompost:grafikordensammlung

[PHP] Grafik Ordensammlung

Dies dient als Beispiel wie man Grafiken zusammensetzen kann.

Vorraussetzungen

- Alle Quellgrafiken sind im Unterordner 'img' - Du hast eine maximale Breite der Grafik $maxWidth - Du hast eine Standarthöhe der Zeilen $rowH - Jede Grafik wird in der Grösse so angepasst, dass sie die Zeilenhöhe $rowH als Höhe hat.

Code

(php;1)
<?php
/**
* @copyright    mpl by ERB software
*               All rights reserved
* @contact      stefan.erb@erb-software.com
*/

class Img{
	public function __construct($fileName, $path, $maxH){
		$info = getimagesize($this->path = $path.$fileName);
		$this->w = (($this->h = $maxH)/($this->srcH = $info[1]))*($this->srcW = $info[0]);
	}

	//öffnet die Quellgrafik und gibt die Ressource zurück
	private function getSource(){
		//Auswertung des Imagetypes -> http://ch.php.net/manual/de/function.image-type-to-mime-type.php
		switch(exif_imagetype($this->path)){
			case IMAGETYPE_PNG: return imagecreatefrompng($this->path);
			case IMAGETYPE_GIF: return imagecreatefromgif($this->path);
			case IMAGETYPE_JPEG: return imagecreatefromjpeg($this->path);                                
		} 
	}    
	
	//kopiert die Sourcegrafik in die Haubtgrafik $image
	public function copyIntoImage(&$image){
		imagecopyresampled($image, $this->getSource(), 
							$this->x, $this->y, 0, 0,
							$this->w, $this->h, $this->srcW, $this->srcH);
	} 
}

function loadSources(&$source){
	global $dim;
	static $x=0, $y=0;
	//Object erstellen
	$source = new Img($source, dirname(__FILE__)."/img/", $dim->rowH);

	//Wenn die voraussichtliche Breite breiter ist als die maximal zulässig
	//einen Zeilenumbruch einfügen
	if ($dim->maxW < ($x + $source->w)){
		$dim->h = ($y += $dim->rowH) + $dim->rowH;
		$x = 0; 
	}
	//Zielkoordinaten an die Grafikdefinition übergeben
	$source->x = $x;
	$source->y = $y; 
	//grösste Breite ermitteln
	$dim->w = max($dim->w, ($x += $source->w));    
}

//Settings
$dim = new stdclass;    //Object mit den Dimensionen der Zielgrafik
$dim->maxW = 100;       //maximale Breite in Pixel
$dim->rowH = 30;        //Zeilenhöhe in Pixel
//TODO: $sources flexibel zusammensetzen anhand von Daten
$sources = array('add.png', 'address-book-new.png', 'back.png', 'bottom.png');

//Die Grafikdefinitionen laden und die Grösse der Zielgrafik berechnen
array_walk($sources, 'loadSources');
//Zielgrafik erstellen
$image = imagecreate($dim->w, $dim->h);
//Alle Grafiken in die Zielgrafik kopieren
foreach($sources as $source){$source->copyIntoImage($image);}

//Header ausgeben
header ('Content-type: IMAGETYPE_PNG');
/** Grafik ausgeben */
imagepng($image);
/** temporäre Grafik zerstören */
imagedestroy($image);
?>

Files

php/kompost/grafikordensammlung.txt · Last modified: 11.12.2013 11:13:56 (external edit)