Bilder zusammenführen mit PHP

Heute stand ich vor dem Problem, das ich mit PHP zwei dynamisch generierte Bilddateien zusammenfügen wollte.

Das Problem konnte ich mittels Imagick lösen:


$src1 = new Imagick("hintergrund.png");
$src2 = new Imagick("ebene2.png");

$src1->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$src1->setImageArtifact('compose:args', "1,0,-0.5,0.5");
$src1->compositeImage($src2, Imagick::COMPOSITE_DEFAULT, 206, 58);
$src1->writeImage("fertig.png");

Die beiden letzten Argumente in Zeile 5 sind die x und y Koordinaten auf dem Hintergrundbild, wo das neue Bild eingefügt werden soll.

 

Artikelbild: https://www.flickr.com/photos/riebart/4466482623

Plugin in PHP – Klasse in OOP

Wie ich angekündigt habe, möchte ich euch meine Pluginklasse erneut vorstellen.
Diesmal aber in OOP.

Damit jedes Plugin verbindliche Klassen zur Verfügung stellt, erstellen wir ein Interface:

Datei IgPlugin.php

<?php
	interface IgPlugin
	{

		public function getName();
		public function setName($name);

		public function getVersion();
		public function setVersion();

		public function getAutor();
		public function setAutor();

		public function install();
		public function update($version);
		public function unistall();

		public function run();
	}
?>

Das Plugin ist dann folgendermaßen aufgebaut:

</pre>
<?php

	require_once("class/IgPlugin.php");
	
	class test implements IgPlugin
	{
		private $name = "TestPlugin";
	
		public function getName() { return $this->name; }
		public function setName($name){}
		
		public function getVersion(){}
		public function setVersion(){}
		
		public function getAutor(){}
		public function setAutor(){}
		
		public function install(){}
		public function update($version){}
		public function unistall(){}
		
		public function run(){ echo "Plugin l&auml;uft"; }
	}
	
?>

Die Datei gPlugin.php ist nun die Klasse für das Laden der Plugins:


<?php
	
	/**
	 * Klasse gPlugin
	 *
	 * Klasse zum Starten, Installieren, Updaten und Deinstallieren
	 * von Plugins
	 *
	 * @author Alexander Grüßung
	 * @version 2.0
	 */
	 
	class gPlugin
	{
		/**
		 * private field
		 */
		private $pluginName;
		
		/**
		 * private field
		 */
		private $pluginInstance;
	
		/**
		 * Konstruktor lädt Plugin in den Speicher
		 */
		public function __construct($pluginName)
		{
			$this->setPluginName($pluginName);
			$this->loadPlugin();
		}
		
		//Getter und Setter für PluginName
		private function setPluginName($pN) { $this->pluginName = $pN; }
		private function getPluginName() { return $this->pluginName; }
		
		//Getter und Setter für PluginInstance
		private function setPluginInstance($instance) { $this->pluginInstance = $instance; }
		private function getPluginInstance() { return $this->pluginInstance; }
	
		/**
		 * Funktion bindet Plugindatei ein und
		 * lädt Instanz in den Speicher
		 */
		private function loadPlugin()
		{
			if (file_exists($this->getPluginName().".php"))
			{
				require_once($this->getPluginName().".php");
				$name = $this->getPluginName();
				$this->setPluginInstance(new $name());
				
				if ( ($this->getPluginInstance() instanceof IgPlugin) == false)
				{
				 trigger_error("Interner Pluginfehler: Interface wird nicht implementiert", E_USER_ERROR);
				}
				
			}
			else
			{
				trigger_error("Plugin nicht gefunden", E_USER_ERROR);
			}
		}
		
		/**
		 * Plugin starten
		 */
		public function runPlugin()
		{
			//TODO Prüfen ob Plugin installiert ist
			$this->getPluginInstance()->run();
		}
	
	}
?>

Hier eine Beispieleinbindung:

<?php
	require_once("class/gPlugin.php");
	
	$p = new gPlugin("test");
	$p->runPlugin();
	
?>

 
Damit viel Spaß mit der Klasse!

gFramework: Fortschritte mit Bootstrap

Gestern schrieb ich, dass gFramework mit Bootstrap kompatibel sein soll.
Auch schrieb ich, dass der Nutzer im Editor Elemente, wie eine Hero- Unit, erzeugen kann.

Heute möchte ich bereits einen Screenshot liefern, dass das bereits funktioniert.

Erst der Quellcode im Editor:

editor

Der Button kann zwar auch via [button primary small]Newsecke[/button] erzeugt werden, allerdings kommt der IE damit nicht klar, da ich folgende Code erzeuge:

<button class="btn btn-primary btn-small">Newsecke</button>

Und der IE mag das Buttonelement, umschlossen von einem a-Tag, nicht.

Also habe ich einfach einen Link mit CKEditor erzeugt und diesen die Styleklassen „btn btn-primary btn-small“ zugewiesen.

Und hier das Ergebnis:

NeuStart

Sieht doch schick aus 😉