powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Вывод картинок в PERL
18 сообщений из 18, страница 1 из 1
Вывод картинок в PERL
    #32542008
MySQLdb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго времени суток!

Не могу решить проблему, хотя сам понимаю,
что решение ее простое, но какое незнаю.

Есть у меня база данных, а вернее таблица в ней,
котороя хранит в себе картинки.

DROP TABLE IF EXISTS `MyImage`;
CREATE TABLE `MyImage`
(
`ID` bigint(20) unsigned zerofill NOT NULL auto_increment,
`SelfImage` longblob NOT NULL,
PRIMARY KEY (`ID`)
)
TYPE=MyISAM COMMENT='MyImage';

При помощи скрипта на PERL , из файла в нее записывается картинка,
в поле `SelfImage`, в этом аопросов нет. Но мне надо ее вывести потом клиенту, а как это сделать ?

Делаю запрос вида :

SELECT * FROM `MyImage`
WHERE `ID`= 00000000000000000001 ;

При этом я получаю ID, SelfImage, далее `SelfImage` я перевожу в
строку, и после этого вывожу ее клиенту через print, ожидая,
что в IE отобразится картинка, но вместо картинки билеберда в виде
текста, а не картинки....

Помогите, пожалусто, как все таки правильно выводить картинки ?
Если у когото есть малюсенький скрипт, буду поистине Вам благодарен,
если Вы его предоставите в качестве поучительного примера.....

С тем самым прикладываю таблицу, в zip архиве, ее достаточно скопировать в
./data/test/

Заранее благодарю.





-----------------------------------------------------------
С уважением,MySQLdb
...
Рейтинг: 0 / 0
Вывод картинок в PERL
    #32542133
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
MySQLdbвывожу ее клиенту через print, ожидая,
что в IE отобразится картинка, но вместо картинки билеберда в виде
текста, а не картинки....потому что хидеры, судя по всему, не выводишь.
...
Рейтинг: 0 / 0
Вывод картинок в PERL
    #32542147
MySQLdb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
потому что хидеры, судя по всему, не выводишь.

А какие именно надо, может есть примерчик работоспособный ?

-----------------------------------------------------------
С уважением,MySQLdb
...
Рейтинг: 0 / 0
Вывод картинок в PERL
    #32542178
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
Content-Type: image/jpeg
Если хочешь поберечь клиента и допускаешь кэширование рисунков на его стороне, так же полезным будет при запросе анализировать хидеры If-Modified-Since и If-None-Match (если совпало - возвращаешь HTTP/1.0 304 Not Modified и картинку клиенту не отдаёшь) и формировать хидеры Last-Modified и ETag
Примера на perl'е дать не могу - вспоминать слишком долго - с некоторых пор предпочитаю PHP ;)
...
Рейтинг: 0 / 0
Вывод картинок в PERL
    #32542810
MySQLdb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, внутри картинки формата jpg
...
Рейтинг: 0 / 0
Вывод картинок в PERL
    #32543912
MySQLdb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот код, который я использую:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
#!/usr/local/perl/bin/perl -w
use DBI;
use CGI::Carp qw(fatalsToBrowser);
use strict; 
my $database = "test"; 
my $data_source = "DBI:mysql:$database"; 
my $username = "root"; 
my $password = "getrootpass"; 
my $dbh = DBI->connect( $data_source, $username, $password) ;
my $str=$DBI::errstr;
 if ($str ne '') 
   {
    print("$str");
   }
   my $sth= $dbh->prepare("SELECT * FROM `MyImage` WHERE `ID`= 00000000000000000001 ");
   $sth->execute();
   my @row = $sth->fetchrow_array;
   my $row_id.="$row[0]";
   my $row_imageself.="$row[1]";
   print("Content-type: image/jpeg\n\n");
   print("$row_imageself");
 
$dbh->disconnect; 
exit( 0 ); 
__END__ 
...
Рейтинг: 0 / 0
Вывод картинок в PERL
    #32544709
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MySQLdb
закомментируй в скрипте строку с хедером :
#print("Content-type: image/jpeg\n\n");
или поменяй на text/html

и посмотри что выводится в броузер


ЗЫ
в броузере набирай не тот URL где у тебя HTML c <img src="путь к твоему скрипту"> а именно вводи URL этого скрипта
...
Рейтинг: 0 / 0
Вывод картинок в PERL
    #32544823
MySQLdb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в строке адреса пишу http://localhost/cgi-bin/image.pl

в скрипте заменил

#print("Content-type: image/jpeg\n\n");
print("Content-type: text/html\n\n");

вроде появляется квадратик, типа картинки,
но это не картинка, а тот квадратик, с крестиком,
который появляется когда в броузере отключены картинки,
на самом деле у меня они включены.....

внутри выводится три буквы

Content-type: text/html

ÿØÿá

-----------------------------------------------------------
С уважением,MySQLdb
...
Рейтинг: 0 / 0
Вывод картинок в PERL
    #32545163
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а каким редактором ты смотришь, когда он тебе 3 буквы показывает ?
Похоже он сам их интерпретирует как unicode или что-то вроде этого.

