Jump to content

imagecreatefrompng help.


ripkjs

Recommended Posts

I stumbled upon this script to check for the server status. After making my own  custom images, Some of the colors don't transfer over correctly after the script. I'm pretty new to php and scripting in general, but with the help of google and knowing the general idea behind code, I was able to modify it to fit my needs. Here is an example of the difference in images before and after. It seems its putting a glow on certain parts of just the population images. The status images for the background seem to be untouched. I'm sure the way I customized it was sloppy and a better way of doing it, but for now, all I'm worried about is getting the images to appear correctly. Can anyone explain what is happening here and why? Thanks in advance!

 

Note: All images used are .png

 

comparison.jpg

 

<?php

##
## WoW Server Status
## Version 4.1	
## Copyright 2008 Nick Schaffner
## http://53x11.com
##

function wow_ss_global() {

/*
##		Here you can preset all of the default variables for the script.
##		These variables can also be set when calling the script.
*/

$wowss['realm']				= "Whisperwind";	// Your full Realm (server) name
$wowss['display']			= 'full';				// (full | half | text | none) displays full or half image, text or set to none to return an array
$wowss['region']			= 'us';					// (us | eu) set your server location
$wowss['update_timer']		= 1;					// Minutes between status update refresh
$wowss['data_path']			= '/home/content/m/d/s/mdstanford9/html/forum/images/wowss';				// Path to your 'wowss' folder (you may need to prepend this with your root path, 'root/public_html' etc)
$wowss['image_type']		= 'png';				// (png | gif) image type output

/*
##		These are the default messages outputed by the text version of the script.
*/

$wowss['up'] 				= 'Realm Up';			// Set your "Realm Up" message
$wowss['down'] 				= 'Realm Down';			// Set your "Realm Down" message
$wowss['max']				= 'Max (Queued)';		// Set Maxed (Queued)
$wowss['high']				= 'High';				// Set High Population
$wowss['medium']			= 'Medium';				// Set Medium Population
$wowss['low']				= 'Low';				// Set Low Population
$wowss['pve']				= 'PvE';				// Name for PvE servers
$wowss['pvp']				= 'PvP';				// Name for PvP servers
$wowss['rp']				= 'RP';					// Name for RP servers
$wowss['rppvp']				= 'RPPvP';				// Name for RpPVP servers
$wowss['offline']			= 'Offline';			// Set Offline Message (for when status is unavailable)
$wowss['error']				= 'Sever Error';		// Set Error Message

/*
##		Uncomment these variables at YOUR OWN RISK.  These overide default script settings		
*/

## $wowss['show_language'] 	= 'yes';				// (yes | no) Force script to display language type	(EU realms display language by default)
## $wowss['xml_url'] 		= 'http://www.worldofwarcraft.com/realmstatus/status.xml';	// URL to XML status page
## $wowss['server_font'] 	= 'silkscreen.ttf'; 	// Font for Server names
## $wowss['type_font'] 		= 'silkscreenb.ttf'; 	// Font for all other type

################################	
################################ PHP Magic Below, Avoid editing if you don't know what you are doing 
################################

$wowss['get_array'] = array('realm','update_timer','display','region','data_path','image_type');
foreach ($wowss['get_array'] as $value) {
	if($_GET[$value])
		$wowss[$value] = trim(stripslashes($_GET[$value]));
}
$wowss['realm'] = str_replace('é','e',$wowss['realm']);

$wowss['us_xml'] = 'http://www.worldofwarcraft.com/realmstatus/status.xml';
$wowss['eu_xml'] = 'http://www.wow-europe.com/realmstatus/index.xml';

$wowss['us_codes'] = array(
	'type' => array(1 => 'pve', 2 => 'pvp', 3 => 'rp', 4 => 'rppvp'),
	'status' => array(1 => 'up', 2 => 'down'),
	'population' => array(0 => 'offline', 1 => 'low', 2 => 'medium', 3 => 'high', 4 => 'max')	
);

$wowss['eu_codes'] = array(
	'type' => array('pve' => 'pve', 'pvp' => 'pvp', 'rp-pve' => 'rp', 'rp-pvp' => 'rppvp'),
	'status' => array('realm down' => 'down', 'realm up' => 'up'),
	'population' => array('recommended' => 'low', 'medium' => 'medium', 'full' => 'high')
);

if(substr($wowss['data_path'],-1) != '/')
	$wowss['data_path'] .= '/';

return $wowss;

}

