Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изображения в БД. Как вытащить? 
V
    Опции темы
Stray
Дата 5.12.2007, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
Stray
Дата 5.12.2007, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 5.12.2007

Репутация: нет
Всего: нет



Проблема решена!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0413 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.