gpt4 book ai didi

delphi - 使用 TidHttp 从 URL 下载 Jpeg 图像(仅限那些存在的图像)?

转载 作者:行者123 更新时间:2023-12-03 14:57:54 24 4
gpt4 key购买 nike

我正在尝试使用 TidHttp 组件从网络检索大量图像。

问题是缺少许多图像(例如:7403、7412 等)

如何仅测试那些存在的并将其保存到文件?

procedure TForm.Button1Click(Sender: TObject);
var
MS : TMemoryStream;
JPEGImage: TJPEGImage;
Url, numString: String;
I, Code: Integer;
begin
for I := 7400 to 7500 do
begin
{
Url :='http://www.mywebpage.com/images/DSC' + numString+ '.jpg';
try
idhttp1.Head(URL);
code := idhttp1.ResponseCode;
except on E: EIdHTTPProtocolException do
code := idhttp1.ResponseCode;
end;//try except
if code = 200 then
begin

MS := TMemoryStream.Create;
JPEGImage := TJPEGImage.Create;
try
try
idhttp1.Get(Url, MS); //Send the request and get the image
code := idhttp1.ResponseCode;
MS.Seek(0,soFromBeginning);
JPEGImage.LoadFromStream(MS);//load the image in a Stream
Image1.Picture.Assign(JPEGImage);//Load the image in a Timage component
Image1.Picture.SaveToFile('C:\Museum_Data\DSC' + numString + '.jpg');
Application.ProcessMessages;
except
on E: EIdHTTPProtocolException do
code := idhttp1.ResponseCode; // or: code := E.ErrorCode;
end; //try except
finally
MS.free;
JPEGImage.Free;

end; //try finally
end; //if

end;
end;

最佳答案

您无需为此做任何额外的事情。如果您尝试访问不存在的 URL,HTTP 服务器将报告一个错误,TIdHTTP 会包含在 EIdHTTPProtocolException 异常中。您不必先调用 TIdHTTP.Head(),因为您在保存图像之前会将图像下载到 TMemoryStream。您可以在调用 TIdHTTP.Get() 时捕获异常,根本不需要检查 ResponseCode。

试试这个:

procedure TForm.Button1Click(Sender: TObject); 
var
MS: TMemoryStream;
JPEG: TJPEGImage;
Url: String;
I: Integer;
begin
MS := TMemoryStream.Create;
try
JPEG := TJPEGImage.Create;
try
for I := 7400 to 7500 do
begin
Url := 'http://www.mywebpage.com/images/DSC' + IntToStr(I) + '.jpg';
MS.Clear;
try
IdHTTP1.Get(Url, MS);
except
on E: EIdHTTPProtocolException do
Continue;
end;
MS.Position := 0;
JPEG.LoadFromStream(MS);
Image1.Picture.Assign(JPEG);
JPEG.SaveToFile('C:\Museum_Data\DSC' + IntToStr(I) + '.jpg');
Application.ProcessMessages;
end;
finally
JPEG.Free;
end;
finally
MS.Free;
end;
end;

您实际上并不需要 TImage 来将数据保存到文件。如果您可以省略 TImage.Picture.Assign() 阶段,那么通过完全消除 TJPEGImage 代码会更简单(除非您尝试验证下载文件是否正确)有效),例如:

procedure TForm.Button1Click(Sender: TObject); 
var
MS: TMemoryStream;
Url: String;
I: Integer;
begin
MS := TMemoryStream.Create;
try
for I := 7400 to 7500 do
begin
Url := 'http://www.mywebpage.com/images/DSC' + IntToStr(I) + '.jpg';
MS.Clear;
try
IdHTTP1.Get(Url, MS);
except
on E: EIdHTTPProtocolException do
Continue;
end;
MS.Position := 0;
MS.SaveToFile('C:\Museum_Data\DSC' + IntToStr(I) + '.jpg');
Application.ProcessMessages;
end;
finally
MS.Free;
end;
end;

或者:

procedure TForm.Button1Click(Sender: TObject); 
var
FS: TFileStream;
Url, FileName: String;
I: Integer;
begin
for I := 7400 to 7500 do
begin
Url := 'http://www.mywebpage.com/images/DSC' + IntToStr(I) + '.jpg';
FileName := 'C:\Museum_Data\DSC' + IntToStr(I) + '.jpg';
FS := TFileStream.Create(FileName, fmCreate);
try
try
try
IdHTTP1.Get(Url, FS);
except
on E: EIdHTTPProtocolException do
Continue;
end;
Application.ProcessMessages;
finally
Fs.Free;
end;
except
DeleteFile(FileName);
end;
end;
end;

关于delphi - 使用 TidHttp 从 URL 下载 Jpeg 图像(仅限那些存在的图像)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8335305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com