Solved

Get JPG from url

Posted on 2008-11-03
3
306 Views
Last Modified: 2012-05-05
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
Comment
Question by:geocoins-software
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
3 Comments
 

Author Comment

by:geocoins-software
ID: 22867442
NOTE: Must handle JPEGs that do not actually exist.  (possibly returning a nil object - OR - a boolean)

thanks
0
 
LVL 13

Accepted Solution

by:
ThievingSix earned 500 total points
ID: 22870935
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
 
LVL 13

Expert Comment

by:ThievingSix
ID: 22871116
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

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
There are cases when e.g. an IT administrator wants to have full access and view into selected mailboxes on Exchange server, directly from his own email account in Outlook or Outlook Web Access. This proves useful when for example administrator want…
This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : http://www.videocopilot.net/presets/after_shake/ All lightning effects with instructions : http://www.mediaf…
Suggested Courses
Course of the Month8 days, 23 hours left to enroll

615 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question