Scripts

Image to html

Ik zag eens een bestand op het internet wat met allenmaal gekleurde letters een plaatje werd. Toen wou ik er zelf een maken en heb ik dit script daar voor geschreven.

image-to-html
image_to_html.php
[code]
<?php
function image_to_html($source_img, $text = '#', $text_size = 10, $max_ex_time = 0)
{
	ini_set('max_execution_time', $max_ex_time);
	
	//Vervangen van de spaties die verpesten de 'layout'
	$text = str_replace(' ', '_', $text);
	
	switch(strtolower(get_extension($source_img)))
	{
		case'jpg':
		{
			$img = imagecreatefromjpeg($source_img);
			break;	
		}
		case'png':
		{
			$img = imagecreatefrompng($source_img);
			break;	
		}
		case'gif':
		{
			$img = imagecreatefromgif($source_img);
			break;	
		}
	}
		
	//Stop het script als er een error is.
	if (!$img)
	{
		exit;
	}
	
	
	//Krijg een array met elke letter van de tekst er in
	$text = preg_split('//', $text, -1, PREG_SPLIT_NO_EMPTY);
	
	//Deze gaan we nodig hebben omdat we zodalijk door de 
	//array van hierboven heen gaan om steeds de volgende letter te nemen.
	$text_lenght = count($text) -1;
	$i = 0;
	
		
	$last_colour 	= '';
	$current_colour = '';
	$img_width 		= imagesx($img);
	$img_hight 		= imagesy($img);

	ob_start();
	//Nog even snel de style er voor gooien
	echo"<style>
	font {
		line-height: 0.7;
		font-size: ".$text_size."px;
	}
	</style>";
	
	//Loop'en door het plaatje heen
	for ($cy=0; $cy < $img_hight; $cy++)
	{
		for ($cx=0; $cx < $img_width; $cx++)
		{
			$rgb = imagecolorat($img, $cx, $cy);
			$colour = imagecolorsforindex($img, $rgb);
				
			$last_colour = $current_colour;
			$current_colour = sprintf('%02x%02x%02x', $colour['red'], $colour['green'], $colour['blue']);
	
			//We kijken of de laatste kleur gelijk is aan de vorige dan hoeven we 
			//niet helemaal de font tag er weer omheen te zetten
			if ($last_colour == $current_colour)
			{
				//ze zijn het zelfde we kunnen gewoon de tekst echo'en
				echo $text[$i];
			}
			else
			{
				echo '</font><font style="color:#'.$current_colour.'">'.$text[$i];
			}
	
			//als we aan het einde zitten van ons word of zin beginnen we opnieuw.
			$i = ($i == $text_lenght) ? 0 : $i + 1; //Iemand enig idee waarom $i++ hier niet werkt?
		}
		echo "\n";
	}
	$_txt_img = ob_get_clean();
	return $_txt_img;
}


function get_extension($file)
{
	if (strpos($file, '.') === false)
	{
		return false;
	}

	$file = explode('.', $file);
	return array_pop($file);
}

?>
[/code]

voorbeeld.php
[code]
<?php
include('image_to_html.php');

//hoeft niet, maar maakt hiermee verkleint hij 
//het gene dat naar de browser gestuurd word
ob_start("ob_gzhandler");


echo image_to_html('plaatje.gif', 'Phphulp');
?>
[/code]

Reacties

0
Nog geen reacties.