Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Рисунок из Интернета в TImage [D6, D7, WinXP]


Страницы:   1 2

KonstantinXaker(KX) ©   (2005-05-15 00:23:00) 

Люди! Каким образом мне из Интернета загрузить рисунок прямо в TImage????????????


KonstantinXaker(KX)   (2005-05-30 16:45:00) [1]

Alex Konshin ©

Этот пример рабочий. Если что-то непонятно - пиши на мыло
NMHTTP1.InputFileMOde := true ;
NMHTTP1.Body := edit5.Text ; //Сохранить в... (edit5.Text-путь, куда нужно сохранить файл)
NMHTTP1.Get(edit3.Text); //Ссылка на любой файл


Alex Konshin   (2005-05-29 05:48:00) [2]

Очевидно, нужно соединиться.

По по поводу примера: я заблуждаюсь, когда думаю, что в ответ на строку в заголовке HTTP "Accept-Encoding: gzip, deflate" я могу получить запакованный gzipом файл? Если нет, то почему это в примере не учитывется или почему этот заголовок не убран?


KonstantinXaker(KX)   (2005-05-29 02:23:00) [3]

Люди! Каким методом проскочить выше описанную ошибку?


KonstantinXaker(KX)   (2005-05-27 17:17:00) [4]

Сс проксяком у меня проблемы уже нет - я использую для загрузки рисунков компонент TNMHTTP

Теперь:
Каким образом мне проскочить ошибку Soccet is not connect


panov   (2005-05-27 17:08:00) [5]

Как мне прописать Proxy и Proxy-port?

А этот вопрос обсуди в новой ветке.


KonstantinXaker(KX)   (2005-05-27 16:40:00) [6]

Как мне прописать Proxy и Proxy-port?


KonstantinXaker(KX)   (2005-05-25 19:53:00) [7]

