PHP Classes

Using GIFs from external sources

Recommend this page to a friend!

      GIF images into animated GIF with native PHP class  >  All threads  >  Using GIFs from external sources  >  (Un) Subscribe thread alerts  
Subject:Using GIFs from external sources
Summary:Can I animate GIFs which are stored somewhere else on the web?
Messages:5
Author:Ben Coakley
Date:2008-07-03 19:23:51
Update:2009-03-07 14:44:40
 

  1. Using GIFs from external sources   Reply   Report abuse  
Picture of Ben Coakley Ben Coakley - 2008-07-03 19:23:51
Is it possible to create an animated GIF using GIFs from another web server? I'm trying to animate weather radar data from a series of still frames. Essentially, I've taken your example.php script, and replaced the loop which creates the $frames and $framed arrays with the following lines:

$frames [ ] = "http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi?&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&FORMAT=image/gif&TRANSPARENT=true&WIDTH=600&HEIGHT=400&SRS=EPSG:4326&BBOX=-92,37,-72,51&STYLES=default&LAYERS=nexrad-n0r";
$framed [ ] = 500;
$frames [ ] = "http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi?&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&FORMAT=image/gif&TRANSPARENT=true&WIDTH=600&HEIGHT=400&SRS=EPSG:4326&BBOX=-92,37,-72,51&STYLES=default&LAYERS=nexrad-n0r-m05min";
$framed [ ] = 500;

When I use this script, I get the error:

Warning: filesize() [function.filesize]: stat failed for http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi?&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&FORMAT=image/gif&TRANSPARENT=true&WIDTH=600&HEIGHT=400&SRS=EPSG:4326&BBOX=-92,37,-72,51&STYLES=default&LAYERS=nexrad-n0r in C:\apache\htdocs\nexrad\GIFEncoder.class.php on line 65

Warning: fread() [function.fread]: Length parameter must be greater than 0 in C:\apache\htdocs\nexrad\GIFEncoder.class.php on line 65
GIFEncoder V2.05: 0 Source is not a GIF image!

Which makes it look like it's trying to read the file from the local filesystem, and not from the web. Am I misunderstanding the 'url' source type? Those URLs are for a public WMS server, which returns GIF files of current weather data.

(My testing server is Windows / Apache 2.2 / PHP 5.1, but this ultimately needs to run under Linux / Apache 2 / PHP 5.)

Thanks,
--Ben

  2. Re: Using GIFs from external sources   Reply   Report abuse  
Picture of László Zsidi László Zsidi - 2008-09-24 21:00:12 - In reply to message 1 from Ben Coakley
Use the "url" flag instead of "bin" flag and add the absolute path into the frame array, e.g.:

$frame[] = "http://www.anotherserver.com/frame.gif";

$gif_pointer = new GIFEncoder ( ... "url" );

  3. Re: Using GIFs from external sources   Reply   Report abuse  
Picture of László Zsidi László Zsidi - 2008-09-24 21:34:52 - In reply to message 1 from Ben Coakley
Ohhhhh....seems to be it does not work also with the "url" flag...
I am thinking on the solution...

  4. Re: Using GIFs from external sources   Reply   Report abuse  
Picture of Joseph Joseph - 2009-03-07 13:03:20 - In reply to message 3 from László Zsidi
Did you find a solution? I also need to use your class with external images.

  5. Re: Using GIFs from external sources   Reply   Report abuse  
Picture of László Zsidi László Zsidi - 2009-03-07 14:44:40 - In reply to message 4 from Joseph
Hi,

You should use the fsockopen ( ) function to read external image sources.

Example:

<?
$host='site.com';
$port=3000;
$path='/home/login/public_html/pic.php';

// the file you want to upload
$file_array[0] = "../pic.jpg"; // the file
$content_type = "image/jpeg"; // the file mime type

srand((double)microtime()*1000000);
$boundary = "---------------------------".substr(md5(rand(0,32000)),0,10);

$data = "--$boundary";

for($i=0;$i<count($file_array);$i++) {
$content_file = join("", file($file_array[$i]));
$data.="
Content-Disposition: form-data; name=\"file".($i+1)."\"; filename=\"$file_array[$i]\"
Content-Type: $content_type

$content_file
--$boundary";
}

$data.="--\r\n\r\n";

$msg =
"POST $path HTTP/1.0
Content-Type: multipart/form-data; boundary=$boundary
Content-Length: ".strlen($data)."\r\n\r\n";

$result="";

// open the connection
$f = fsockopen($host, $port);
fputs($f,$msg.$data);

// get the response
while (!feof($f)) $result .= fread($f,32000);

fclose($f);

?>