function wow_ss($realm = 0,$display = 0, $region = 0, $update_timer = 0,$data_path = 0, $image_type = 0) {

$wowss = wow_ss_global();
$realm_status = array();
if($realm)
	$realm_status['realm'] = $realm;
else
	$realm_status['realm'] = $wowss['realm'];

## Overide default values from script call
foreach ($wowss['get_array'] as $value) {
	if($$value)
		$wowss[$value] = $$value;
}

$realm_status['script_errors'] = array();
if(strtolower($wowss['region']) == 'us')
	$realm_status['language'] = 'us';

## Verify data path
if(is_dir($wowss['data_path'])) {

	if(!$wowss['xml_url'])
		$wowss['xml_url'] = $wowss[strtolower($wowss['region']).'_xml'];
	$xml_file = 'wowss-'. wow_ss_sfn($wowss['region']) .'-'. substr(md5($wowss['xml']),0,16) .'.xml';

	## Check if we need to update XML cache
	clearstatcache();
	if(file_exists($wowss['data_path'].$xml_file)) {
		if(time()-($wowss['update_timer']*60) > filemtime($wowss['data_path'].$xml_file))
			$update = true;
	}
	else
		$update = true;

	## Fetch XML
	if($update) {
		$data = @file_get_contents($wowss['xml_url']);
		if(strlen($data) > 300) {
			## Don't write data unless it is there
			$handle = fopen($wowss['data_path'].$xml_file,"w");
			fwrite($handle,$data);
			fclose($handle);
		} else
			$realm_status['script_errors'][] = 'Unable to access remote XML file.';
	}
	$xml = @strtolower(@file_get_contents($wowss['data_path'].$xml_file));

	## Parse XML
	if($xml) {
		$xml = str_replace('é','e',$xml);

		## Parse US XML
		if(strtolower($wowss['region']) == 'us') {
			preg_match('/<r n="'. strtolower(str_replace("'",'&#039;',$wowss['realm'])) .'" t="([0-9])" s="([0-9])" l="([0-9])"\/>/',$xml,$status_array);
			## [1] = type, [2] = status, [3] = population
			if(count($status_array) == 4) {
				$realm_status['type'] = $wowss['us_codes']['type'][$status_array[1]];
				$realm_status['status'] = $wowss['us_codes']['status'][$status_array[2]];
				$realm_status['population'] = $wowss['us_codes']['population'][$status_array[3]];
			}
		}
		## Parse EU XML
		if(strtolower($wowss['region']) == 'eu') {
			preg_match('/<title>\s*'. strtolower($wowss['realm']). '\s*<\/title>.*<\/item>/msU',$xml,$match);
			preg_match('/domain="population">(.*)</',$match[0],$status_array);
			if(!$status_array[1])
				$realm_status['population'] = 'medium';
			else
				$realm_status['population'] = $wowss['eu_codes']['population'][$status_array[1]];

			preg_match('/domain="status">(.*)<.*domain="language">(.*)<.*domain="type">(.*)<.*domain="queue">(.*)</msU',$match[0],$status_array);
			$realm_status['status'] = $wowss['eu_codes']['status'][$status_array[1]];
			$realm_status['language'] = $status_array[2];
			$realm_status['type'] = $wowss['eu_codes']['type'][$status_array[3]];
			if($status_array[4] != 'false')
				$realm_status['population'] = 'max';
		}
		if(!$realm_status['status'])
			$realm_status['status'] = 'error';
		if(!$realm_status['population'])
			$realm_status['population'] = 'error';
		if(!$realm_status['type'])
			$realm_status['type'] = 'error';
		if($realm_status['status'] == 'down')
			$realm_status['population'] = 'offline';
	} else
		$realm_status['script_errors'][] = 'Unable to access XML file.';	
} else  
	$realm_status['script_errors'][] = 'Data Path Error.';	

if($wowss['display'] == 'full') {

	unset($update);
	clearstatcache();
	if(file_exists($wowss['data_path'].strtolower(wow_ss_sfn($realm_status['realm'].' '.$wowss['region'])).'.'.$wowss['image_type'])) {
		if(time()-($wowss['update_timer']*60) > filemtime($wowss['data_path'].strtolower(wow_ss_sfn($realm_status['realm'].' '.$wowss['region'])).'.'.$wowss['image_type']))
			$update = true;
	}
	else
		$update = true;

	if($update) {
		## Write image
		if($wowss['show_language'] == 'yes')
			$wowss[$realm_status['type']] .= ' '. trim(strtoupper($realm_status['language']));
		if(strtolower($wowss['region']) == 'eu' and !$realm_status['show_language'])
			$wowss[$realm_status['type']] .= ' '. trim(strtoupper($realm_status['language']));
		wow_ss_image($realm_status,$wowss);
	}

	if(!headers_sent()) {
		## Write headers and image if script is called from img tag
		if($wowss['image_type'] == 'png') {
			header("Content-type: image/png");
			$image = imagecreatefrompng($wowss['data_path'].strtolower(wow_ss_sfn($realm_status['realm'].' '.$wowss['region'])).'.'.$wowss['image_type']);
			imagepng($image);
		}
		elseif($wowss['image_type'] == 'gif') {
			header("Content-type: image/gif");
			$image = imagecreatefromgif($wowss['data_path'].strtolower(wow_ss_sfn($realm_status['realm'].' '.$wowss['region'])).'.'.$wowss['image_type']);
			imagegif($image);
		}
	} else
		echo '<img alt="WoW Server Status for '. $realm_status['realm'] .'" src="'. $wowss['data_path'].strtolower(wow_ss_sfn($realm_status['realm'].' '.$wowss['region'])).'.'.$wowss['image_type'] .'" />';
}
if($wowss['display'] == 'half') {

	if(count($realm_status['script_errors']) or $realm_status['status'] == 'error')
		$realm_status['status'] = 'unknown';
	if(!headers_sent()) {
		## Write headers and image if script is called from img tag
		if($wowss['image_type'] == 'png') {
			header("Content-type: image/png");
			$image = imagecreatefrompng($wowss['data_path'].$realm_status['status'].'.'.$wowss['image_type']);
			imagepng($image);
		}
		elseif($wowss['image_type'] == 'gif') {
			header("Content-type: image/gif");
			$image = imagecreatefromgif($wowss['data_path'].$realm_status['status'].'.'.$wowss['image_type']);
			imagegif($image);
		}
	} else
		echo '<img alt="WoW Server Status for '. $realm_status['realm'] .'" src="'. $wowss['data_path'].$realm_status['status'].'.'.$wowss['image_type'] .'" />';
}
if($wowss['display'] == 'text') {

	if($wowss['show_language'] == 'yes')
		$wowss[$realm_status['type']] .= ' ('. trim(strtoupper($realm_status['language'])) .')';
	if(strtolower($wowss['region']) == 'eu' and !$realm_status['show_language'])
		$wowss[$realm_status['type']] .= ' ('. trim(strtoupper($realm_status['language'])) .')';
	if(count($realm_status['script_errors'])) {
		echo '<u>'. $realm_status['realm'] .'</u>';
		foreach ($realm_status['script_errors'] as $value)
			echo ' '.$value;
	} else {
		if($realm_status['status'] != 'error')
			echo '<u>'. $realm_status['realm'] .'</u> '. $wowss[$realm_status['type']] .': <b>'. $wowss[$realm_status['status']] .' | '. $wowss[$realm_status['population']] .'</b>';
		else
			echo '<u>'. $realm_status['realm'] .'</u> Error contacting server.';
	}

}
if($wowss['display'] == 'none') {
	return $realm_status;
}	
}

