Location: PHPKode > scripts > Image shadow with CSS effects > image-shadow-with-css-effects/css_shadow.php
<?php
global $colornames;

/*
This code is released under public domain.

Original info and source code download available at:
  http://betterwindowssoftware.com/css_shadow.php

This should create the HTML that would display a shadow for an image object based on
several parameters
  imgURL:           URL to use for the image.  Used for the "src=" value as
                    well as used for backgroundColor if left blank, and image width / height.

  alt:              The "alt=" value for the image.

  backgroundColor:  Background color for what the shadow blends to nothingness as.

  shadowColor:      Shadow Color

  blendStrength:    Blend Strength on a scale of 1 to 10 with 1 being the faintest shadow
                    and 10 being the strongest shadow.

  shadowDistance:   Distance in pixels for the shadow from 1 to 20.
  
  overrideWidth:    if supplied, will override the image width, if passed 0,
                    no overriding occurs

  overrideHeight:   if supplied, will override the image height, if passed 0,
                    no overriding occurs

  href_link:        optional value for anchor tag to wrap around the image
  onclick:          optional onclick value for image

Example usage with default values used for "alt" and "backgroundColor" - not overriding width or height:
$result = getImageWithCSSShadow("http://yourdomain.com/images/bogusImage0001.gif", "", "", "000000", 7, 14, 0, 0, "http://yourdomain.com/home");
if ($result) {
  echo $result;
}
*/
function getImageWithCSSShadow($imgURL, $alt='Image with CSS shadow', $backgroundColor='FFFFFF', $shadowColor='000000', $blendStrength=6, $shadowDistance = 7,
  $overrideWidth = 0, $overrideHeight = 0, $href_link = "", $onclick = "") {

  if ($href_link) {
    $href_link = "<a href='".$href_link."' style='color:".$shadowColor."'>";
    $href_link_after = "</a>";
  }
  else $href_link_after = "";
  if ($imgURL) {
    // ratios for four color blending levels
    $bpDark0 = round($blendStrength * 9.4);
    $bpDark1 = round($blendStrength * 5.9);
    $bpDark2 = round($blendStrength * 2.5);
    $bpDark3 = round($blendStrength * 1.2);

    $ic0 = blend2hexcolors($backgroundColor, $shadowColor, $bpDark0);
    $ic1 = blend2hexcolors($backgroundColor, $shadowColor, $bpDark1);
    $ic2 = blend2hexcolors($backgroundColor, $shadowColor, $bpDark2);
    $ic3 = blend2hexcolors($backgroundColor, $shadowColor, $bpDark3);
    // defaults for width and height in case getimagesize call fails
    if (($overrideWidth > 0) && ($overrideHeight > 0)) {
      $width = $overrideWidth;
      $height = $overrideHeight;
    }
    else {
      $width = 100;
      $height = 100;
      if ($size = @getimagesize($imgURL)) {
        @list($width, $height, $type, $attr) = $size;
        // uncomment these lines to constrain image at the same time to a given size
        /*
        if (($width > 400) || ($height > 400)) {
    			constrain_img($width, $height, 400, 400);
        }
        */
      }
    }
    $sdABS = abs($shadowDistance) + 4;

    $ew1 = $width + 2;
    $eh1 = $height + 2;
    $ew2 = $width + 3;
    $eh2 = $height + 3;
    $ew3 = $width + 5;
    $eh3 = $height + 5;
    $ew0 = $ew1 - 5;
    $eh0 = $eh1 - 5;
    $useshadowDistance = $sdABS;
    $shadowDistanceAlt = $sdABS-3;
    $totalw = $width + $useshadowDistance + 3;
    $totalh = $height + $useshadowDistance + 3;
    $o1 = 1; 
    $o2 = 2;
    return "<div style=\"width:".$totalw."px;height:".$totalh."px\">
   <div style=\"position:relative;top:".$shadowDistanceAlt."px;left:".$shadowDistanceAlt."px;background-color:#".$ic3.";width:".$ew3."px;height:".$eh3."px\">
     <div style=\"position:relative;top:".$o1."px;left:".$o1."px;background-color:#".$ic2.";width:".$ew2."px;height:".$eh2."px;\">
       <div style=\"position:relative;top:".$o1."px;left:".$o1."px;background-color:#".$ic1.";width:".$ew1."px;height:".$eh1."px;\">
         <div style=\"position:relative;top:".$o2."px;left:".$o2."px;background-color:#".$ic0.";width:".$ew0."px;height:".$eh0."px;\">
           ".$href_link."<img src=\"".$imgURL."\" alt=\"".$alt."\" style=\"position:relative;top:-".$sdABS."px;left:-".$sdABS."px;border:1px solid #".$shadowColor.";\" ".$onclick."width=\"".$width."\" height=\"".$height."\">".$href_link_after."
          </div>
        </div>
      </div>
    </div>
  </div>";
  } else return "";
}

