Скрипт на вывод эмблемы клана. - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Движки сайтов (CMS)

Движки сайтов (CMS)
Обсуждения, решения проблем веб обвязок для ява сервера.

Ответ
Опции темы
Непрочитано 02.10.2012, 17:30   #1
Пользователь

Автор темы (Топик Стартер) Скрипт на вывод эмблемы клана.

Прошу помочь с выводом эмблемы клана. Дело в том, что она хранится в бд в формат blob и при выводе как картинки выдает набор символов. Может кто-нибудь знает как можно вывести в нормальном виде?


Вот так идёт у меня запрос в контроллере:
$select = $db->select()
->from(array('cas' => 'castle'), array('cas.name', 'cas.siege_date', 'cas.tax_percent', 'cas.id'))
->joinleft(array('cl' => 'clan_data'), 'cas.id=cl.hasCastle',array('clan_id','crest'));
$stmt = $db->query($select);
$castle = $stmt->fetchAll();
$this->view->ccastle=$castle;

И во view файле идёт вывод:
foreach($this->ccastle as $row) {
echo $row->crest;
}

Пробовал выводить через тег <img...> тоже безрезультатно.
MIF вне форума Ответить с цитированием
Непрочитано 02.10.2012, 17:32   #2
Аватар для NotSpecified
Олдфаг

По умолчанию Re: Скрипт на вывод эмблемы клана.

Вы с чем работаете? MySQL или MSSQL? Картинка хранится в наборе символов, а эти картинки надо каким-то боком с сервера извлекать и сопоставлять.
NotSpecified вне форума Ответить с цитированием
Непрочитано 02.10.2012, 17:40   #3
Пользователь

Автор темы (Топик Стартер) Re: Скрипт на вывод эмблемы клана.

С MySQL
А выдает мне вот такую билеберду.
DDS |Ђ DXT1і Ч ЄЄЄЄі Ч ЄЄЄЄі Ч ЄЄЄЄі Ч ЄЄЄЄ  U^шшЂаU}л‚@Ђ——–ЬЂ ѓ‚л} @ЁѕХХ ‚«}U Ђ\Ю·5Ђ`jаЂ@Хµ-- `_zxxЂа-%µµ` Ааz_
MIF вне форума Ответить с цитированием
Непрочитано 02.10.2012, 17:44   #4
Аватар для Dementor
Герой

По умолчанию Re: Скрипт на вывод эмблемы клана.

readImageBlob()

Добавлено через 7 минут
$imagick = new Imagick();
$imagick->readImageBlob($sql);
$imagick->setFormat('png');
header("Content-type: image/png");
echo $imagick->getImageBlob();
$imagick->destroy();

Вроде так.

Последний раз редактировалось Dementor; 02.10.2012 в 17:52. Причина: Добавлено сообщение
Dementor вне форума Ответить с цитированием
Непрочитано 02.10.2012, 19:40   #5
Пользователь

Автор темы (Топик Стартер) Re: Скрипт на вывод эмблемы клана.

Цитата:
Сообщение от Неверный Посмотреть сообщение
Добавлено через 7 минут
$imagick = new Imagick();
$imagick->readImageBlob($sql);
$imagick->setFormat('png');
header("Content-type: image/png");
echo $imagick->getImageBlob();
$imagick->destroy();

Вроде так.
Ругается на первую же строчку:
Class 'Imagick' not found
Может его где-то определить надо?

Похоже на проблемы с моим php, видимо модуль не установлен, если получится отпишусь.
MIF вне форума Ответить с цитированием
Непрочитано 02.10.2012, 21:04   #6
Пользователь

По умолчанию Re: Скрипт на вывод эмблемы клана.

header("Content-type: image/jpeg");
x3k вне форума Ответить с цитированием
Непрочитано 03.10.2012, 14:28   #7
Пользователь

Автор темы (Топик Стартер) Re: Скрипт на вывод эмблемы клана.

Цитата:
Сообщение от x3k Посмотреть сообщение
header("Content-type: image/jpeg");
Так не работает. Так и не смог подключить imagick. Всякие разные версии устанавливал и dll менял разные - безрезультатно, всё таже ошибка, хотя если в cmd прописать convert, то видно что он установлен.

Если что, php у меня 5.3.*

Буду пробовать другими способами.
MIF вне форума Ответить с цитированием
Непрочитано 03.10.2012, 15:28   #8
Пользователь

По умолчанию Re: Скрипт на вывод эмблемы клана.

Цитата:
Сообщение от MIF Посмотреть сообщение
Так не работает. Так и не смог подключить imagick. Всякие разные версии устанавливал и dll менял разные - безрезультатно, всё таже ошибка, хотя если в cmd прописать convert, то видно что он установлен.

Если что, php у меня 5.3.*

Буду пробовать другими способами.
т.е. как это не работает? опишите подробнее.
x3k вне форума Ответить с цитированием
Непрочитано 03.10.2012, 15:44   #9
Пользователь

Автор темы (Топик Стартер) Re: Скрипт на вывод эмблемы клана.

Цитата:
Сообщение от x3k Посмотреть сообщение
т.е. как это не работает? опишите подробнее.
DDS |� DXT1������������������������ �U^���U}�@����܀ ���}�@���ՠ��}U��\޷5�`j�@յ--�`_zxx��-%��` ��z_
Вместо картинки выдаёт это.

