Новичок
Профиль
Группа: Участник
Сообщений: 2
Регистрация: 5.12.2007
Репутация: нет Всего: нет
|
Всем добрового времени суток! Я пишу топ гильдий для игрового сервера. В общем всё написал, но в конце столкнулся с такой проблемой. Никак не получается вытащить эмблему (гильдии) из БД. Я понимаю, что хранение изображений в БД - нецелесообразно. Но здесь отдельный случай. Мне дали код, который вытаскивает эту эмблему, но только эмблему. И всё. А мне необходимо динамически сформировать страницу. В общем вот код: | Код | <?php include('config.php');
function emblema($embl){ function imagecreatefrombmpstring($im) { $header = unpack("vtype/Vsize/v2reserved/Voffset", substr($im,0,14)); $info = unpack("Vsize/Vwidth/Vheight/vplanes/vbits/Vcompression/Vimagesize/Vxres/Vyres/Vncolor/Vimportant", substr($im,14,40)); extract($info); extract($header); if($type != 0x4D42) return false; $palette_size = $offset - 54; $ncolor = $palette_size / 4; $imres=imagecreatetruecolor($width,$height); imagealphablending($imres,false); imagesavealpha($imres,true); $pal=array(); if($palette_size) { $palette = substr($im, 54, $palette_size); $gd_palette = ""; $j = 0; $n=0; while($j < $palette_size) { $b = ord($palette{$j++}); $g = ord($palette{$j++}); $r = ord($palette{$j++}); $a = ord($palette{$j++}); if ( ($r==255) && ($g==0) && ($b==255)) $a=127; // alpha = 255 on 0xFF00FF $pal[$n++]=imagecolorallocatealpha($imres, $r, $g, $b, $a); } } $scan_line_size = (($bits * $width) + 7) >> 3; $scan_line_align = ($scan_line_size & 0x03) ? 4 - ($scan_line_size & 0x03): 0; for($i = 0, $l = $height - 1; $i < $height; $i++, $l--) { $scan_line = substr($im, $offset + (($scan_line_size + $scan_line_align) * $l), $scan_line_size); if($bits == 24) { $j = 0; $n=0; while($j < $scan_line_size) { $b = ord($scan_line{$j++}); $g = ord($scan_line{$j++}); $r = ord($scan_line{$j++}); $a = 0; if ( ($r==255) && ($g==0) && ($b==255)) $a=127; // alpha = 255 on 0xFF00FF $col=imagecolorallocatealpha($imres, $r, $g, $b, $a); imagesetpixel($imres, $n++, $i, $col); } } else if($bits == 8) { $j=0; while($j<$scan_line_size) { $col=$pal[ord($scan_line{$j++})]; imagesetpixel($imres, $j-1, $i, $col); } } else if($bits == 4) { $j = 0; $n=0; while($j < $scan_line_size) { $byte = ord($scan_line{$j++}); $p1 = $byte >> 4; $p2 = $byte & 0x0F; imagesetpixel($imres, $n++, $i, $pal[$p1]); imagesetpixel($imres, $n++, $i, $pal[$p2]); } } else if($bits == 1) { $j = 0; $n=0; while($j < $scan_line_size) { $byte = ord($scan_line{$j++}); $p1 = (int) (($byte & 0x80) != 0); $p2 = (int) (($byte & 0x40) != 0); $p3 = (int) (($byte & 0x20) != 0); $p4 = (int) (($byte & 0x10) != 0); $p5 = (int) (($byte & 0x08) != 0); $p6 = (int) (($byte & 0x04) != 0); $p7 = (int) (($byte & 0x02) != 0); $p8 = (int) (($byte & 0x01) != 0); imagesetpixel($imres, $n++, $i, $pal[$p1]); imagesetpixel($imres, $n++, $i, $pal[$p2]); imagesetpixel($imres, $n++, $i, $pal[$p3]); imagesetpixel($imres, $n++, $i, $pal[$p4]); imagesetpixel($imres, $n++, $i, $pal[$p5]); imagesetpixel($imres, $n++, $i, $pal[$p6]); imagesetpixel($imres, $n++, $i, $pal[$p7]); imagesetpixel($imres, $n++, $i, $pal[$p8]); } } } return $imres; } $query_emblem = mysql_query("SELECT `emblem_data` FROM `guild` WHERE `guild_id` = $embl"); $nb_emblem = mysql_num_rows( $query_emblem ); $fetch_emblem = mysql_fetch_array( $query_emblem ); $ebm=$fetch_emblem['emblem_data']; if( $nb_emblem != 0 && $ebm != 0 ) { $ebm=@gzuncompress(pack('H*',$ebm)); $im=imagecreatefrombmpstring($ebm); header('Content-Type: image/png'); imagepng($im); exit; } $im = imagecreate(24, 24); $background_color = imagecolorallocatealpha ($im, 255, 0, 255,127); imagecolortransparent($im, $background_color); header ('Content-type: image/png'); imagepng($im); exit; } DEFINE('LADDER', "SELECT `guild`.`emblem_id`, `guild`.`name`, `guild`.`master`, `guild`. `guild_lv`, `guild`.`exp`, `guild`.`max_member`, `guild`.`guild_id` FROM `guild` ORDER BY `guild`.`guild_lv` DESC"); $test = sprintf(LADDER); $res = mysql_query($test); $heads = array("Место", "Эмблема", "Наименование", "GuildMaster", "Level", "Exp", "Members"); echo "<html><title>Top Guild</title>"; echo "<center><table border width = \"800\">\n"; if ($heads) { $n = sizeof($heads); for ($i=0; $i < $n; $i++) echo "<TH>".$heads[$i]."</TH>"; } $n = sizeof($res); for ($i = 1; $i <= $n+1; $i++) { $temp = mysql_fetch_row($res); // $Embl = $temp[0]; $Name = $temp[1]; $gm = $temp[2]; $lvl = $temp[3]; $exp = $temp[4]; // $con_memb = $temp[5]; $max_memb = $temp[5]; $query = "SELECT `guild_member`.`name` FROM `guild_member` WHERE `guild_member`.`guild_id` = '$lvl'"; $result = mysql_query($query); while ($temp = mysql_fetch_row($result)) { $num = sizeof($temp); } echo $num; $embl = 2; echo "<TR bgcolor=\"#E5EAF5\">\n"; echo "<td><center>$i</center></td> <td><center>"; emblema($embl); echo "</center></td> <td><center><a href=\"http://localhost/Turn/test.php?name=$Name\">$Name</a></center></td> <td><center>$gm</center></td> <td><center>$lvl</center></td> <td><center>$exp</center></td> <td><center>$max_memb</center></td>"; } echo "</TR></table></center></html>"; mysql_close(); ?>
|
Функция emblema() это уже моя импровизация... Функция imagecreatefrombmpstring() работает (если её использовать отдельно). Как раз с этой функцией мне и помогли. У меня возникает ошибка уже отправленных заголовков. Warning: Cannot modify header information - headers already sent by (output started at s:\home\localhost\www\turn\top_guild.php:112) in s:\home\localhost\www\turn\top_guild.php on line 96 ‰PNG ��� Я понимаю почему возникает эта ошибка, но не знаю как так поступить, чтобы выводились эмблемы и в то же время всё это динамически формировалось в таблице. Очень прошу помочь. Это сообщение отредактировал(а) Stray - 5.12.2007, 14:36
|