search for in the  
<imagecreatefromgdimagecreatefromjpeg>
Last updated: Thu, 19 May 2005

imagecreatefromgif

(PHP 3, PHP 4, PHP 5)

imagecreatefromgif -- Create a new image from file or URL

Description

resource imagecreatefromgif ( string filename )

imagecreatefromgif() returns an image identifier representing the image obtained from the given filename.

imagecreatefromgif() returns an empty string on failure. It also outputs an error message, which unfortunately displays as a broken link in a browser. To ease debugging the following example will produce an error GIF:

Example 1. Example to handle an error during creation (courtesy vic at zymsys dot com)

<?php
function LoadGif ($imgname)
{
  
$im = @imagecreatefromgif ($imgname); /* Attempt to open */
  
if (!$im) { /* See if it failed */
      
$im = imagecreate (150, 30); /* Create a blank image */
      
$bgc = imagecolorallocate ($im, 255, 255, 255);
      
$tc = imagecolorallocate ($im, 0, 0, 0);
      
imagefilledrectangle ($im, 0, 0, 150, 30, $bgc);
      
/* Output an errmsg */
      
imagestring ($im, 1, 5, 5, "Error loading $imgname", $tc);
   }
   return
$im;
}
?>

Note: GIF support was removed from the GD library in Version 1.6, and added back in Version 2.0.28. This function is not available between these versions.

Tip: You can use a URL as a filename with this function if the fopen wrappers have been enabled. See fopen() for more details on how to specify the filename and Appendix L for a list of supported URL protocols.

Warning

Windows versions of PHP prior to PHP 4.3.0 do not support accessing remote files via this function, even if allow_url_fopen is enabled.



User Contributed Notes
imagecreatefromgif
jason at null dot zzz
06-Apr-2004 04:13
thanks yamasoft for the gif to png lib.  it works!  but, there is one bug.  i changed line 1003 to this:

if(isset($this->m_img->m_bTrans) && $this->m_img->m_bTrans && ($nColors > 0)) {

because i was getting an error that m_bTrans is undefined.  i think this is because my gif has no transparency.  after i updated this line, there were no problems.

thanks!

-j
josh [ a t ] OnlineComics [ d o t ] net
07-Oct-2003 10:36
I just installed gif2png on my server, and it took a little research on my part to figure out that this...

passthru("$path/gif2png -O $image_path/image.gif")

will not work if safe mode is on. If you're on a shared server, it probably is. You don't need to turn safe mode off, however, just set the safe_mode_exec_dir variable in your php.ini file to the directory where you installed gif2png. Then you'll be able to execute the program from your PHP script.
29-Jun-2003 06:26
function LoadGif ($imgname) {
   $im = @ImageCreateFromGIF ($imgname); /* Attempt to open */
   if (!$im) { /* See if it failed */
       $im = ImageCreate (150, 30); /* Create a blank image */
       $bgc = ImageColorAllocate ($im, 255, 255, 255);
       $tc  = ImageColorAllocate ($im, 0, 0, 0);
       ImageFilledRectangle ($im, 0, 0, 150, 30, $bgc);
       /* Output an errmsg */
       ImageString($im, 1, 5, 5, "Error loading $imgname", $tc);
   }
   return $im;
}
18-Apr-2003 11:34
re: 09-May-2002 11:31

Seems gif2png is no longer at http://www.tuxedo.org/~esr/gif2png/
I found a Win32 version at http://www.r1ch.net/stuff/gif2png/
(for the Unix and source, see http://catb.org/~esr/gif2png/ )

In Win32,
  passthru("gif2png $filename");
works fine if gif2png.exe is in the path.
It will overwrite the file with .png extension, so be careful,or use temp files as in the post referenced above (without the  -O; type "gif2png" at the command line for the options).

I had a problem with exceeding the default 30 second execution time limit in PHP, so I added this line
  set_time_limit(0); // some odd gifs take a long time (example, a 25K gif, 700x700, mostly blank)
geoffrey at poulet dot org
27-Feb-2003 09:22
After hours of search, I've finally found a program which can convert JPG to GIF.
IJG - The Independent JPEG Group's JPEG software
Version 6 which support GIF (read and write with LZW)
and the version 6b which support GIF (write only without LZW)

The name of the file is: jpegsrc.v6.tar.gz
fezber at yamasoft dot com
13-Feb-2003 09:27
For users who just want GIF read (not write) support but:
1) Don't want to patch GD libs
2) Don't want to recompile something
3) Don't have permissions to install conversion packages
4) Any other reason...

I created a small php script (around 25KB) which lets you load a GIF from a file (you even can specify the image index on animated GIFs) and then convert it to a PNG or BMP file.

If I take one example:

<?
include("gif.php");

$gif = gif_loadFile("./test.gif");

if(
$gif) {
  
// GIF file successfully opened
  
if(gif_outputAsPNG($gif, "./test.png")) {
      
// Now, just use ImageCreateFromPng...
      
$img = ImageCreateFromPng("./test.png");

       if(
$img) {
          
header("Content-Type: image/jpeg");
          
ImageJPEG($img);
          
ImageDestroy($img);
       }
       else {
          
// Could NOT open PNG
      
}
   }
   else {
      
// Could NOT convert GIF to PNG...
  
}
}
else {
  
// GIF not loaded...
}
?>