Здорово!
Теперь у меня следующий код: (загружаю рисунок http://65.200.140.25/ec_metros/ourcams/big_ben.jpg)

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls, ScktComp;

type
 TForm1 = class(TForm)
   CS: TClientSocket;
   Button2: TButton;
   Image1: TImage;
   procedure Button2Click(Sender: TObject);
   procedure CSConnect(Sender: TObject; Socket: TCustomWinSocket);
   procedure CSRead(Sender: TObject; Socket: TCustomWinSocket);
   procedure CSDisconnect(Sender: TObject; Socket: TCustomWinSocket);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
st:TMemoryStream;
Header:boolean;
Len:integer;

implementation
uses Jpeg;
{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
CS.Host:='65.200.140.25';
CS.Port:=8080;
CS.Open;
end;

procedure TForm1.CSConnect(Sender: TObject; Socket: TCustomWinSocket);
var
str:string;
begin
st:=TMemoryStream.Create;
str:='GET /ec_metros/ourcams/big_ben.jpg HTTP/1.1'+#13#10+
'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*'+#13#10+
'Referer: http://www.mota.ru/download.php?path=nature&img=537.jpg'+#13#10+
'Accept-Language: ru'+#13#10+
'Accept-Encoding: gzip, deflate'+#13#10+
'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'+#13#10+
'Host: www.mota.ru'+#13#10+
'Connection: Keep-Alive'+#13#10+#13#10;
Header:=true;
Socket.SendText(str);
end;

procedure TForm1.CSRead(Sender: TObject; Socket: TCustomWinSocket);
var
buf:Array [0..1023] of char;
rb:integer;
str:string;
i:integer;
begin

rb:=Socket.ReceiveBuf(buf,SizeOf(buf));
if Header then
begin
 for i:=0 to rb do
 begin
  str:=str+buf[i];
  if pos(#13#10#13#10,str)>0 then
    begin
      Header:=false;
      Str:=copy(str,pos('Content-Length:',str)+length('Content-Length:')+1,length(str));
      str:=copy(str,1,pos(#13#10,str)-1);
      Len:=StrToInt(str);
      move(buf[i+1],buf[0],SizeOf(buf));
      dec(rb,i);
      Break;
    end;
 end;
end;
if len > rb then
begin
  st.Write(buf,rb);
  dec(len,rb);
end
else
begin
  st.Write(buf,len);
  CS.Close;
end;

end;

procedure TForm1.CSDisconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
st.SaveToFile(ExtractFilePath(Application.ExeName)+'qwqw.jpg');
st.Free;
image1.Picture.LoadFromFile('qwqw.jpg');
end;

end.


Код я так понял что работать должен. Но у меня одна проблема - я работаю через Proxy-сервер... Как мне прописать Proxy и Proxy-port?

P/S.: После нажатия на кнопку сразу выдаётся ошибка: "Asynchronous socket error 10065" и рисунок загружаться не хочет.


seeker   (2005-05-25 09:37:00) [8]


> Ну ты ваще...
> Ты ссылку проверял?
> http://www.mota.ru/space/img/space_087.jpgвыдает отнюдь
> не рисунок!

У кого как...
если заменить
str:='GET /nature/img/nature_537.jpg HTTP/1.1'+#13#10+
'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*'+#13#10+
'Referer: http://www.mota.ru/download.php?path=nature&img=537.jpg'+#13#10+
'Accept-Language: ru'+#13#10+
'Accept-Encoding: gzip, deflate'+#13#10+
'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'+#13#10+
'Host: www.mota.ru'+#13#10+
'Connection: Keep-Alive'+#13#10+#13#10;

на
str:='GET /space/img/space_087.jpg HTTP/1.1'+#13#10+
'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*'+#13#10+
'Referer: http://www.mota.ru/download.php?path=spacee&img=087.jpg'+#13#10+
'Accept-Language: ru'+#13#10+
'Accept-Encoding: gzip, deflate'+#13#10+
'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'+#13#10+
'Host: www.mota.ru'+#13#10+
'Connection: Keep-Alive'+#13#10+#13#10;

то выдает рисунок.
Вообще нужно знать как защищаются сайты от всякрго рода http запросов.
например, один из способов, работа с броузером не ниже какой-то версии.Тогда нужно самому делать запрос и в строке User-Agent указать кто пытается открыть страницу.
Второй способ, это Referer.Если ты попытаешься открыть страницу с какого-то другого места, то вылетит ошибка.
Ну и "Accept".Это ты сам догадайся...


Slym   (2005-05-25 05:19:00) [9]

Ну ты ваще...
Ты ссылку проверял?
http://www.mota.ru/space/img/space_087.jpgвыдает отнюдь не рисунок!


seeker   (2005-05-24 19:11:00) [10]

вот, набросал на скорую руку...
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls, ScktComp;

type
 TForm1 = class(TForm)
   CS: TClientSocket;
   Button2: TButton;
   procedure Button2Click(Sender: TObject);
   procedure CSConnect(Sender: TObject; Socket: TCustomWinSocket);
   procedure CSRead(Sender: TObject; Socket: TCustomWinSocket);
   procedure CSDisconnect(Sender: TObject; Socket: TCustomWinSocket);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 st:TMemoryStream;
 Header:boolean;
 Len:integer;

implementation
uses Jpeg;
{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
CS.Host:='www.mota.ru';
CS.Port:=80;
CS.Open;
end;

procedure TForm1.CSConnect(Sender: TObject; Socket: TCustomWinSocket);
var
 str:string;
begin
st:=TMemoryStream.Create;
str:='GET /nature/img/nature_537.jpg HTTP/1.1'+#13#10+
'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*'+#13#10+
'Referer: http://www.mota.ru/download.php?path=nature&img=537.jpg'+#13#10+
'Accept-Language: ru'+#13#10+
'Accept-Encoding: gzip, deflate'+#13#10+
'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'+#13#10+
'Host: www.mota.ru'+#13#10+
'Connection: Keep-Alive'+#13#10+#13#10;
Header:=true;
Socket.SendText(str);

end;

procedure TForm1.CSRead(Sender: TObject; Socket: TCustomWinSocket);
var
 buf:Array [0..1023] of char;
 rb:integer;
 str:string;
 i:integer;
begin

rb:=Socket.ReceiveBuf(buf,SizeOf(buf));
if Header then
 begin
  for i:=0 to rb do
  begin
   str:=str+buf[i];
   if pos(#13#10#13#10,str)>0 then
     begin
       Header:=false;
       Str:=copy(str,pos('Content-Length:',str)+length('Content-Length:')+1,length(str));
       str:=copy(str,1,pos(#13#10,str)-1);
       Len:=StrToInt(str);
       move(buf[i+1],buf[0],SizeOf(buf));
       dec(rb,i);
       Break;
     end;
  end;
 end;
if len > rb then
 begin
   st.Write(buf,rb);
   dec(len,rb);
 end
else
 begin
   st.Write(buf,len);
   CS.Close;
 end;

end;

procedure TForm1.CSDisconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
st.SaveToFile('g:\qwqw.jpg');
st.Free;
end;

end.


KonstantinXaker(KX)   (2005-05-24 17:09:00) [11]

>>Slym ©
Твой код больше похож на правду, но при загрузке рисунка выдаёт ошибку "JPEG error #41" (P.S.: я загружаю JPEG-рисунок. Не BMP и не другой формат)

>>Lex_! ©
Да, ты был прав что там ошибка!
Написал следующий код:

procedure TForm1.Button1Click(Sender: TObject);
var
s:TJpegImage;
fs:TFileStream;
strm:TStream;
begin
strm:=TStream.Create;
fs:=TFileStream.Create(idHTTP1.Get(' http://65.200.140.25/ec_metros/ourcams/big_ben.jpg'),fmOpenRead);
fs.CopyFrom(Strm, Strm.Size);
s:=TJpegImage.Create;
s.LoadFromStream(fs);
image1.Picture.Assign(s);
fs.Free;
strm.Free;
end;


Результат тот же - выдаёт ошибку "Cannot open file яШяю"

Что ещё подскажете?


Slym   (2005-05-24 06:11:00) [12]


procedure TForm1.Button1Click(Sender: TObject);
var
MemoryStream:TMemoryStream;
JpegImage:TJpegImage;
begin
 MemoryStream:=TMemoryStream.Create;
 try
   idHTTP1.Get(' http://www.mota.ru/space/img/space_087.jpg',MemoryStream);
   JpegImage:=TJpegImage.Create;
   try
     JpegImage.LoadFromStream(MemoryStream);
     image1.Picture.Assign(JpegImage);
   finally
     JpegImage.Free;
   end;
 finally
   MemoryStream.Free;
 end;  
end;


Lex_!   (2005-05-24 05:48:00) [13]

и еще...
выше приведен код:

fs.Free;
......
s.LoadFromStream(fs);

эть как?... почему сначала уничтожаем потом со стрима грузим?...
Или я чета не понял ....


Lex_!   (2005-05-24 05:00:00) [14]

idHTTP1.Get(' http://www.mota.ru/space/img/space_087.jpg')
в таком виде насколько я понимаю возвращается текст - Function Get(Aurl:string):string

а вот в таком:
Procedure get(AUrl:string; AResponseContent:TStream; AIgnoreReplies: array of smallint)
в принципе можно получить я так подозреваю то что нужно .....

ЗЫ - у меня дельфи 2005 так что у тебя может быть по другому, но в принципе там два ГЕТ, один возвращает строку, второй пишет в стрим...


KonstantinXaker(KX)   (2005-05-23 20:14:00) [15]

Antonn, выдаёт ту же самую ошибку!
Norny, теперь ощибка другая, но подобного вида: "Cannot open file GIF89a§"

Получается что проблемма не в рисунке, не в ссылке, а в выявлении самого имени рисунка, скачивании его на диск, загрузка в TImage и удаление этого же рисунка с диска!
Как такое реализовать, товарищи?


Norny   (2005-05-23 17:21:00) [16]

Попробовать с нормальными серверами! Загрузи файл " http://delphimaster.ru/i/star.gif"!


Antonn   (2005-05-23 17:20:00) [17]

KonstantinXaker(KX)   (23.05.05 17:12) [14]
попробуй не с народа.
http://arscity.net.ru/img/silverpl.jpg


KonstantinXaker(KX)   (2005-05-23 17:12:00) [18]

>> VMcL
С Вами я согласен что ссылка не та. Вот другая ссылка (с моего сайта http://spacehome.narod.ru):
http://www.spacehome.narod.ru/4.jpg

Теперь выдаёт следующую всплывающую ошибку (и так с любым рисунком из интернета!):
"Cannot open file яШяа"

А теперь какой выход из положения?


VMcL   (2005-05-23 00:59:00) [19]

>> KonstantinXaker(KX)

Ну дык, Вы в браузере откройте эту ссылку. Нет ведь файла, вот сервер и возращает HTML-страницу с описанием ошибки.


KonstantinXaker(KX)   (2005-05-22 15:39:00) [20]

Сам текст ошибки получил следующим образом:

memo1.Text:=idHTTP1.Get(' http://www.mota.ru/space/img/space_087.jpg')

Напрашивается вопрос - каким образом загрузить сам рисунок?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо