[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Изображения в БД.
Symbiot
Здравствуйте!
Прощу прощения за назайливость. Я очередной раз задаю вопрос связанный с написанием топа Гильдий. blush.gif
У меня осталась единственная проблема. Это вытащить эмблему из БД. Не просто вытащить, а еще и динамически эти эмблемы формировать на странице.
Мне уже немного помогли, но всё-равно пока ничего не получается.
Вот код:
Код
<?php
    include('config.php');

    $id = $_GET['guild'];
    $sql = "SELECT * FROM `guild` WHERE `guild_id` = '$id'";
    $result = mysql_query($sql);
    $row = mysql_fetch_assoc($result);
    $emblem= $row['emblem_data'];
    if ($emblem=="")
    {  
        header("Location: emblem_0.bmp");
    }
    $emblem=@gzuncompress(pack('H*',$emblem));
    if (!headers_sent())
    {
            header("Content-Type: image/bitmap");
            echo $emblem;
            exit;
    }
    else
    {
            echo "Error";
            exit;
    }
?>

Этот скрипт вроде работает, но никакого изображения не выдает.
Выдаёт Error.
Очень прошу помочь.
Или дайте, пожалуйста, какой-либо линк на ресурс посвященный этой теме.



Спустя 27 дней, 22 часа, 7 минут, 13 секунд (5.12.2007 - 16:54) Symbiot написал(а):
Ребят, неужели никто не знает?
Вот мои недавние попытки:
Код
<?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();
?>


Функция 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  пїЅпїЅпїЅ
Я знаю, что это за ошибка, но не знаю как её исправить? Мне ведь эти эмблемы необходимо вывести в таблице. Поэтому идет использование тегов и echo.
Как сделать так, чтобы не возникало ошибки уже отправленных заголовков? И чтобы эти эмблемы динамически формировались.

Спустя 3 часа, 6 минут, 30 секунд (5.12.2007 - 20:00) EvPut написал(а):
Цитата(Symbiot @ 5.12.2007, 15:54) [snapback]30219[/snapback]
Ребят, неужели никто не знает?
Вот мои недавние попытки:
Функция 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  пїЅпїЅпїЅ
Я знаю, что это за ошибка, но не знаю как её исправить? Мне ведь эти эмблемы необходимо вывести в таблице. Поэтому идет использование тегов и echo.
Как сделать так, чтобы не возникало ошибки уже отправленных заголовков? И чтобы эти эмблемы динамически формировались.


Cмысл следующй:
Функцию по выводу изображения помещаете в отдельный файл, которому будут передаваться пареметры, исходя из которых из базы будет выбираться необходимое изображение, формироваться и выдаваться через Header. Больше ничего, типа echo т.п.
Далее, в то место, где необходимо вывести изображение, вставляете <img> c именем файла и параметрами вывода.
Например:
Код
echo"<td><center><img src=\"getimagepng.php?id=12\" border=\"0\"><center></td>";

Спустя 43 минуты, 31 секунда (5.12.2007 - 20:44) Symbiot написал(а):
blink.gif blink.gif blink.gif
Работает!
Ну наконец-то! Я 2 месяца мучался с этой проблемой.
EvPut, спасибо тебе огромное!!! Просто выручил! happy.gif


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.