Нашел в инете вот такой вариант:
if ($row->crest) {
header("Content-type:image/bmp");
var_dump($row->crest);
}
else{}
К сожалению результат не намного лучше: string(256) "DDS |�...
MIF вне форума Ответить с цитированием
Непрочитано 03.10.2012, 16:54   #10
Аватар для Dizband
ЛК под любые игры

По умолчанию Re: Скрипт на вывод эмблемы клана.

PHP код:
<?

/********************************************************************/
/*                                                                  */
/* Lineage2 DLE Module, Copyright © 2007-2009, hellEVIL TEAM        */
/* http://www.hellevil.net                                          */
/*                                                                  */
/********************************************************************/

if(!defined('DATALIFEENGINE')) {
    die(
"Hacking attempt!");
}

/*
 * Функции
 */

function empty_image()
{
    @
header("Content-type: image/gif");
    @
header("Cache-Control: max-age=3600");
    
$img=imagecreatetruecolor(1,1);
    
imagecolortransparent($img0);
    
imagegif($img);
    
imagedestroy($img);
    exit();
}

function 
readInt($file)
{
    
$b4 ord(fgetc($file)); 
    
$b3 ord(fgetc($file));
    
$b2 ord(fgetc($file)); 
    
$b1 ord(fgetc($file));
    return (
$b1<<24)|($b2<<16)|($b3<<8)|$b4;
}

function 
readShort($file)
{
    
$b2 ord(fgetc($file)); 
    
$b1 ord(fgetc($file));
    return (
$b1<<8)|$b2;
}

/*
 * Переменные
 */

if ($id == 0empty_image();

$type = isset($_REQUEST["type"]) ? $_REQUEST["type"] : "clan" ;

/*
 * Тип запроса
 */

switch($type)
{
    case 
"clan":
        
$query $dbg[$_serv]->sql_query_jdb("getCrest", array('clan_id' => $id));
        
$prefix "Crest_";
        break;
        
    case 
"ally":
        
$query $dbg[$_serv]->sql_query_jdb("getCrest", array('clan_id' => $id));
        
$prefix "AllyCrest_";
        break;
        
    default:
        
empty_image();
        break;
}

if (
$dbg[$_serv]->sql_numrows() == 1$clan_crest $dbg[$_serv]->sql_fetchfield(00$query);
else 
empty_image();

$filename "{$la2config["gameserver"][$_serv]["menu"]["crests"]}/{$prefix}_{$id}.bmp";

if (
file_exists($filename) == false
    @
file_put_contents($filename$clan_crest);


$file = @fopen($filename,'rb');
if(
$file)
    
$dds fread($file,4);
else
    
$dds false;
if (
$dds!=='DDS ') die("Error: изображение DDS не найдено");

//DDS header
$hdrSize readInt($file);
$hdrFlags readInt($file);
$imgHeight readInt($file)-4;
$imgWidth readInt($file);
$imgPitch readShort($file);

//DXT1 header
fseek($file84);

$dxt1 fread($file,4);

if (
$dxt1!=='DXT1') die("Error: не найден формат DX1");

//here we go
fseek($file128);

@
header ("Content-type: image/png");
@
header("Cache-Control: max-age=3600");
$img=imagecreatetruecolor($imgWidth,$imgHeight);

for (
$y=-1$y<$imgHeight/4$y++)
{
  for (
$x=0$x<$imgWidth/4$x++)
  {
    
$color0_16 readShort($file);
    
$color1_16 readShort($file);
    
$r0 = ($color0_16 >> 11) << 3;
    
$g0 = (($color0_16 >> 5) & 63) << 2;
    
$b0 = ($color0_16 31) << 3;
    
$r1 = ($color1_16 >> 11) << 3;
    
$g1 = (($color1_16 >> 5) & 63) << 2;
    
$b1 = ($color1_16 31) << 3;
    
$color0_32 imagecolorallocate($img,$r0,$g0,$b0);
    
$color1_32 imagecolorallocate($img,$r1,$g1,$b1);
    
$color01_32 imagecolorallocate($img,$r0/2+$r1/2,$g0/2+$g1/2,$b0/2+$b1/2); 
    
$black imagecolorallocate($img,0,0,0); 
    
$data readInt($file);
    for (
$yy=0;$yy<4;$yy++)
    {
      for (
$xx=0;$xx<4;$xx++)
      {
        
$bb $data 3;
        
$data $data >> 2;
        switch (
$bb)
        {
          case 
0$c $color0_32; break;
          case 
1$c $color1_32; break;
          case 
2$c $color01_32; break;
          default: 
$c $black; break;
        }
        
imagesetpixel($img,$x*4+$xx,$y*4+$yy,$c);
      }
    }
  }
}

imagepng($img);

exit;

?>
Выдерните логику отсюда.
Dizband вне форума Ответить с цитированием
Сказали спасибо:
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
itamename-e.dat UFODriverr Lineage II 5 28.02.2021 18:17
Вывод ошибок flashboom777 PHP 3 15.04.2011 14:41
Вывод иконки клана на сайте. Ametist PHP 5 29.11.2009 21:59
Lineage 2 Cronicle 5 PROGRAMMATOR Lineage II 11 19.07.2008 13:14


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 14:15. Часовой пояс GMT +3.

Вверх