Ты уверен что у тебя картинка в $row[1] ?
попробуй $row[1] записать в файл и посмотри, картинка ли это ?
...
Рейтинг: 0 / 0
Вывод картинок в PERL
    #32545232
MySQLdb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автора каким редактором ты смотришь, когда он тебе 3 буквы показывает ?
Похоже он сам их интерпретирует как unicode или что-то вроде этого.

Ты уверен что у тебя картинка в $row[1] ?
попробуй $row[1] записать в файл и посмотри, картинка ли это ?

смотрю из под Perl Builder, а если кликнуть в окне IE, как HTML исходник,
то там лежит типа "ящяа".

Переменная $row[1] содержит в себе после запроса "ÿØÿá",
это попадает в файл, и в окно браузера, типа поле не полностью зачиталось в массив, а только его кусочек.

Возьми базу, попробуй сам.
...
Рейтинг: 0 / 0
Вывод картинок в PERL
    #32545308
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
MySQLdbесли кликнуть в окне IE, как HTML исходник,
то там лежит типа "ящяа".Может всё же "ящяб"? ;) Это и есть начало твоего jpg-файла, если у тебя всё же "ящяа" - ищи костыли при доставании данных из БД, потому что твой JPEG начинается именно с 0xFF 0xD8 (маркер SOI - Start Of Image) 0xFF 0xE1 (маркер APP1 - начало EXIF-данных) ну и т.д.
...
Рейтинг: 0 / 0
Вывод картинок в PERL
    #32545959
MySQLdb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторМожет всё же "ящяб"? ;) Это и есть начало твоего jpg-файла, если у тебя всё же "ящяа" - ищи костыли при доставании данных из БД, потому что твой JPEG начинается именно с 0xFF 0xD8 (маркер SOI - Start Of Image) 0xFF 0xE1 (маркер APP1 - начало EXIF-данных) ну и т.д.

Да, именно так, "ящяб", описался. Я уже начинаю подозревать,
что при запросе из поля BLOB данные не считываются полностью,
а как их считаь полностью, незнаю. Или этому может быть есть кокое-то объяснение, или в самом DBD/DBI есть какоето ограничение?

Тогда возможно ли вообще как либо вывести картинку из базы,
или ее только можно туда поместить, и забыть про нее навсегда ?
...
Рейтинг: 0 / 0
Вывод картинок в PERL
    #32545977
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
Попробуй всё же поступить так, как сказал Макс М. - запиши переменную в файл, посмотри его содержимое просмотрщиком. Подозреваю, что ты просто ловишь воздух.
...
Рейтинг: 0 / 0
Вывод картинок в PERL
    #32546647
MySQLdb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пишу в файл, в двоичном виде, потом открываю в ACDC,
просматривается картинка. А вот вывести ее из файла пользователю не получается, в чем ошибка незнаю, выводится только "ящяб",
помоготе плиз вывести из файла.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
#!/usr/local/perl/bin/perl -w
use DBI;
use CGI::Carp qw(fatalsToBrowser);
use strict; 
use FileHandle;

my $database = "test"; 
my $data_source = "DBI:mysql:$database"; 
my $username = "root"; 
my $password = "viton"; 
my $dbh = DBI->connect( $data_source, $username, $password) ;
my $str=$DBI::errstr;
 if ($str ne '') 
   {
    print("$str");
   }
   my $sth= $dbh->prepare("SELECT  `SelfImage` FROM `MyImage` WHERE `ID`= 00000000000000000003");
   $sth->execute();
   my @row = $sth->fetchrow_array;
   my $row_imageself.="$row[0]";

   open my $MyFh, '>', "image.jpg";
   binmode $MyFh , ":raw";
   print  $MyFh  "$row_imageself";
   close($MyFh);

  print("Content-type: image/jpeg\n\n");

  open  my $MyFh_, '<', "image.jpg";
  while( read  $MyFh_ , my $Myrow_imageself ,  1024  )
       {
        print   "$Myrow_imageself";
        }		
  close($MyFh_);

  
$dbh->disconnect; 
exit( 0 ); 
__END__ 



-----------------------------------------------------------
С уважением,MySQLdb
...
Рейтинг: 0 / 0
Вывод картинок в PERL
    #32546806
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
MySQLdb , до хидера выводить что-то кроме хидеров - не нужно. Картинку нужно выводить после хидера, при чём между картинкой и хидерами не может быть ничего, кроме хидеров.
Уберите у себя строку
Код: plaintext
print("$str");
- возможно, дело в этом.
...
Рейтинг: 0 / 0
Вывод картинок в PERL
    #32546893
MySQLdb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня затырка на

Код: plaintext
1.
2.
3.
4.
5.
open  my $MyFh_, '<', "image.jpg";
  while( read  $MyFh_ , my $Myrow_imageself ,  1024  )
       {
        print   "$Myrow_imageself";
        }		
  close($MyFh_);

не читается полностью файл,
цикл делает только один проход, вот и получается "ящаб".