function wow_ss_image ($realm_status,$wowss) {

## Error control
if($realm_status['status'] == 'down')
	$realm_status['population'] = 'offline';
if($realm_status['status'] == 'error' or count($realm_status['script_errors'])) {
	$realm_status['status'] = 'unknown';
	$realm_status['population'] = 'error';
}
if($realm_status['type'] == 'error')
	unset($realm_status['type']);

## Set Default Fonts
if(!$wowss['server_font'])
	$wowss['server_font'] = 'silkscreen.ttf';
if(!$wowss['type_font'])
	$wowss['type_font'] = 'silkscreenb.ttf';
$server_font = $wowss['data_path'].$wowss['server_font'];
$type_font = $wowss['data_path'].$wowss['type_font'];

## Get and combine base images, set colors
if($wowss['image_type'] == 'png')
	$back = imagecreatefrompng($wowss['data_path'].$realm_status['status'].'.png');
if($wowss['image_type'] == 'gif')
	$back = imagecreatefromgif($wowss['data_path'].$realm_status['status'].'.gif');

$backwidth = imagesx($back);		
if($wowss['image_type'] == 'png')	
	$bottom = imagecreatefrompng($wowss['data_path'].strtolower($realm_status['status']).'2.png');
if($wowss['image_type'] == 'gif')
	$bottom = imagecreatefromgif($wowss['data_path'].strtolower($realm_status['status']).'2.gif');
if($wowss['image_type'] == 'png')
	$realm_status['population'] = imagecreatefrompng($wowss['data_path'].strtolower($realm_status['population']).'.png');
if($wowss['image_type'] == 'gif')
	$realm_status['population'] = imagecreatefromgif($wowss['data_path'].strtolower($realm_status['population']).'.gif');
$full = imagecreate($backwidth,(imagesy($bottom)));
$bg = imagecolorallocate($full, 0, 255, 255);
$red = imagecolorallocate($full,204,0,0); // HIGH Red color
imagecolortransparent($full,$bg); 
imagecopy($full,$back,0,0,0,0,$backwidth,imagesy($back));
imagecopy($full,$bottom,0,imagesy($back),0,0,imagesx($bottom),imagesy($bottom));
$back = $full;

$textcolor = imagecolorallocate($back, 51, 51, 51);
$shadow = imagecolorclosest($back, 255, 204, 0);

imagecopy($back,$realm_status['population'],0,0,0,0,imagesx($realm_status['population']),imagesy($realm_status['population']));

## Ouput centered $server name
$maxw = 62;
$box = imagettfbbox(6,0,$server_font,$realm_status['realm']);
$w = abs($box[0]) + abs($box[2]);

if ($w > $maxw) {

	$i = $w;
	$t = strlen($realm_status['realm']);

	while ($i > $maxw) {
		$t--;
		$box = imagettfbbox (6, 0,$server_font,substr($realm_status['realm'],0,$t));
	  	$i = abs($box[0]) + abs($box[2]);	
	}

	$t = strrpos(substr($realm_status['realm'], 0, $t), " ");

	$output[0] = substr($realm_status['realm'], 0, $t);
	$output[1] = ltrim(substr($realm_status['realm'], $t));
	$vadj = -6;

} else
	$output[0] = $realm_status['realm'];

$i = 0;
foreach($output as $value) {
	$box = imagettfbbox(6,0,$server_font,$value);
	$w = abs($box[0]) + abs($box[2]);

	imagettftext($back, 6, 0, round(($backwidth-$w)/2)+1, 58+($i*+$vadj, $shadow, $server_font, $value);
	imagettftext($back, 6, 0, round(($backwidth-$w)/2), 57+($i*+$vadj, -$textcolor, $server_font, $value);
	$i++;		
}	

## Ouput centered $realm_status['type']	
if ($realm_status['type'] and !$err) {
	$realm_status['type'] = $wowss[$realm_status['type']];
	$box = imagettfbbox(6,0,$type_font,$realm_status['type']);
	$w = abs($box[0]) + abs($box[2]);
	imagettftext($back, 6, 0, round(($backwidth-$w)/2)+1, 85, $shadow, $type_font, $realm_status['type']);
	imagettftext($back, 6, 0, round(($backwidth-$w)/2), 84, -$textcolor, $type_font, $realm_status['type']);	
}	

if($wowss['image_type'] == 'png')
	imagepng($back,$wowss['data_path'].strtolower(wow_ss_sfn($realm_status['realm'].' '.$wowss['region'])).'.png');
if($wowss['image_type'] == 'gif')
	imagegif($back,$wowss['data_path'].strtolower(wow_ss_sfn($realm_status['realm'].' '.$wowss['region'])).'.gif');
imagedestroy($back);
}

function wow_ss_sfn($text) {
## Returns safe text for inserting into file name
return str_replace(' ','_',preg_replace('/[^a-zA-Z0-9- ]/','',$text));
}

if(basename(__FILE__) == basename($_SERVER['SCRIPT_NAME']))
wow_ss();

?>

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.