Changing color in GD via variable?
         
               Posted on 
16th Feb 2014 07:03 pm by  
admin
        
        Hey guys, I'm new here. x)
I'm very much a noob when it comes to PHP, but I'm trying to learn as much as I can. I've been writing a script which will generate a new image after submitting some hex codes, using these hex codes to generate certain colored parts of the image. Everything works just dandy - when you first visit the page, the values in the boxes specify the original hex codes that identify the color that is being changed. So, when you put in a new value and submit it, the page refreshes and displays those new values. I store these values in variables, and so in the script that generates the image, call the hex codes that a) need to be changed and b) replace the old hex codes. Unfortunately, the only problem is that it isn't actually changing the colors.
So I'm not really sure how to use variables to obtain these old and new hex codes.
demo.php (this is the image generating script)
Code: [Select]<?
$line = imagecreatefrompng('/images/character/etw/etwmaleline.png');
$base = imagecreatefrompng('/images/character/etw/etwmalebase.png');
$base2 = imagecreatefrompng('/images/character/etw/etwmale2base.png');
$eyes = imagecreatefrompng('/images/character/etw/etwmaleeyes.png');
$statc = imagecreatefrompng('/images/character/etw/etwmalestatc.png');
//BASE hex
$width = imagesx($base);
$height = imagesy($base);
$colorToChange = $pbase;
$newbaseColor = $_GET['base'];
$c1 = sscanf($colorToChange,"%2x%2x%2x");
$c2 = sscanf($newbaseColor,"%2x%2x%2x");
$cnew = imagecolorallocate($base,$c2[0],$c2[1],$c2[2]);
for ($y=0;$y<$height;$y++) {
for ($x=0;$x<$width;$x++) {
$rgb = imagecolorat($base,$x,$y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
if (($r==$c1[0]) && ($g==$c1[1]) && ($b==$c1[2])) {
imagesetpixel($base,$x,$y,$cnew);
}
}
} 
//BASE2 hex
$width = imagesx($base2);
$height = imagesy($base2);
$colorToChange = $pbase2;
$newbase2Color = $_GET['base2'];
$c1 = sscanf($colorToChange,"%2x%2x%2x");
$c2 = sscanf($newbase2Color,"%2x%2x%2x");
$cnew = imagecolorallocate($base2,$c2[0],$c2[1],$c2[2]);
for ($y=0;$y<$height;$y++) {
for ($x=0;$x<$width;$x++) {
$rgb = imagecolorat($base2,$x,$y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
if (($r==$c1[0]) && ($g==$c1[1]) && ($b==$c1[2])) {
imagesetpixel($base2,$x,$y,$cnew);
}
}
} 
//EYES hex
$width = imagesx($eyes);
$height = imagesy($eyes);
$colorToChange = $peyes;
$neweyesColor = $_GET['eyes'];
$c1 = sscanf($colorToChange,"%2x%2x%2x");
$c2 = sscanf($neweyesColor,"%2x%2x%2x");
$cnew = imagecolorallocate($eyes,$c2[0],$c2[1],$c2[2]);
for ($y=0;$y<$height;$y++) {
for ($x=0;$x<$width;$x++) {
$rgb = imagecolorat($eyes,$x,$y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
if (($r==$c1[0]) && ($g==$c1[1]) && ($b==$c1[2])) {
imagesetpixel($eyes,$x,$y,$cnew);
}
}
} 
imagealphablending($line, 1);
imagealphablending($base, 1);
imagealphablending($base2, 1);
imagealphablending($eyes, 1);
imagealphablending($statc, 1);
$i= array($base, $eyes, $base2, $statc, $line);
$s = imagemergealpha($i);
//Merge multiple images and keep transparency
//$i is and array of the images to be merged:
// $i[1] will be overlayed over $i[0]
// $i[2] will be overlayed over that
// ...
//the function returns the resulting image ready for saving
function imagemergealpha($i) {
 //create a new image
 $s = imagecreatetruecolor(imagesx($i[0]),imagesy($i[1])); 
 //merge all images
 imagealphablending($s,true);
 $z = $i;
 while($d = each($z)) {
  imagecopy($s,$d[1],0,0,0,0,imagesx($d[1]),imagesy($d[1]));
 }
 //restore the transparency
 imagealphablending($s,false);
 $w = imagesx($s);
 $h = imagesy($s);
 for($x=0;$x<$w;$x++) {
  for($y=0;$y<$h;$y++) {
   $c = imagecolorat($s,$x,$y);
   $c = imagecolorsforindex($s,$c);
   $z = $i;
   $t = 0;
   while($d = each($z)) {
   $ta = imagecolorat($d[1],$x,$y);
   $ta = imagecolorsforindex($d[1],$ta);
   $t += 127-$ta['alpha'];
   }
   $t = ($t > 127) ? 127 : $t;
   $t = 127-$t;
   $c = imagecolorallocatealpha($s,$c['red'],$c['green'],$c['blue'],$t);
   imagesetpixel($s,$x,$y,$c);
  }
 } 
 imagesavealpha($s,true);
 return $s;
}
header('Content-type: image/png');
imagepng($s);
imagedestroy($s);
error_reporting(E_ALL);
?>
hextest2.php
Code: [Select]<?php
include_once('test2.php');
   $pbase = 'c8c8c8';
   $pbase2 = 'c8c8c8';
   $peyes = 'c8c8c8';
if (!isset($_GET['preview']) && !isset($_GET['submit']))
   echo "thou hast naught yet submat thee hex codes!";
elseif (isset($_GET['preview']) && !isset($_GET['submit']))
   include_once('test3.php');
else (
   include_once('test4.php'));
?>
<html>
<head>
<title>Soundtrack Howl!</title>
<link rel="stylesheet" type="text/css" />
</head>
<body style="background-color: #d8d8d8;"> <center>
<table width="700px"> <tr> <td width="400px">
<img src="demo.php"/>
</td> </tr>
<tr> <td width="300px">
<form action="<?=$_SERVER['PHP_SELF']?>" method="get">
<b>Base:</b> # <input type="text" name="base" value="<? echo($pbase); ?>" /> <br />
<b>2nd Base:</b> # <input type="text" name="base2" value="<? echo($pbase2); ?>" /> <br />
<b>Eyes:</b> # <input type="text" name="eyes" value="<? echo($peyes); ?>" /> <br />
<input type="submit" name="preview" value="Preview Character!" /> <br /> <br />
<input type="submit" name="submit" value="Make Your New Character!!" />
</form>
</td> </tr> </table>
</center>
</body>
</html>
test3.php
Code: [Select]<?php
include_once('./includes/general.php');
   if ($_GET['base']=='' or $_GET['base2']=='' or $_GET['eyes']==''){
   echo "You haven't filled them all out! <br />";
   }
   if (strlen($_GET['base'])<'6' || strlen($_GET['base2'])<'6' || strlen($_GET['eyes'])<'6'){
   echo "The hex codes are incomplete! <br />";
   }
   else {
   $pbase = $_GET['base'];
   $pbase2 = $_GET['base2'];
   $peyes = $_GET['eyes'];
   }
?> 
test4.php
Code: [Select]<?php
include_once('./includes/general.php');
   if ($_GET['base']=='' or $_GET['base2']=='' or $_GET['eyes']==''){
   echo "You haven't filled them all out!";
   }
   else {   
   $nbase = $_GET['base'];
   $nbase2 = $_GET['base2'];
   $neyes = $_GET['eyes'];
   $sql = mysql_query("INSERT INTO `character` (`base`, `base2`, `eyes`)
             VALUES ('$nbase', '$nbase2', '$neyes') ") or die("Thou has submat thee hex codes! There be errors abreast!<br />".mysql_error());
   header('Location: complete.php');
      }
?> 
And /includes/general.php is just the file that connects to the database.
I'm SO sorry, I know it's a ton of stuff to read, but I want to make sure the problem isn't just in demo.php. Also, I'm aware that my script(s) are messy and may have some unnecessary coding, so just ignore that unless it has anything to do with my problem XD To clarify, I did not actually literally write the image generating script all by myself. I used php.net and googled some stuff to reference.
Thanks       
      
       
		No comments posted yet	
	Your Answer:
	        Login to answer
        
146  
 18 
 
    
    
 
Other forums
ECC6 - Single sign-on 
We are in the process of upgrading to ECC 6 which will support single sign on with user passwords al
Using loop to count number of entries 
I'm writing a program that must ask user to type in numbers. After each entry, the program has to re
Mass activity scheduling 
Hi experts,
Im facing some problems to deal with mass activity jobs.
When I run some
is_dir() problem 
Hello,
I'm buidling a php scripts that dynamically get's subfolders from a specific folder.
Memory Allocation 
Hi folks,
see this ex:
int v=5;
v=v+10;
then what will do the compiler before th
ALV List Display to point to another report on Double Click 
Hi,
I want my ALV List Display to point to another report on Double Click on its line ite
Last Weeks sDate and eDate. 
sDate - Start Date
eDate - End Date
I need to pull two dates for "Last Week" whi
Help with some dates 
I have a list of dates in an array:
$mondays = array(
				strtotime("October 12, 2009
Calender Not Opening 
The following code is not loading the javascript calender in another window. It's not doing anything
Searching keywords from array 
Hello everyone, Im just wondering if someone could help me with another issue im having. Im still le