if (!function_exists("constrain_img")) {
  function constrain_img(&$width, &$height, $max_width, $max_height) {
  	if ($width == 0)
  		$x_ratio = 9999999;
  	else
  		$x_ratio = $max_width / $width;
  	if ($height == 0)
  		$y_ratio = 9999999;
  	else
    	$y_ratio = $max_height / $height;

  	if ( ($width <= $max_width) && ($height <= $max_height)) {
  		return 0;
  	}
  	else
  		if (($x_ratio * $height) < $max_height) {
  			$height = ceil($x_ratio * $height);
  			$width =$max_width;
  		}
  		else {
  			$width = ceil($y_ratio * $width);
  			$height=$max_height;
  		}
   	return 0;
  }
}

if (!function_exists("getimagecolor")) {
  function getimagecolor($fname) {
  	$name = explode(".", strtolower($fname));
  	$allowedExtensions = 'jpg jpeg gif png';
  	$currentExtensions = $name[count($name)-1];
  	$extensions = explode(" ", $allowedExtensions);
  	for($i=0; count($extensions)>$i; $i=$i+1){
  		if($extensions[$i]==$currentExtensions) {
  		  $extensionOK=1;
  			$fileExtension=$extensions[$i];
  			break;
  		}
  	}
  	if($fileExtension == "jpg" OR $fileExtension=='jpeg'){
  		$i = ImageCreateFromJpeg($fname);
  	}elseif ($fileExtension == "gif"){
  		$i = ImageCreateFromGIF($fname);
  	}elseif ($fileExtension == 'png'){
  	 $i = imageCreateFromPNG($fname);
  	}
      $w = imagesx($i);
      $h = imagesy($i);
  	$r = 0;
  	$g = 0;
  	$b = 0;
  	for ($x=0;$x<$w;$x++) {
  		for ($y=0;$y<$h;$y++) {
  		  $rgb = imagecolorat($i,$x,$y);
  		  if (($fileExtension == "gif") || ($fileExtension == 'png')) {
  		  	$rgb = imagecolorsforindex($i, $rgb);
  			$r_c = $rgb["red"];
  			$g_c = $rgb["green"];
  			$b_c = $rgb["blue"];
            }
            else {
  	        $r_c = $rgb >> 16;
  	        $g_c = $rgb >> 8 & 255;
  	        $b_c = $rgb & 255;
  		  }
            $r += $r_c;
            $g += $g_c;
            $b += $b_c;
  		}
  	}
    $pxls = $w * $h;
    if ($pxls == 0)
  		return "#808080";
  	else {
  	  $r = dechex(round($r / $pxls));
  	  $g = dechex(round($g / $pxls));
  	  $b = dechex(round($b / $pxls));
  	  if(strlen($r) < 2) {
  	    $r = 0 . $r;
  	  }
  	  if(strlen($g) < 2) {
  	    $g = 0 . $g;
  	  }
  	  if(strlen($b) < 2) {
  	    $b = 0 . $b;
  	  }
  	  return "#" . $r . $g . $b;
    }
  }
}

