Archief - SEARCH: Avatar creator voor website

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Stefkesplace

Legacy Member
Ik speel met de gedachten om op men website de mogelijkheid te hebben om bezoekers hun eigen avatar te laten aanmaken met ons logo op de achtergrond en hun naam of initialen ofzo door hen te laten invullen...
Waar vind ik zo'n voorbeeld hoe dit werkt?

orez

Legacy Member
denk niet bepaald dat er daar al bestaande voorbeelden voor te vinden zijn, dat je eerder zelf zult moeten gaan zoeken hoe images gecreëerd worden via bv een PHP.

Dit is wel iets heel specifiek dat je zoekt hé :)

Breen

Legacy Member
Je kan als je wil, die avatargenerator vrij simpel (in vergelijking met andere talen) in Flash creëren. Zoek een tutorial over BitmapData.

Je kan namelijk een Movieclip omvormen naar Bitmap en dan via php exporteren.

Radiance

Legacy Member
Wow, maar da's wel complex hoor, het kan evengoed met PHP alleen (GD2).

Als je wat met PHP overweg kan zou je hier wel aan uit moeten kunnen. Is een klasse die ik onlangs in mekaar gebokst heb om vlot dat soort van dingen te doen.
Noot : losjes gebaseerd op een image class van servi
PHP:
<?php

$avatar  = new Radiance_Image('ava.jpg');
$avatar->smartResize(60,60);
$avatar->merge('sitelogo.gif', 20, 20);
$avatar->save('fullava.jpg');
class Radiance_Image
{
	private $_image;
	private $_width;
	private $_height;
	private $_type;
	private $_attr;

	/**
	 * Constructor
	 *
	 * @param string URL to base image
	 */
	public function __construct($url = false)
	{
		if($url)
		{
			$image = $this->convertToImage($url);
			$this->_image = $image['image'];
			$this->_width = $image['width'];
			$this->_height = $image['height'];
			$this->_type = $image['type'];
			$this->_attr = $image['attr'];
		}
	}
	
	/**
	 * Convert given file to GD Image format and return properties
	 *
	 * @param string URL of image to convert
	 * @return array of image data or false on error
	 */
	private function convertToImage($url)
	{
		if(!file_exists($url))
		{
			return false;
		}
		list($image['width'], $image['height'], $type, $image['attr']) = getimagesize($url);
		switch ($type)
		{
			case 1 :
				$image['type'] = 'gif';
				$image['image'] = imagecreatefromgif($url);
				break;
			case 2 :
				$image['type'] =  'jpg';
				$image['image'] = imagecreatefromjpeg($url);
				break;
			case 3 :
				$image['type'] =  'png';
				$image['image'] = imagecreatefrompng($url);
				break;
			case 6 :
				$image['type'] = 'bmp';
				$image['image'] = imagecreatefromwbmp($url);
				break;
			default :
				$image['type'] = false;
				$image['image'] = false;
		}
		if($image['image'] !== false)
		{
			return $image;
		}
		return false;	
	}
	
	/**
	 * Output current image to given file
	 *
	 * @param string 
	 * @param unknown_type $type
	 * @return unknown
	 */
	public function save($location, $type = false)
	{
		if($type === false)
		{
			$type = $this->_type;
		}
		switch($type)
		{
			case 'gif' :
				imagegif($this->_image, $location, 100);
				break;
			case 'jpg' :
				imagejpeg($this->_image, $location, 100);
				break;
			case 'png' :
				imagepng($this->_image, $location, 100);
				break;
			case 'bmp' :
				imagewbmp($this->_image, $location, 100);
				break;
			default :
				return false;
		}
	}
	
	/**
	 * Resize image to given width & height, does NOT keep aspect ratio
	 *
	 * @param int new width
	 * @param int new height
	 */
	function resize($newWidth, $newHeight)
	{
	    $image = $this->_image;
    	$newImage = imagecreatetruecolor($newWidth,$newHeight);
    	imagecopyresampled($newImage, $image, 0, 0, 0, 0, $newWidth, $newHeight, $this->_width, $this->_height);
    	$this->_width = $newWidth;
    	$this->_height = $newHeight;
    	$this->_image = $newImage;
	}

	/**
 	 * Attempt to resize the image while keeping aspect ratio
 	 *
 	 * @param new maximum width
 	 * @param new maximum height
 	 */
	public function smartResize($maxWidth, $maxHeight)
	{
		$width 	= 	$this->_width;
		$height = 	$this->_height;
		$scale 	= 	$width / $height;
		if ( $height > $maxHeight ) 
		{
			$shrink		= $maxHeight / $height;
			$height 	= $maxHeight;
			$width		= (int) $width * $shrink;
		}
		if ( $width > $maxWidth ) 
		{
			$shrink		= $maxWidth / $width;
			$width		= $maxWidth;
			$height		= (int) $height * $shrink;
		}
		$this->resize($width, $height);
	}

	/**
	 * Merge image into the current one
	 *
	 * @param string URL to file
	 * @param int X coordinate to place upperleft corner
	 * @param int Y coordinate to place upperleft corner
	 * @param int % Transparency of merged image
	 */	
	public function merge($url, $x, $y, $transparancy = 100)
	{
		$small = $this->convertToImage($url);
		imagecopymerge($this->_image, $small['image'], $x, $y, 0,0, $small['width'], $small['height'], $transparancy);
	}
	
	public function getWidth()
	{
		return $this->_width;
	}
	
	public function getHeight()
	{
		return $this->_height;
	}
}




?>

servi

Legacy Member
Radiance zei:
Noot : losjes gebaseerd op een image class van servi


Had ge dat niet gezegd, ik had het eigenlijk nooit opgemerkt feitelijk :p
( Ik herken eigenlijk enkel die smartResize-functie om eerlijk te zijn )

Radiance

Legacy Member
servi zei:
Had ge dat niet gezegd, ik had het eigenlijk nooit opgemerkt feitelijk :p
( Ik herken eigenlijk enkel die smartResize-functie om eerlijk te zijn )
Ja, uw originele klasse werkte redelijke anders, maar heeft mij wel wat werk bespaart qua opzoeken van GD functies en idd dat smartresizen, ere wie ere toekomt :)

Breen

Legacy Member
Ik ga akkoord dat die PHP code heel nice is. Maar de engine van flash laat toe om gemakkelijk de gebruiker dingen te laten toevoegen en plaatsen (zelfs layers, zijn vrij makkelijk te implementeren) waarna dat alles naar BitmapData kan worden omgezet en dan doorgestuurd worden naar die prachtige php code ;).

We moeten meer samenwerken ;)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan