Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Getting image dimensions and size over HTTP with TNMHTTP component

Posted on 2003-11-03
5
Medium Priority
?
520 Views
Last Modified: 2007-12-19
Hi There,

I am attempting to get image information by requesting the image header via HTTP using the TNMHTTP component.  I don't want to download the whole image to find out this information to save bandwidth.

There is a command:
http1.head('http://path.to/image.jpg');

But I cant seem to find where to get the image dimension and file size information out of this.

I notice that many browsers can tell you the size and dimensions of an image before it downloads it (without the image size being set in the HTML even).

Thanks in advance
Pea
0
Comment
Question by:petervullings
[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
  • 4
5 Comments
 
LVL 26

Accepted Solution

by:
EddieShipman earned 500 total points
ID: 9673259
Youu can get the file SIZE by checking the Content-Length header field but you can not get
the dimensions from the http stream. Now the IMG tag can, and will, most likely have the
dimensions in it and that is where the browser gets it unless it doesn't have them then
it is calculated after it is loaded.

Are you talking GIF or JPG or PNG here, anyway?

Would you be willing to settle for a solution using Indy as I do not do Netmasters components
because they are buggy and haven't bee updated since 1998.
0
 
LVL 26

Expert Comment

by:EddieShipman
ID: 9673578
There was no need to post a second question. I would have the one deleted where you
do not accept an answer..

Anyway, Here is how to do it with Indy components:

function GetFileSize(AURL: String): Integer;
var
  idHTTP1: TidHTTP;
begin
  Result := 0;
  idHTTP1 := TidHTTP.Create(nil);  
  try
    idHTTP1.Head(AURL);
    Result := idHTTP1.Response.ContentLength;
  finally
    idHTTP1.Free;
  end;
end;

Now with NMHTTP:

function GetFileSize(AURL: String): Integer;
var
  NMHTTP1: TNMHTTP;
  i: Integer;
  s: String;
  slHeader: TStringList;
begin
  slHeader := TStringList.Create;
  Result := 0;
  NMHTTP1: TNMHTTP.Create(nil);
  try  
    NMHTTP1.InputFileMode := False;
    NMHTTP1.Head(AURL);
    slHeader.Text := NMHTTP1.Header;
    for i := 0 to slHeader.Count-1 do
      if Pos('Length', slHeader[i]) > 0 then
        s := slHeader[i];
    Result := StrToInt(Trim(Copy(s, 16, Length(S))));
  finally
    NMHTTP1.Free;
    slHeader.Fre;
  end;
end;
0
 
LVL 26

Expert Comment

by:EddieShipman
ID: 9771194
Please accept the answer if it helped you solve your problem. That is the spirit of this forum.
0
 
LVL 1

Author Comment

by:petervullings
ID: 9777086
Thanks Eddie. I'm well aware of the spirit of it, being a contributer myself (though a little infrequent). Thanks for the reminder :)
0
 
LVL 26

Expert Comment

by:EddieShipman
ID: 9779179
I still have found no way to get the dimensions without looking at the IMG tag. But if the IMG tag doesn't
have the dimensions in it, you'd be out of luck.
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

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…
Introduction I have seen many questions in this Delphi topic area where queries in threads are needed or suggested. I know bumped into a similar need. This article will address some of the concepts when dealing with a multithreaded delphi database…
In this video, Percona Solution Engineer Dimitri Vanoverbeke discusses why you want to use at least three nodes in a database cluster. To discuss how Percona Consulting can help with your design and architecture needs for your database and infras…
In this video, Percona Solution Engineer Rick Golba discuss how (and why) you implement high availability in a database environment. To discuss how Percona Consulting can help with your design and architecture needs for your database and infrastr…
Suggested Courses

636 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