if (!function_exists("blend2hexcolors")) {
  function blend2hexcolors($color1, $color2, $amount_of_2) {
  	$color1 = str_replace('#', '', getcolorofname($color1));
  	$color2 = str_replace('#', '', getcolorofname($color2));

    $c1R = hexdec(substr($color1,0,2));
    $c1G = hexdec(substr($color1,2,2));
    $c1B = hexdec(substr($color1,4,2));

    $c2R = hexdec(substr($color2,0,2));
    $c2G = hexdec(substr($color2,2,2));
    $c2B = hexdec(substr($color2,4,2));
    $R = str_pad(dechex(round(((($amount_of_2 * $c2R) + (100 - $amount_of_2) * $c1R)/100), 0)), 2, "0", STR_PAD_LEFT);
    $G = str_pad(dechex(round(((($amount_of_2 * $c2G) + (100 - $amount_of_2) * $c1G)/100), 0)), 2, "0", STR_PAD_LEFT);
    $B = str_pad(dechex(round(((($amount_of_2 * $c2B) + (100 - $amount_of_2) * $c1B)/100), 0)), 2, "0", STR_PAD_LEFT);

    return $R.$G.$B;
  }
}

if (!function_exists("getcolorofname")) {
  function getcolorofname($colorname) {
    global $colornames;
    if (!isset($colornames))
      $colornames = getcolornames();
    $re = $colorname;
  	foreach ($colornames as $key=>$value) {
  	  if (strtolower($key) == strtolower($colorname)) {
  	    $re = $value;
        break;
      }
    }
    return $re;

  }
}

