function SetIndexDarkColor($which_color) { list($r, $g, $b) = $this->SetRGBColor($which_color); $r -= 0x30; $r = $r < 0 ? 0 : $r; $g -= 0x30; $g = $g < 0 ? 0 : $g; $b -= 0x30; $b = $b < 0 ? 0 : $b; $index = ImageColorExact($this->img, $r, $g, $b); if ($index == -1) { return ImageColorResolve($this->img, $r, $g, $b); } else { return $index; } }
/** * Unifies all colors given in the colArr color array to the first color in the array. * * @param resource $img Image resource * @param array $colArr Array containing RGB color arrays * @param bool $closest * @return int The index of the unified color */ public function unifyColors(&$img, $colArr, $closest = false) { $retCol = -1; if (is_array($colArr) && !empty($colArr) && function_exists('imagepng') && function_exists('imagecreatefrompng')) { $firstCol = array_shift($colArr); $firstColArr = $this->convertColor($firstCol); $origName = $preName = $this->randomName() . '.png'; $postName = $this->randomName() . '.png'; $tmpImg = null; if (count($colArr) > 1) { $this->imageWrite($img, $preName); $firstCol = $this->hexColor($firstColArr); foreach ($colArr as $transparentColor) { $transparentColor = $this->convertColor($transparentColor); $transparentColor = $this->hexColor($transparentColor); $cmd = '-fill "' . $firstCol . '" -opaque "' . $transparentColor . '"'; $this->imageMagickExec($preName, $postName, $cmd); $preName = $postName; } $this->imageMagickExec($postName, $origName, ''); if (@is_file($origName)) { $tmpImg = $this->imageCreateFromFile($origName); } } else { $tmpImg = $img; } if ($tmpImg) { $img = $tmpImg; if ($closest) { $retCol = ImageColorClosest($img, $firstColArr[0], $firstColArr[1], $firstColArr[2]); } else { $retCol = ImageColorExact($img, $firstColArr[0], $firstColArr[1], $firstColArr[2]); } } // Unlink files from process if (!$this->dontUnlinkTempFiles) { if ($origName) { @unlink($origName); } if ($postName) { @unlink($postName); } } } return $retCol; }
function SetIndexColor($which_color) { //Color is passed in as anything list($r, $g, $b) = $this->SetRgbColor($which_color); //Translate to RGB $index = ImageColorExact($this->img, $r, $g, $b); if ($index == -1) { //return ImageColorAllocate($this->img, $r, $g, $b); //return ImageColorClosest($this->img, $r, $g, $b); return ImageColorResolve($this->img, $r, $g, $b); //requires PHP 3.0.2 and later } else { return $index; } }
function set_transparent_color($r, $g, $b) { $r = $this->color($r); $g = $this->color($g); $b = $this->color($b); $color_index = ImageColorExact($this->image, $r, $g, $b); ImageColorTransparent($this->image, $color_index); }
function createMarkedImage($type) { // Create marked image (original + watermark) $this->marked_image = ImageCreateTrueColor($this->original_width, $this->original_height); ImageCopy($this->marked_image, $this->original_image, 0, 0, 0, 0, $this->original_width, $this->original_height); if ($this->transparent_color != -1) { $transparent_color_index = ImageColorExact($this->mark_image, $this->transparent_color >> 16 & 0xff, $this->transparent_color >> 8 & 0xff, $this->transparent_color & 0xff); ImageColorTransparent($this->mark_image, $transparent_color_index); } if ($this->gd_version >= 2) { ImageAlphaBlending($this->marked_image, true); } if ($type == FILE_PNG) { ImageCopy($this->marked_image, $this->mark_image, $this->mark_offset_x, $this->mark_offset_y, 0, 0, $this->mark_width, $this->mark_height); } else { ImageCopyMerge($this->marked_image, $this->mark_image, $this->mark_offset_x, $this->mark_offset_y, 0, 0, $this->mark_width, $this->mark_height, $this->transparency); } }
// Colour territories if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { // Allocate fill colour for un-occupied territories if (in_array($row["powername"], array("Locals", "Neutral", "Warlords", "Pirates"))) { if ($row["terrtype"] == "SEA") { $bg = ImageColorExact($map, 0, 102, 255); } else { if ($row["terrtype"] == "OCE") { $bg = ImageColorExact($map, 0, 0, 255); } else { $bg = ImageColorExact($map, 153, 153, 153); } } } else { $bg = ImageColorExact($map, $row["red"], $row["green"], $row["blue"]); } // Fill territory ImageFill($map, $row["x"], $row["y"], $bg); // Print only for Information Map points on large maps if ($xsize > 500 and isset($row["info"]) ? $row["info"] : 0 == 1) { // Draw outer circle ImageFilledEllipse($map, $row["x"], $row["y"], 30, 24, $white); // Draw resources if ($row["minerals"] > 0) { ImageFilledArc($map, $row["x"], $row["y"], 30, 24, 210 - 12 * $row["minerals"], 210 + 12 * $row["minerals"], $minerals, IMG_ARC_PIE); } if ($row["oil"] > 0) { ImageFilledArc($map, $row["x"], $row["y"], 30, 24, 330 - 12 * $row["oil"], 330 + 12 * $row["oil"], $oil, IMG_ARC_PIE); } if ($row["grain"] > 0) {
function render_global($game_id) { global $UNI, $systems, $preview, $loc, $exp_sys, $random_filename, $gen_new_maps, $directories; $size_x = $UNI['size_x'] + $UNI['map_border'] * 2; $size_y = $UNI['size_y'] + $UNI['map_border'] * 2; $offset_x = $UNI['map_border']; $offset_y = $UNI['map_border']; $central_star = 1; //this star is the hub of the universe. $uv_show_warp_numbers = get_db_var('uv_show_warp_numbers'); $numsize = $UNI['num_size']; $im = imagecreatetruecolor($size_x, $size_y); $earthIm = imagecreatefrompng($directories['images'] . '/map/earth.png'); $earthDim = array(imagesx($earthIm), imagesy($earthIm)); $earthPos = array(-$earthDim[0] / 2, -$earthDim[1] / 2); $starIm = imagecreatefrompng($directories['images'] . '/map/star.png'); $starDim = array(imagesx($starIm), imagesy($starIm)); $starPos = array(-$starDim[0] / 2, -$starDim[1] / 2); //allocate the colours $color_bg = ImageColorAllocate($im, $UNI['bg_color'][0], $UNI['bg_color'][1], $UNI['bg_color'][2]); $color_st = ImageColorAllocate($im, $UNI['num_color'][0], $UNI['num_color'][1], $UNI['num_color'][2]); $color_sd = ImageColorAllocate($im, $UNI['star_color'][0], $UNI['star_color'][1], $UNI['star_color'][2]); $color_sl = ImageColorAllocate($im, $UNI['link_color'][0], $UNI['link_color'][1], $UNI['link_color'][2]); $color_sh = ImageColorAllocate($im, $UNI['num_color3'][0], $UNI['num_color3'][1], $UNI['num_color3'][2]); $color_l = ImageColorAllocate($im, $UNI['label_color'][0], $UNI['label_color'][1], $UNI['label_color'][2]); $worm_1way_color = ImageColorAllocate($im, $UNI['worm_one_way_color'][0], $UNI['worm_one_way_color'][1], $UNI['worm_one_way_color'][2]); $worm_2way_color = ImageColorAllocate($im, $UNI['worm_two_way_color'][0], $UNI['worm_two_way_color'][1], $UNI['worm_two_way_color'][2]); //get the star systems from the Db if using pre-genned map. if (isset($gen_new_maps)) { db("select (star_id -1) as num, x_loc, y_loc, wormhole, CONCAT(link_1 -1, ',', link_2 -1, ',', link_3 -1, ',', link_4 -1, ',', link_5 -1, ',', link_6 -1) as links from {$game_id}_stars order by star_id asc"); while ($systems[] = dbr(1)) { } //dump all entries into $systems. unset($systems[count($systems) - 1]); //remove a surplus entry } //process stars foreach ($systems as $star) { if (!empty($star['links'])) { //don't link all systems to 1 automatically. $star_links = array_map("plus_one", explode(',', $star['links'])); $star_id = $star['num'] + 1; foreach ($star_links as $link) { //make star links if ($link < 1) { continue 1; } $other_star = $systems[$link - 1]; //set other_star to the link destination. imageline($im, $star['x_loc'] + $offset_x, $star['y_loc'] + $offset_y, $other_star['x_loc'] + $offset_x, $other_star['y_loc'] + $offset_y, $color_sl); } } if (!empty($star['wormhole'])) { //Wormhole Manipulation $other_star = $systems[$star['wormhole'] - 1]; if ($other_star['wormhole'] == $star_id) { //two way imageline($im, $star['x_loc'] + $offset_x, $star['y_loc'] + $offset_y, $other_star['x_loc'] + $offset_x, $other_star['y_loc'] + $offset_y, $worm_2way_color); } else { //one way imageline($im, $star['x_loc'] + $offset_x, $star['y_loc'] + $offset_y, $other_star['x_loc'] + $offset_x, $other_star['y_loc'] + $offset_y, $worm_1way_color); } } } $central_star = 0; //hack to take into account arrays start with 0. foreach ($systems as $star) { //place the star itself. This is done after the lines, so the text comes on top. $off = array(-5, 4); //offset of text from star location if ($star['num'] == $central_star) { imagecopy($im, $earthIm, $star['x_loc'] + $offset_x + $earthPos[0], $star['y_loc'] + $offset_y + $earthPos[1], 0, 0, $earthDim[0], $earthDim[1]); } else { imagecopy($im, $starIm, $star['x_loc'] + $offset_x + $starPos[0], $star['y_loc'] + $offset_y + $starPos[1], 0, 0, $starDim[0], $starDim[1]); } //only show warp numbers if admin wants them. if ($uv_show_warp_numbers == 1) { if ($central_star === $star['num']) { $off = array(-5, 9); //write the star number under the star imagestring($im, $UNI['num_size'] + 2, $star['x_loc'] + $offset_x + $off[0], $star['y_loc'] + $offset_y + $off[1], $star['num'] + 1, $color_st); } else { imagestring($im, $UNI['num_size'], $star['x_loc'] + $offset_x + $off[0], $star['y_loc'] + $offset_y + $off[1], $star['num'] + 1, $color_st); } } } //for just a preview we can quit while we're ahead. if (isset($preview)) { Header("Content-type: image/png"); ImagePng($im); ImageDestroy($im); exit; } //Draw title centered on the horizontal imagestring($im, 5, $size_x / 2 - 80, 5, "Universal Star Map", $color_l); //Create buffer image $bb_im = imagecreatetruecolor($UNI['size_x'] + $UNI['localmapwidth'], $UNI['size_y'] + $UNI['localmapheight']); ImageColorAllocate($im, $UNI['bg_color'][0], $UNI['bg_color'][1], $UNI['bg_color'][2]); ImageCopy($bb_im, $im, $UNI['localmapwidth'] / 2, $UNI['localmapheight'] / 2, $offset_x, $offset_y, $size_x, $size_y); //Create printable map $p_im = imagecreatetruecolor($size_x, $size_y); ImageColorAllocate($p_im, $UNI['print_bg_color'][0], $UNI['print_bg_color'][1], $UNI['print_bg_color'][2]); ImageCopy($p_im, $im, 0, 0, 0, 0, $size_x, $size_y); //Replace colors $index = ImageColorExact($p_im, $UNI['bg_color'][0], $UNI['bg_color'][1], $UNI['bg_color'][2]); ImageColorSet($p_im, $index, $UNI['print_bg_color'][0], $UNI['print_bg_color'][1], $UNI['print_bg_color'][2]); $index = ImageColorExact($p_im, $UNI['link_color'][0], $UNI['link_color'][1], $UNI['link_color'][2]); ImageColorSet($p_im, $index, $UNI['print_link_color'][0], $UNI['print_link_color'][1], $UNI['print_link_color'][2]); $index = ImageColorExact($p_im, $UNI['num_color'][0], $UNI['num_color'][1], $UNI['num_color'][2]); ImageColorSet($p_im, $index, $UNI['print_num_color'][0], $UNI['print_num_color'][1], $UNI['print_num_color'][2]); $index = ImageColorExact($p_im, $UNI['num_color3'][0], $UNI['num_color3'][1], $UNI['num_color3'][2]); ImageColorSet($p_im, $index, $UNI['print_num_color'][0], $UNI['print_num_color'][1], $UNI['print_num_color'][2]); $index = ImageColorExact($p_im, $UNI['star_color'][0], $UNI['star_color'][1], $UNI['star_color'][2]); ImageColorSet($p_im, $index, $UNI['print_star_color'][0], $UNI['print_star_color'][1], $UNI['print_star_color'][2]); //Draw new label ImageFilledRectangle($p_im, 0, 0, $size_x, $UNI['map_border'], ImageColorExact($p_im, $UNI['print_bg_color'][0], $UNI['print_bg_color'][1], $UNI['print_bg_color'][2])); imagestring($p_im, 5, $size_x / 2 - 80, 5, "Printable Star Map", ImageColorExact($p_im, $UNI['print_label_color'][0], $UNI['print_label_color'][1], $UNI['print_label_color'][2])); //get random filename. primarily for it re-genning maps. if (empty($random_filename)) { db("select random_filename from se_games where db_name = '{$game_id}'"); $temp_filename = dbr(1); $random_filename = $temp_filename['random_filename']; } //Save map and finish ImagePng($im, "{$directories['images']}/{$game_id}_maps/sm_full_{$random_filename}.png"); ImageDestroy($im); ImagePng($bb_im, "{$directories['images']}/{$game_id}_maps/bb_full_{$random_filename}.png"); ImageDestroy($bb_im); ImagePng($p_im, "{$directories['images']}/{$game_id}_maps/psm_full_{$random_filename}.png"); ImageDestroy($p_im); }
/** * The actual rendering of the image file. * Basically sets the dimensions, the background color, the traverses the array of GIFBUILDER objects and finally setting the transparent color if defined. * Creates a GDlib resource in $this->im and works on that * Called by gifBuild() * * @return void * @access private * @see gifBuild() * @link http://typo3.org/doc.0.html?&tx_extrepmgm_pi1[extUid]=270&tx_extrepmgm_pi1[tocEl]=378&cHash=3c2ae4a1ab */ function make() { // Get trivial data $XY = $this->XY; // Gif-start $this->im = imagecreatetruecolor($XY[0], $XY[1]); $this->w = $XY[0]; $this->h = $XY[1]; // backColor is set $BGcols = $this->convertColor($this->setup['backColor']); $Bcolor = ImageColorAllocate($this->im, $BGcols[0], $BGcols[1], $BGcols[2]); ImageFilledRectangle($this->im, 0, 0, $XY[0], $XY[1], $Bcolor); // Traverse the GIFBUILDER objects an render each one: if (is_array($this->setup)) { $sKeyArray = t3lib_TStemplate::sortedKeyList($this->setup); foreach ($sKeyArray as $theKey) { $theValue = $this->setup[$theKey]; if (intval($theKey) && ($conf = $this->setup[$theKey . '.'])) { switch ($theValue) { // Images case 'IMAGE': if ($conf['mask']) { $this->maskImageOntoImage($this->im, $conf, $this->workArea); } else { $this->copyImageOntoImage($this->im, $conf, $this->workArea); } break; // Text // Text case 'TEXT': if (!$conf['hide']) { if (is_array($conf['shadow.'])) { $this->makeShadow($this->im, $conf['shadow.'], $this->workArea, $conf); } if (is_array($conf['emboss.'])) { $this->makeEmboss($this->im, $conf['emboss.'], $this->workArea, $conf); } if (is_array($conf['outline.'])) { $this->makeOutline($this->im, $conf['outline.'], $this->workArea, $conf); } $conf['imgMap'] = 1; $this->makeText($this->im, $conf, $this->workArea); } break; // Text effects: // Text effects: case 'OUTLINE': if ($this->setup[$conf['textObjNum']] == 'TEXT' && ($txtConf = $this->checkTextObj($this->setup[$conf['textObjNum'] . '.']))) { $this->makeOutline($this->im, $conf, $this->workArea, $txtConf); } break; case 'EMBOSS': if ($this->setup[$conf['textObjNum']] == 'TEXT' && ($txtConf = $this->checkTextObj($this->setup[$conf['textObjNum'] . '.']))) { $this->makeEmboss($this->im, $conf, $this->workArea, $txtConf); } break; case 'SHADOW': if ($this->setup[$conf['textObjNum']] == 'TEXT' && ($txtConf = $this->checkTextObj($this->setup[$conf['textObjNum'] . '.']))) { $this->makeShadow($this->im, $conf, $this->workArea, $txtConf); } break; // Other // Other case 'BOX': $this->makeBox($this->im, $conf, $this->workArea); break; case 'EFFECT': $this->makeEffect($this->im, $conf); break; case 'ADJUST': $this->adjust($this->im, $conf); break; case 'CROP': $this->crop($this->im, $conf); break; case 'SCALE': $this->scale($this->im, $conf); break; case 'WORKAREA': if ($conf['set']) { $this->setWorkArea($conf['set']); // this sets the workArea } if (isset($conf['clear'])) { $this->workArea = $this->defaultWorkArea; // this sets the current to the default; } break; case 'ELLIPSE': $this->makeEllipse($this->im, $conf, $this->workArea); break; } } } } if ($this->setup['transparentBackground']) { // Auto transparent background is set $Bcolor = ImageColorExact($this->im, $BGcols[0], $BGcols[1], $BGcols[2]); imagecolortransparent($this->im, $Bcolor); } elseif (is_array($this->setup['transparentColor_array'])) { // Multiple transparent colors are set. This is done via the trick that all transparent colors get converted to one color and then this one gets set as transparent as png/gif can just have one transparent color. $Tcolor = $this->unifyColors($this->im, $this->setup['transparentColor_array'], intval($this->setup['transparentColor.']['closest'])); if ($Tcolor >= 0) { imagecolortransparent($this->im, $Tcolor); } } }