|
|
 |
imagecreatefromgif (PHP 3, PHP 4, PHP 5) imagecreatefromgif -- Create a new image from file or URL Descriptionresource 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); if (!$im) { $im = imagecreate (150, 30); $bgc = imagecolorallocate ($im, 255, 255, 255);
$tc = imagecolorallocate ($im, 0, 0, 0);
imagefilledrectangle ($im, 0, 0, 150, 30, $bgc);
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) {
if(gif_outputAsPNG($gif, "./test.png")) {
$img = ImageCreateFromPng("./test.png");
if($img) {
header("Content-Type: image/jpeg");
ImageJPEG($img);
ImageDestroy($img);
}
else {
}
}
else {
}
}
else {
}
?>
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
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:
<?
$img = "path/to/image.gif";
$imageInfo = GetImagesize($img);
if ( $imageInfo[2] == 1 ) {
$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>
| |