if (!function_exists("getcolornames")) {
  function getcolornames() {
    $r = array();
  	$r["Aliceblue"]="#F0F8FF";
  	$r["Antiquewhite"]="#FAEBD7";
  	$r["Aqua"]="#00FFFF";
  	$r["Aquamarine"]="#7FFFD4";
  	$r["Azure"]="#F0FFFF";
  	$r["Beige"]="#F5F5DC";
  	$r["Bisque"]="#FFE4C4";
  	$r["Black"]="#000000";
  	$r["Blanchedalmond"]="#FFEBCD";
  	$r["Blue"]="#0000FF";
  	$r["Blueviolet"]="#8A2BE2";
  	$r["Brown"]="#A52A2A";
  	$r["Burlywood"]="#DEB887";
  	$r["Cadetblue"]="#5F9EA0";
  	$r["Chartreuse"]="#7FFF00";
  	$r["Chocolate"]="#D2691E";
  	$r["Coral"]="#FF7F50";
  	$r["Cornflowerblue"]="#6495ED";
  	$r["Cornsilk"]="#FFF8DC";
  	$r["Crimson"]="#DC143C";
  	$r["Cyan"]="#00FFFF";
  	$r["Darkblue"]="#00008B";
  	$r["Darkcyan"]="#008B8B";
  	$r["Darkgoldenrod"]="#B8860B";
  	$r["Darkgray"]="#A9A9A9";
  	$r["Darkgreen"]="#006400";
  	$r["Darkkhaki"]="#BDB76B";
  	$r["Darkmagenta"]="#8B008B";
  	$r["Darkolivegreen"]="#556B2F";
  	$r["Darkorange"]="#FF8C00";
  	$r["Darkorchid"]="#9932CC";
  	$r["Darkred"]="#8B0000";
  	$r["Darksalmon"]="#E9967A";
  	$r["Darkseagreen"]="#8DBC8F";
  	$r["Darkslateblue"]="#483D8B";
  	$r["Darkslategray"]="#2F4F4F";
  	$r["Darkturquoise"]="#00DED1";
  	$r["Darkviolet"]="#9400D3";
  	$r["Deeppink"]="#FF1493";
  	$r["Deepskyblue"]="#00BFFF";
  	$r["Dimgray"]="#696969";
  	$r["Dodgerblue"]="#1E90FF";
  	$r["Firebrick"]="#B22222";
  	$r["Floralwhite"]="#FFFAF0";
  	$r["Forestgreen"]="#228B22";
  	$r["Fuchsia"]="#FF00FF";
  	$r["Gainsboro"]="#DCDCDC";
  	$r["Ghostwhite"]="#F8F8FF";
  	$r["Gold"]="#FFD700";
  	$r["Goldenrod"]="#DAA520";
  	$r["Gray"]="#808080";
  	$r["Green"]="#008000";
  	$r["Greenyellow"]="#ADFF2F";
  	$r["Honeydew"]="#F0FFF0";
  	$r["Hotpink"]="#FF69B4";
  	$r["Indianred"]="#CD5C5C";
  	$r["Indigo"]="#4B0082";
  	$r["Ivory"]="#FFFFF0";
  	$r["Khaki"]="#F0E68C";
  	$r["Lavender"]="#E6E6FA";
  	$r["Lavenderblush"]="#FFF0F5";
  	$r["Lawngreen"]="#7CFC00";
  	$r["Lemonchiffon"]="#FFFACD";
  	$r["Lightblue"]="#ADD8E6";
  	$r["Lightcoral"]="#F08080";
  	$r["Lightcyan"]="#E0FFFF";
  	$r["Lightgoldenrodyellow"]="#FAFAD2";
  	$r["Lightgreen"]="#90EE90";
  	$r["Lightgrey"]="#D3D3D3";
  	$r["Lightpink"]="#FFB6C1";
  	$r["Lightsalmon"]="#FFA07A";
  	$r["Lightseagreen"]="#20B2AA";
  	$r["Lightskyblue"]="#87CEFA";
  	$r["Lightslategray"]="#778899";
  	$r["Lightsteelblue"]="#B0C4DE";
  	$r["Lightyellow"]="#FFFFE0";
  	$r["Lime"]="#00FF00";
  	$r["Limegreen"]="#32CD32";
  	$r["Linen"]="#FAF0E6";
  	$r["Magenta"]="#FF00FF";
  	$r["Maroon"]="#800000";
  	$r["Mediumaquamarine"]="#66CDAA";
  	$r["Mediumblue"]="#0000CD";
  	$r["Mediumorchid"]="#BA55D3";
  	$r["Mediumpurple"]="#9370DB";
  	$r["Mediumseagreen"]="#3CB371";
  	$r["Mediumslateblue"]="#7B68EE";
  	$r["Mediumspringgreen"]="#00FA9A";
  	$r["Mediumturquoise"]="#48D1CC";
  	$r["Mediumvioletred"]="#C71585";
  	$r["Midnightblue"]="#191970";
  	$r["Mintcream"]="#F5FFFA";
  	$r["Mistyrose"]="#FFE4E1";
  	$r["Moccasin"]="#FFE4B5";
  	$r["Navajowhite"]="#FFDEAD";
  	$r["Navy"]="#000080";
  	$r["Oldlace"]="#FDF5E6";
  	$r["Olivedrab"]="#6B8E23";
  	$r["Orange"]="#FFA500";
  	$r["Orangered"]="#FF4500";
  	$r["Orchid"]="#DA70D6";
  	$r["Palegoldenrod"]="#EEE8AA";
  	$r["Palegreen"]="#98FB98";
  	$r["Paleturquoise"]="#AFEEEE";
  	$r["Palevioletred"]="#DB7093";
  	$r["Papayawhip"]="#FFEFD5";
  	$r["Peachpuff"]="#FFDAB9";
  	$r["Peru"]="#CD853F";
  	$r["Pink"]="#FFC8CB";
  	$r["Plum"]="#DDA0DD";
  	$r["Powderblue"]="#B0E0E6";
  	$r["Purple"]="#800080";
  	$r["Red"]="#FF0000";
  	$r["Rosybrown"]="#BC8F8F";
  	$r["Royalblue"]="#4169E1";
  	$r["Saddlebrown"]="#8B4513";
  	$r["Salmon"]="#FA8072";
  	$r["Sandybrown"]="#F4A460";
  	$r["Seagreen"]="#2E8B57";
  	$r["Seashell"]="#FFF5EE";
  	$r["Sienna"]="#A0522D";
  	$r["Silver"]="#C0C0C0";
  	$r["Skyblue"]="#87CEEB";
  	$r["Slateblue"]="#6A5ACD";
  	$r["Snow"]="#FFFAFA";
  	$r["Springgreen"]="#00FF7F";
  	$r["Steelblue"]="#4682B4";
  	$r["Tan"]="#D2B48C";
  	$r["Teal"]="#008080";
  	$r["Thistle"]="#D8BFD8";
  	$r["Tomato"]="#FF6347";
  	$r["Turquoise"]="#40E0D0";
  	$r["Violet"]="#EE82EE";
  	$r["Wheat"]="#F5DEB3";
  	$r["White"]="#FFFFFF";
  	$r["Whitesmoke"]="#F5F5F5";
  	$r["Yellow"]="#FFFF00";
  	$r["Yellowgreen"]="#9ACD32";

  	return $r;
  }
}
?>
Return current item: Image shadow with CSS effects