Ok - I've finally got something that sometimes works. http://smada.com/images/hide_image.php I talked to a Delphi programmer, who whipped something out in about 20 minutes. My code is a translation of his. function colorParts($col) { $parts['r'] = ($col >> 16) & 0xFF; $parts['g'] = ($col >> 8) & 0xFF; $parts['b'] = $col & 0xFF; return $parts; } function NewRange($oldval) { return floor($oldval/255*80+87); } function ShiftVal($ov1, $ov2) { $nv = floor($ov1 + 1.8 * (newrange(127) - $ov2)); if ($nv < 0) return 0; else if ($nv > 255) return 255; else return $nv; } function nrw ($oldcol) { $newr = NewRange(($oldcol >> 16) & 0xFF); $newg = NewRange(($oldcol >> 8) & 0xFF); $newb = NewRange($oldcol & 0xFF); return ($newr << 16) + ($newg << 8) + $newb; } function svw($oc1, $oc2) { $p1 = colorParts($oc1); $p2 = colorParts($oc2); $nvr = ShiftVal($p1['r'],$p2['r']); $nvg = ShiftVal($p1['g'],$p2['g']); $nvb = ShiftVal($p1['b'],$p2['b']); return ($nvr << 16) + ($nvg << 8) + $nvb; } function &openImage($file, $forcetruecolor = false) { $data = getimagesize($file); $res = null; switch($data[2]) { case 1: $res = imagecreatefromgif($file); break; case 2: $res = imagecreatefromjpeg($file); break; case 3: $res = imagecreatefrompng($file); break; } if ($forcetruecolor && !imageistruecolor($res)) { $size = getimagesize($file); $r2 = imagecreatetruecolor($size[0], $size[1]); imagecopy($r2, $res, 0, 0, 0, 0, $size[0], $size[1]); imagedestroy($res); $res =& $r2; } return $res; } include('two_image_upload.inc.php'); $main = openImage($main_file, true); $hid = openImage($hid_file, true); $size = getimagesize($main_file); $size2 = getimagesize($hid_file); $img = imagecreatetruecolor($size[0], $size[1]); for ($y = 0; $y < $size[1]; $y++) { $y2 = floor(($y / $size[1]) * $size2[1]); for ($x = 0; $x < $size[0]; $x++) { $x2 = floor(($x / $size[0]) * $size2[0]); if (($x + $y) % 2 == 0) //use main image imagesetpixel($img, $x, $y, imagecolorat($main, $x, $y)); else //use hidden image { $color = imagecolorat($hid, $x2, $y2); imagesetpixel($img, $x,$y, nrw($color)); if ($y % 2 == 1) $x3 = $x-1; else $x3 = $x+1; if ($x3 >= 0 and $x3 < $size[0]) { $color = svw(imagecolorat($img, $x3, $y), imagecolorat($img, $x, $y)); imagesetpixel($img, $x3, $y, $color); } } } } -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php