Загрузка изображений с интернета в TImage с помощью Indy. Delphi.
Доброго времени суток!
В этой статье я попробую научить вас загружать картинки, которые расположены в интернете, в компонент TImage.
Загружать мы будем картинки форматов bmp, ipg и ico. Почему? А потому, что для загрузки картинок этих форматов не требуется установка сторонних библиотек. Для работы с картинками других форматов принцип остается тот же, только необходимо будет установить библиотеки для работы с нужным для вас форматом...
Сначала нам нужно выбрать сайт, откуда вы будете загружать картинку. В данной статье мы будем загружать картинки с хостинга изображения. Для примера я выбрал [Ссылки могут видеть только зарегистрированные пользователи. ];
Теперь нужно загрузить на хостинг картинок картинки трех форматов(bmp,jpg,ico). Картинки могут быть любыми. Для примера я предлагаю использовать эти картинки:
Теперь пишем код для загрузки картинки в Image с проверкой формата:
Код:
img.Position:=0;
HTTP.Get(URL,img);
img.Position:=0;
if Pos('bmp',URL)<>0 then
begin
Image4.Picture.Bitmap:=TBitmap.Create;
Image4.Picture.Bitmap.LoadFromStream(img);
end;
if Pos('jpg',URL)<>0 then
begin
Image4.Picture.Graphic:=TJPEGImage.Create;
Image4.Picture.Graphic.LoadFromStream(img);
end;
if Pos('ico',URL)<>0 then
begin
Image4.Picture.Icon:=TIcon.Create;
Image4.Picture.Icon.LoadFromStream(img);
end;
procedure ImageLoad(URL:string);
var
img:TMemoryStream;
HTTP:TIdHTTP;
begin
HTTP:=TIdHTTP.Create(nil);
img:=TMemoryStream.Create;
HTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)';
try
img.Position:=0;
HTTP.Get(URL,img);
img.Position:=0;
if Pos('bmp',URL)<>0 then
begin
Image4.Picture.Bitmap:=TBitmap.Create;
Image4.Picture.Bitmap.LoadFromStream(img);
end;
if Pos('jpg',URL)<>0 then
begin
Image4.Picture.Graphic:=TJPEGImage.Create;
Image4.Picture.Graphic.LoadFromStream(img);
end;
if Pos('ico',URL)<>0 then
begin
Image4.Picture.Icon:=TIcon.Create;
Image4.Picture.Icon.LoadFromStream(img);
end;
finally
img.Free;
HTTP.Free;
end;
end;
Полный код всего проекта:
Код:
uses
jpeg;
...
procedure ImageLoad(URL:string);
var
img:TMemoryStream;
HTTP:TIdHTTP;
begin
HTTP:=TIdHTTP.Create(nil);
img:=TMemoryStream.Create;
HTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)';
try
img.Position:=0;
HTTP.Get(URL,img);
img.Position:=0;
if Pos('bmp',URL)<>0 then
begin
Image4.Picture.Bitmap:=TBitmap.Create;
Image4.Picture.Bitmap.LoadFromStream(img);
end;
if Pos('jpg',URL)<>0 then
begin
Image4.Picture.Graphic:=TJPEGImage.Create;
Image4.Picture.Graphic.LoadFromStream(img);
end;
if Pos('ico',URL)<>0 then
begin
Image4.Picture.Icon:=TIcon.Create;
Image4.Picture.Icon.LoadFromStream(img);
end;
finally
img.Free;
HTTP.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
bmp:TMemoryStream;
HTTP:TIdHTTP;
begin
HTTP:=TIdHTTP.Create(nil);
bmp:=TMemoryStream.Create;
HTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)';
try
bmp.Position:=0;
HTTP.Get('http://s009.radikal.ru/i308/1109/92/d2498c7075dd.bmp',bmp);
Image1.Picture.Bitmap:=TBitmap.Create;
bmp.Position:=0;
Image1.Picture.Bitmap.LoadFromStream(bmp);
finally
HTTP.Free;
bmp.Free;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
jpg:TMemoryStream;
HTTP:TIdHTTP;
begin
HTTP:=TIdHTTP.Create(nil);
jpg:=TMemoryStream.Create;
HTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)';
try
jpg.Position:=0;
HTTP.Get('http://s014.radikal.ru/i329/1109/ca/518e16d3df4d.jpg',jpg);
Image2.Picture.Graphic:=TJPEGImage.Create;
jpg.Position:=0;
Image2.Picture.Graphic.LoadFromStream(jpg);
finally
HTTP.Free;
jpg.Free;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
ico:TMemoryStream;
HTTP:TIdHTTP;
begin
HTTP:=TIdHTTP.Create(nil);
ico:=TMemoryStream.Create;
HTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)';
try
ico.Position:=0;
HTTP.Get('http://i081.radikal.ru/1109/06/76d27503fa51.ico',ico);
Image3.Picture.Icon:=TIcon.Create;
ico.Position:=0;
Image3.Picture.Icon.LoadFromStream(ico);
finally
HTTP.Free;
ico.Free;
end;
end;
Теперь, когда мы закончили написание программы, запускаем программу и смотрим, что получилось.
Скачать исходник([Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ]);
Скачать скриншоты([Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ],[Ссылки могут видеть только зарегистрированные пользователи. ]);
Статья писалась VeTaL_UA для Zhyk.RU. При копировании указывать ссылку на данную тему.
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Re: Загрузка изображений с интернета в TImage с помощью Indy. Delphi.
Цитата:
Сообщение от D.E.Z.E.R.T.I.R
А что делать, если картинка динамичная? Например капча, ссылка 1, но каждый раз разная картинка, как быть?
Научится добираться до истинной ссылки на изображение
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Re: Загрузка изображений с интернета в TImage с помощью Indy. Delphi.
Цитата:
Сообщение от metraz
если мы загружаем png, то по какому из 3 пунктов надо действовать?
Ну будет наиболее похоже на jpeg. Смотри, подключаешь модуль по обработке png, и пишешь вместо того, что в теме
Код:
Image2.Picture.Graphic:=TPNGImage.Create; //в названии не уверен, уточни сам
Ну а дальше всё так, как и в теме
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).