|
|
Регистрация | << Правила форума >> | 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. |