[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 317
  • Last Modified:

Get JPG from url

I need to get a  JPG from url  (Example:  www.test.com/test.jpg) and place it in a TJPeg Object (without first saving it to file). Is this possible?

Is so, can you provide me the code please?

Thanks
0
geocoins-software
Asked:
geocoins-software
  • 2
1 Solution
 
geocoins-softwareAuthor Commented:
NOTE: Must handle JPEGs that do not actually exist.  (possibly returning a nil object - OR - a boolean)

thanks
0
 
ThievingSixCommented:
The code below should work.

Here is an example of how to use it:

procedure TForm1.Button1Click(Sender: TObject);
var
  JPEG : TJPEGImage;
  Data : TMemoryStream;
begin
  Data := TMemoryStream.Create;
  Try
    JPEG := TJPEGImage.Create;
    Try
      If Not(GetInetFile('http://www.test.com/phoenix/images/5_top3pic1.jpg',Data)) Then Exit;
      Data.Position := 0;
      JPEG.LoadFromStream(Data);
      Image1.Picture.Graphic := JPEG;
    Finally
      JPEG.Free;
    end;
  Finally
    Data.Free;
  end;
end;

Uses WinInet;
 
function GetInetFile(const FileURL: String; OutStream: TMemoryStream): Boolean;
const
  BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: Array[1..BufferSize] Of Byte;
  BufferLen: DWORD;
  sAppName: String;
begin
  Result := false;
  sAppName := ExtractFileName(Application.ExeName);
  hSession := InternetOpen(PChar(sAppName),INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
  Try
    hURL := InternetOpenURL(hSession,PChar(fileURL),nil,0,0,0);
    Try
      OutStream.Position := 0;
      Repeat
        InternetReadFile(hURL,@Buffer,SizeOf(Buffer),BufferLen);
        OutStream.Write(Buffer,BufferLen);
      Until BufferLen = 0;
      If OutStream.Size = 0 Then Exit;
      Result := True;
    Finally
      InternetCloseHandle(hURL);
    end
  Finally
    InternetCloseHandle(hSession);
  end
end;

Open in new window

0
 
ThievingSixCommented:
Oops, this should fix it for non existing images.
function GetInetFile(const FileURL: String; OutStream: TMemoryStream): Boolean;
const
  BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: Array[1..BufferSize] Of Byte;
  BufferLen: DWORD;
  FileSize: PDWORD;
  Reserved: DWORD;
  sAppName: String;
begin
  Result := false;
  sAppName := ExtractFileName(Application.ExeName);
  hSession := InternetOpen(PChar(sAppName),INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
  Try
    hURL := InternetOpenURL(hSession,PChar(fileURL),nil,0,INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP Or INTERNET_FLAG_NO_AUTO_REDIRECT,0);
    Try
      BufferLen := 4;
      OutStream.Position := 0;
      Repeat
        FillChar(Buffer,SizeOf(Buffer),0);
        InternetReadFile(hURL,@Buffer,SizeOf(Buffer),BufferLen);
        OutStream.Write(Buffer,BufferLen);
      Until BufferLen = 0;
      If OutStream.Size = 0 Then Exit;
      Result := True;
    Finally
      InternetCloseHandle(hURL);
    end
  Finally
    InternetCloseHandle(hSession);
  end
end;

Open in new window

0

Featured Post

Receive 1:1 tech help

Solve your biggest tech problems alongside global tech experts with 1:1 help.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now