Как правильно организовать цикл ?
...
Рейтинг: 0 / 0
Вывод картинок в PERL
    #32548566
MySQLdb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот уж воистину иногда сам себя заводиш в тупик,
а тем временем ларчик очень просто открывался,
и вот как я решил эту проблему тремя способами:

1)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
#!/usr/local/perl/bin/perl -w

# ***************************************
use DBI; 
use CGI::Carp qw(fatalsToBrowser);
use strict; 
use FileHandle;
# ***************************************

my $database = "test"; 
my $data_source = "DBI:mysql:$database"; 
my $username = "root"; 
my $password = "vita44onir"; 
my $dbh = DBI->connect( $data_source, $username, $password) ;
# ***************************************

my $str=$DBI::errstr;
if ($str ne '') 
   {
    print("$str");
	exit( 1 );
   }
   else
       {
	      # ***************************************
          my $sth= $dbh->prepare("SELECT  `SelfImage` FROM `MyImage` WHERE `ID`= 00000000000000000001");
          $sth->execute();
          my @row = $sth->fetchrow_array;
          my $row_imageself.="$row[0]";
		  # ***************************************

          open my $MyFh, '>', "image.jpg";
          binmode $MyFh , ":raw";
          print  $MyFh  "$row_imageself";
          close($MyFh);
		  # ***************************************

          binmode STDOUT;
          #print("Content-type: image/jpeg\n\n");
          print("Content-type: text/html\n\n");
          print  "$row_imageself";
		  # ***************************************
        
  
          $dbh->disconnect; 
          exit( 0 );
		}  
__END__ 





2)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
#!/usr/local/perl/bin/perl -w

# ***************************************
use DBI;
use GD; 
use CGI::Carp qw(fatalsToBrowser);
use strict; 
use FileHandle;
# ***************************************

my $database = "test"; 
my $data_source = "DBI:mysql:$database"; 
my $username = "root"; 
my $password = "vita44onir"; 
my $dbh = DBI->connect( $data_source, $username, $password) ;
# ***************************************

my $str=$DBI::errstr;
if ($str ne '') 
   {
    print("$str");
	exit( 1 );
   }
   else
       {
	      # ***************************************
          my $sth= $dbh->prepare("SELECT  `SelfImage` FROM `MyImage` WHERE `ID`= 00000000000000000001");
          $sth->execute();
          my @row = $sth->fetchrow_array;
          my $row_imageself.="$row[0]";
		  # ***************************************

          open my $MyFh, '>', "image.jpg";
          binmode $MyFh , ":raw";
          print  $MyFh  "$row_imageself";
          close($MyFh);
		  # ***************************************

          #binmode STDOUT;
          #print("Content-type: image/jpeg\n\n");
          #print("Content-type: text/html\n\n");
          #print  "$row_imageself";
		  # ***************************************
		  
		  my $myImage = newFromJpeg GD::Image('image.jpg');
		  binmode STDOUT;
          #print("Content-type: image/jpeg\n\n");
          print("Content-type: text/html\n\n");
		  print $myImage->jpeg( 100 );
		  # ***************************************		  
        
		
		
  
          $dbh->disconnect; 
          exit( 0 );
		}  
__END__ 

3)


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
#!/usr/local/perl/bin/perl -w

# ***************************************
use DBI;
use GD; 
use CGI::Carp qw(fatalsToBrowser);
use strict; 
use FileHandle;
# ***************************************

my $database = "test"; 
my $data_source = "DBI:mysql:$database"; 
my $username = "root"; 
my $password = "vita44onir"; 
my $dbh = DBI->connect( $data_source, $username, $password) ;
# ***************************************

my $str=$DBI::errstr;
if ($str ne '') 
   {
    print("$str");
	exit( 1 );
   }
   else
       {
	      # ***************************************
          my $sth= $dbh->prepare("SELECT  `SelfImage` FROM `MyImage` WHERE `ID`= 00000000000000000002");
          $sth->execute();
          my @row = $sth->fetchrow_array;
          my $row_imageself.="$row[0]";
		  # ***************************************

          open my $MyFh, '>', "image.png";
          binmode $MyFh , ":raw";
          print  $MyFh  "$row_imageself";
          close($MyFh);
		  # ***************************************

          #binmode STDOUT;
          #print("Content-type: image/jpeg\n\n");
          #print("Content-type: text/html\n\n");
          #print  "$row_imageself";
		  # ***************************************
		  
		  my $myImage = newFromPng GD::Image('image.png');
		  binmode STDOUT;
          #print("Content-type: image/jpeg\n\n");
          print("Content-type: text/html\n\n");
		  print $myImage->png;
		  # ***************************************		  
        
		
		
  
          $dbh->disconnect; 
          exit( 0 );
		}  
__END__ 

С тем самым прикладываю исходини PL.
-----------------------------------------------------------
С уважением,MySQLdb
...
Рейтинг: 0 / 0
Вывод картинок в PERL
    #32588203
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
А всего то надо было поставить перед выводом изображения binmode(STDOUT) - иначе происходит преобразование \n в \r\n
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Вывод картинок в PERL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]