![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Скачиваю 97 картинок с сайта (имена картинок 1,2,3 и т.д. .jpg).Подскажите пожалуйста что не так! скачиваются 97 одинаковых картинок!
Код:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdHttp, jpeg, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
http: TIdHttp;
potok: TMemoryStream;
jpeg: TJpegImage;
i:integer;
begin
http := TIdHTTP.Create(nil);
ms := TMemoryStream.Create;
jpeg := TJpegImage.Create;
for i:= 1 to 97 do
begin
try
http.Get('//тут источник картинок'+inttostr(i)+'.jpg', potok);
potok.Position := 0;
jpeg.LoadFromStream(ms);
jpeg.SaveToFile('c:/jpgimage/'+inttostr(i)+'.jpg');
finally
jpeg.Free; ms.Free; http.Free;
end;
end;
end;
end. |
|
#2
|
|||
|
|||
|
Цитата:
|
|
#3
|
|||
|
|||
|
Кхм... ну у тебя вообще предствлвенный код не код, а багодром.
И это не смотря на то, что имена переменных для потоков попутаны (ну тут подозреваю последствия вырезания кода для поста). А по сути: 1. Не надо повторно использовать объекты. Создавай новые, это не так дорого стоить на современных системах. 2. Try..Finally у тебя является частью цикла, так лучше не делать. 3. Непонятен смысл испльзования промежуточного jpeg, а что, сразу в TFileStream религия не позволяет сохранять? 4. И вообще, такие вещи лучше переписать на многопоточность, не на модемах давно уже сидим, можно качать потоков так в 10, будет качаться раза в 3 быстрее, чем в один поток (да, кода будет чуть поболее, зато быстрее будет). |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
crazyman (10.02.2019)
| ||
|
#4
|
|||
|
|||
|
Цитата:
это была в общем-то разовая акция, нужно было скачать книжку, которая была картинками представлена, качальщиком сайтов оч. долго, поэтому решил накидать код. |
|
#5
|
|||
|
|||
|
А-а-а... я в подобном случае просто сгенерил html и загрузил его через браузер. Потом просто сохраняешь страничку и забираешь картинки из соотв. папки.
|
|
#6
|
|||
|
|||
|
Код:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdHttp, jpeg, Vcl.StdCtrls, Vcl.ExtCtrls,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient;
type
TForm1 = class(TForm)
//Image1: TImage;
Button1: TButton;
IdHTTP1: TIdHTTP;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
http: TIdHttp;
potok: TMemoryStream;
jpeg: TJpegImage;
i:integer;
begin
http := TIdHTTP.Create(nil);
potok := TMemoryStream.Create;
jpeg := TJpegImage.Create;
try
for i:= 1 to 97 do
begin
http.Get('http://img.gdz-online.ws/29032018fdfsrt13/'+inttostr(i)+'.jpg', potok);
potok.Position := 0;
jpeg.LoadFromStream(potok);
jpeg.SaveToFile('c:/'+inttostr(i)+'.jpg');
potok.Clear;
end;
finally
jpeg.Free; potok.Free; http.Free;
end;
end;
end.Последний раз редактировалось crazyman, 11.02.2019 в 21:28. |
|
#7
|
|||
|
|||
|
Ну тогда уж так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
http: TIdHttp;
potok: TFileStream;
i:integer;
begin
http := TIdHTTP.Create(nil);
try
for i:= 1 to 97 do
try
potok := TFileStream.Create('c:/'+inttostr(i)+'.jpg',fmCreate);
http.Get('http://img.gdz-online.ws/29032018fdfsrt13/'+inttostr(i)+'.jpg', potok);
finally
potok.free;
end;
finally
http.Free;
end;
end; |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
crazyman (13.02.2019)
| ||