Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> multipart в браузер 
V
    Опции темы
vitaly1979
Дата 19.4.2006, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



просидел несколько часов над такой ерундой
но так и не осилил
менял всяко-разно

понадобилось вывести в браузер картинку и html одной порцией
ни осел ни опера не хотят отображать, хотя the bat нормально отображает
в чем же дело?


Код

#! c:\server\perl\bin\perl.exe

use Image::Magick;
use MIME::Base64;
use CGI::Carp qw(fatalsToBrowser);

        $text="SECRET_CODE";

        $image=Image::Magick->new(magick=>'gif');

        $r=$image->Set(size=>'200x50');
        warn "$r" if "$r";

        $r=$image->ReadImage("xc:white");
        warn "$r" if "$r";

        $image->Annotate(font=>'verdana',pointsize=>15,fill=>'black',text=>$text,x=>10,y=>20);

        $r=$image->Write('C:\Server\www\test_gif.gif');
        warn "$r" if "$r";

        @blob=$image->ImageToBlob();

        $i=0;
        $FILE64="";
        use bytes;
        while(($str57=bytes::substr($blob[0],$i,57)))
        {
                $i+=bytes::length($str57);
                $str64=encode_base64($str57,"\n");
                $FILE64.=$str64;
                #$FILE64.=$str64."\r\n";
                $str57="";
        }
        no bytes;


        #$i=length($content);

        print "Content-Type: multipart/mixed; boundary=\"--OCWFKJ_EPEAPLDYL\"\r\n";
        #print "Content-Length: $i\r\n";
        #print "Content-Type: image/gif; name=\"test.gif\"\r\n";

        print "\r\n";

        #print "$content";
        #binmode STDOUT;
        #print $blob[0];

print <<www1;
----OCWFKJ_EPEAPLDYL
Content-Type: image/gif; name="test.gif"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="test.gif"
Content-ID: <test1>

$FILE64
----OCWFKJ_EPEAPLDYL
Content-Type: text/html
Content-Transfer-Encoding: 8bit

<html>
<body>
<p>code:<br>
<img src="cid:test1">
</body>
</html>
----OCWFKJ_EPEAPLDYL--
www1

exit;
 
PM MAIL   Вверх
korob2001
Дата 19.4.2006, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Ты хочешь сгенерировать изображение с защитным кодом и показать его в HTML страничке?
Посмотри эту тему, там правда пример с GD, но тебе нужно понять принцип. 
http://forum.vingrad.ru/index.php?showtopic=52578

ЗЫ: если это действительно изображение с защитным кодом, то ИМХО генерируй его GD модулем, генерить его Magick'ом, то же самое что стрелять из пушки по воробьям. 


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
vitaly1979
Дата 19.4.2006, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



почему из пушки по воробьям?

в том примере значит происходит 2 обращения к скрипту
не очень удобный способ, если нужно передавать параметры из формы,
переданной при 1-м запросе опять в браузер и потом опять к  скрипту
например текст, который надо преобразовать в картинку

т.е. тут напрашивается запись картинки на диск
жаль что на получилось одной порцией, непонятно почему,
может в заголовках чего не хватает 
PM MAIL   Вверх
korob2001
Дата 19.4.2006, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Цитата

почему из пушки по воробьям?

Причин несколько:
1. GD намного легче (я имею ввиду нагрузку на сервер.), и изображение защитного кода, на нём получится ни чуть не хуже, чем на Magick.
2. Не каждый хостер согласится поставить тебе Magick, особенное если ты его уже оплатил (хост), а только потом обратился с такой прозьбой, по той причине, что указана в первом пункте. Вообще нужно сразу с хостерами договариваться о поддержке и установке недостающих модулей.

Потому старайся юзать Magick для каких-нить более сложных манипуляций с изображениями.
Ещё раз повторю: 
GD - это пистолет
Magick - это пушка
Это к тому, что по воробьям нужно стрелять из пистолета, да бы эта стельба не отражалась на всём остальном. ;)))))) Ну а если и отражалась, то с минимальными потерями. ;))
Цитата

в том примере значит происходит 2 обращения к скрипту
не очень удобный способ, если нужно передавать параметры из формы,
переданной при 1-м запросе опять в браузер и потом опять к  скрипту
например текст, который надо преобразовать в картинку

Ну можно скрипт разбить на два, если это нужно. Один будет выводить HTML, второй будет генерировать изображение.
Я правда не совсем понял, что ты имеешь ввиду, насчёт преобразования текста в изображение. Попробуй запусти этот код:
Код
#!/usr/bin/perl -w
use strict;
use GD;
use CGI::Carp qw(fatalsToBrowser);
use CGI qw(param);

sub graph {
    my $message = shift;
    my $im = new GD::Image(700,25);
    my $white = $im->colorAllocate(255,255,255);
    my $black = $im->colorAllocate(0,0,0);
    my $red = $im->colorAllocate(255,0,0);
    my $blue = $im->colorAllocate(0,150,255);
    $im->transparent($white);
    $im->interlaced('true');
    $im->fill(50,50, $blue);
    $im->string(gdGiantFont,15,4,$message,$white);
    binmode STDOUT;
    print "Content-type: image/png\n\n";
    print $im->png;
}

sub startform {
    my $message = shift || "Not data :(";
    print "Content-type: text/html\n\n";
    print "<html>";
    print "<head><title>Test</title></head>";
    print "<body>";
    print "<form method='post'>";
    print "<input type='text' size='25' maxlength='50' name='message'/>";
    print "<input type='submit' value='Отправить'/>";
    print "</form>";
    print "<br/>";
    print "<img src='$ENV{SCRIPT_NAME}?img=1&msg=$message' border='0' alt=''/>";
    print "</body></html>";
}

if (defined param('message')) {
     startform(param('message'));
} elsif (defined param('img') and defined param('msg')) {
     my $mess = param('msg');
     if ($mess !~ /^[A-Za-z0-9\s_-]+$/) {
          $mess = "Only letters A-Za-z, digest 0-9, space and simbols -_";
     } elsif ( $mess =~ /^\s+$/ ) {
          $mess = "You can't insert only spaces";
     } elsif ( length($mess) > 50 ) {
          $mess = "Your message is very long.";
     }
     graph($mess);
} else {
     startform();
}

Здесь из формы принимается сообщение и на этой же странице преобразуется в изображение. Вообще, атрибуту src, тэга <img> нужен путь к изображению, а наш скрипт лишь эмулирует изображение, точнее не эмулирует а он создаёт это изображение на лету, но создаёт он его только при наличии определённых параметров.
Цитата

т.е. тут напрашивается запись картинки на диск

Ну можно записывать и на диск, а потом в src указать к нему путь. Но мне почему-то кажется, что для изображений с защитным кодом, это лишнее. Хотя это дело вкуса. ;))))
Цитата

жаль что на получилось одной порцией, непонятно почему,
может в заголовках чего не хватает

Не расстраивайся раньше времени, может быть ещё всё получится? Я же не сказал, что это невозможно, просто показал как это делаю я.  smile        

Это сообщение отредактировал(а) korob2001 - 19.4.2006, 17:39


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
vitaly1979
Дата 20.4.2006, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



спасибо, пример рабочий 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




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


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

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