Of course, it's slower than using appropriate software and/or libraries but it's quite useful for reading occasionaly some GIF files.

You'll find the gif.php source code at: http://www.yamasoft.com/php-gif.zip

Fabien
Ady at freebsd dot ady dot ro
11-Jan-2003 01:20
FreeBSD users are lucky to have the option of compiling GIF support in GD2.x through the ports system.
All you need to do is to export the "WITH_LZW=yes" global variable when compiling the graphics/gd2 port, e.g.:

# cd /usr/ports/graphics/gd2
# export WITH_LZW=yes
# make && make install

Then recompile and (re)install the www/mod_php4 port and you are in business... :)

Good luck!
unknown at hotmail dot com
14-Nov-2002 08:00
If GD doesn't support GIFs & gif2png is not available & you are not an administrator, you can install it in your account like this:

create do.php:
<?
 
global $do;
 
passthru($do);
?>

then upload gif2png-2.4.6.tar.gz, unpack and install it:
do.php?do=tar+-xvzf+gif2png-2.4.6.tar.gz
do.php?do=gif2png-2.4.5/configure
do.php?do=make

Then remove all files except gif2png. Don't forget to remove do.php as it is a serious security hole in your system.

Njoy!

Anze
senbei at terra dot es
09-May-2002 12:31
Since gif support is removed from the more recent GD libraries, you can still use it via an external program.
I've read somewhere about using ImageMagick and I tried myself but it's a quite big package and needs the X11 libs which are not available in some servers.
The other option I found is to use a little prog "gif2png" http://www.tuxedo.org/~esr/gif2png/
to convert gif files to png ones. It works under Unix and dos/win32/winnt and is very straightforward.
If you need to modify an user uploaded gif file to save it into your site just use this:

$path=$_FILES["photo"]["tmp_name"];
passthru("/usr/bin/gif2png -d -O ".$path);
$src_img=imagecreatefrompng( dirname($path)."/".basename($path, ".gif").".png");

This will convert the gif to a png and delete the gif file, then it will open the png with the GDlib so you can perform any operation on it.
philikon at gmx dot net
25-Jun-2001 10:50
Patches to the GD library that make GIF support available can be found at
http://www.rime.com.au/gd/
chuckg at infinite9 dot com
22-Mar-2001 02:05
I just thought I'd let you guys know of a workaround for the lack of Gif support in the latest GD...aside from adding the patch.  It works just as good, from what I can tell, and is quite nice ;)

Here goes:
<?
//Just grab some general image info
$img = "path/to/image.gif";
$imageInfo = GetImagesize($img);

if (
$imageInfo[2] == 1 ) {
  
//it's a gif
  
$file = fread(fopen($path, "r"), filesize($path));

  
$fileHeader = "image/gif";
  
Header("Content-Type: ".$fileHeader);
   echo
$file;
  
fclose($file);
}
?>

basically what that does is reads the file..through the "GetImageSize", which still returns if it's a GIF or not, (thank god), then if it's a gif, opens the file through normal filestream, sets the header to image type "gif" then prints it out.  Same as doing "ImageCreateFromGif($img)" and "ImageGif($img)", except that it doesn't require GD Gif support.  If you have any questions just ask me via email (chuckg@infinite9.com)
anthony dot atkins at vt dot edu
16-May-2000 08:05
<pre>
function myImageCreateFromGif($file_or_url) {

       $dummy_file = "/tmp/dummy.gif";

       # if this is a url, use fopen to get the file data, then
       # save it to a dummy file
       if (preg_match("/(http|ftp):\/\//i", $file_or_url)) {
               # open the file using fopen, which supports remote URLs
               $input = fopen($file_or_url, "rb");

               # read the contents of the file
               # will accept files up to 10Mb, but will probably get
               # and EOF before that, we have to do it this way because
               # filesize isn't designed to work with URLs.  sigh.
               $image_data = fread($input, 10000000);

               fclose($input);

               # write the contents to a dummy file
               $output = fopen("$dummy_file", "wb");
               fwrite($output, $image_data);
               fclose($output);

               # create the gif from the dummy file
               $image = ImageCreateFromGif($dummy_file);

               # get rid of the dummy file
               unlink($dummy_file);

       }

       # if it's not a URL, we can simply open the image directly
       else {
               $image = ImageCreateFromGif($file_or_url);
       }

       if ($image) { return $image; }
       else { return 0; }
}


if (!$url) { $url = "http://scholar.lib.vt.edu/images/cornholio.gif";}
$image = myImageCreateFromGif($url);

if ($image == "" || $image == 0) {
       print "<p>No Image data was returned...</p>\n";
}
else {
       header("Content-Type: image/gif\n\n");
       ImageGif($image);
}

?>
</pre>

<imagecreatefromgdimagecreatefromjpeg>
 Last updated: Thu, 19 May 2005
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: The Server Pages
Last updated: Thu May 19 17:35:34 2005 CDT