imagecreate

(PHP 4, PHP 5, PHP 7, PHP 8)

imagecreate创建一个新的基于调色板的图像

描述

imagecreate(int $width, int $height): GdImage|false

imagecreate() 返回一个图像标识符,代表一个指定大小的空白图像。

一般来说,我们建议使用 imagecreatetruecolor() 而不是 imagecreate(),以便图像处理在尽可能高的质量图像上进行。如果要输出一个调色板图像,则应在使用 imagepng()imagegif() 保存图像之前立即调用 imagetruecolortopalette()

参数

width

图像宽度。

height

图像高度。

返回值

成功时返回一个图像对象,错误时返回 false

变更日志

版本 描述
8.0.0 成功时,此函数现在返回一个 GDImage 实例;以前,返回一个 resource

示例

示例 #1 创建一个新的 GD 图像流并输出图像。

<?php
header
("Content-Type: image/png");
$im = @imagecreate(110, 20)
or die(
"Cannot Initialize new GD image stream");
$background_color = imagecolorallocate($im, 0, 0, 0);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5, "A Simple Text String", $text_color);
imagepng($im);
imagedestroy($im);
?>

上面的示例将输出类似于以下内容

Output of example : Creating a new GD image stream and outputting an image.

参见

添加注释

用户贡献的注释 20 个注释

DHKold
19 年前
为了从 BMP 文件创建图像,我创建了这个函数,它返回与其他 ImageCreateFrom 函数相同的资源

<?php
/*********************************************/
/* Fonction: ImageCreateFromBMP */
/* Author: DHKold */
/* Contact: [email protected] */
/* Date: The 15th of June 2005 */
/* Version: 2.0B */
/*********************************************/

function ImageCreateFromBMP($filename)
{
//Ouverture du fichier en mode binaire
if (! $f1 = fopen($filename,"rb")) return FALSE;

//1 : Chargement des ent?tes FICHIER
$FILE = unpack("vfile_type/Vfile_size/Vreserved/Vbitmap_offset", fread($f1,14));
if (
$FILE['file_type'] != 19778) return FALSE;

//2 : Chargement des ent?tes BMP
$BMP = unpack('Vheader_size/Vwidth/Vheight/vplanes/vbits_per_pixel'.
'/Vcompression/Vsize_bitmap/Vhoriz_resolution'.
'/Vvert_resolution/Vcolors_used/Vcolors_important', fread($f1,40));
$BMP['colors'] = pow(2,$BMP['bits_per_pixel']);
if (
$BMP['size_bitmap'] == 0) $BMP['size_bitmap'] = $FILE['file_size'] - $FILE['bitmap_offset'];
$BMP['bytes_per_pixel'] = $BMP['bits_per_pixel']/8;
$BMP['bytes_per_pixel2'] = ceil($BMP['bytes_per_pixel']);
$BMP['decal'] = ($BMP['width']*$BMP['bytes_per_pixel']/4);
$BMP['decal'] -= floor($BMP['width']*$BMP['bytes_per_pixel']/4);
$BMP['decal'] = 4-(4*$BMP['decal']);
if (
$BMP['decal'] == 4) $BMP['decal'] = 0;

//3 : Chargement des couleurs de la palette
$PALETTE = array();
if (
$BMP['colors'] < 16777216)
{
$PALETTE = unpack('V'.$BMP['colors'], fread($f1,$BMP['colors']*4));
}

//4 : Cr?ation de l'image
$IMG = fread($f1,$BMP['size_bitmap']);
$VIDE = chr(0);

$res = imagecreatetruecolor($BMP['width'],$BMP['height']);
$P = 0;
$Y = $BMP['height']-1;
while (
$Y >= 0)
{
$X=0;
while (
$X < $BMP['width'])
{
if (
$BMP['bits_per_pixel'] == 24)
$COLOR = unpack("V",substr($IMG,$P,3).$VIDE);
elseif (
$BMP['bits_per_pixel'] == 16)
{
$COLOR = unpack("n",substr($IMG,$P,2));
$COLOR[1] = $PALETTE[$COLOR[1]+1];
}
elseif (
$BMP['bits_per_pixel'] == 8)
{
$COLOR = unpack("n",$VIDE.substr($IMG,$P,1));
$COLOR[1] = $PALETTE[$COLOR[1]+1];
}
elseif (
$BMP['bits_per_pixel'] == 4)
{
$COLOR = unpack("n",$VIDE.substr($IMG,floor($P),1));
if ((
$P*2)%2 == 0) $COLOR[1] = ($COLOR[1] >> 4) ; else $COLOR[1] = ($COLOR[1] & 0x0F);
$COLOR[1] = $PALETTE[$COLOR[1]+1];
}
elseif (
$BMP['bits_per_pixel'] == 1)
{
$COLOR = unpack("n",$VIDE.substr($IMG,floor($P),1));
if ((
$P*8)%8 == 0) $COLOR[1] = $COLOR[1] >>7;
elseif ((
$P*8)%8 == 1) $COLOR[1] = ($COLOR[1] & 0x40)>>6;
elseif ((
$P*8)%8 == 2) $COLOR[1] = ($COLOR[1] & 0x20)>>5;
elseif ((
$P*8)%8 == 3) $COLOR[1] = ($COLOR[1] & 0x10)>>4;
elseif ((
$P*8)%8 == 4) $COLOR[1] = ($COLOR[1] & 0x8)>>3;
elseif ((
$P*8)%8 == 5) $COLOR[1] = ($COLOR[1] & 0x4)>>2;
elseif ((
$P*8)%8 == 6) $COLOR[1] = ($COLOR[1] & 0x2)>>1;
elseif ((
$P*8)%8 == 7) $COLOR[1] = ($COLOR[1] & 0x1);
$COLOR[1] = $PALETTE[$COLOR[1]+1];
}
else
return
FALSE;
imagesetpixel($res,$X,$Y,$COLOR[1]);
$X++;
$P += $BMP['bytes_per_pixel'];
}
$Y--;
$P+=$BMP['decal'];
}

//Fermeture du fichier
fclose($f1);

return
$res;
}
?>
wouter at rusman dot net
23 年前
在某些 Linux 发行版上编译 GD 支持,需要在 ./configure 命令中包含这些选项
--with=gd=/usr --with-jpeg=/usr --with-png=/usr --with-zlib=/usr

(我需要在 Redhat 6.1 上包含这些选项)
这是因为库位于 /usr/lib 而不是 /lib 中
Sohel Taslim
17 年前
这是一个简单易懂的示例,用于使用选定的字体将文本转换为图像。
它帮助我在用户没有安装孟加拉语字体的情况下以图像形式显示孟加拉语文本。

我希望它也能帮助你!

<?php
// 将字体文件放在一起或写入适当的位置。
makeImageF("Life in PHP.","CENTURY.TTF");

function
makeImageF($text, $font="CENTURY.TTF", $W=200, $H=20, $X=0, $Y=0, $fsize=18, $color=array(0x0,0x0,0x0), $bgcolor=array(0xFF,0xFF,0xFF)){

$im = @imagecreate($W, $H)
or die(
"Cannot Initialize new GD image stream");

$background_color = imagecolorallocate($im, $bgcolor[0], $bgcolor[1], $bgcolor[2]); // RGB 颜色背景。
$text_color = imagecolorallocate($im, $color[0], $color[1], $color[2]); // RGB 颜色文本。

imagettftext($im, $fsize, $X, $Y, $fsize, $text_color, $font, $text);

header("Content-type: image/gif");
return
imagegif($im);
}

?>
robert at scpallas dot de
22 年前
ImageCreate() 函数创建了一个调色板图像。
ImageCreateFromJPEG() 函数创建了一个真彩色图像。

当你使用 GD 2.0 时,当你尝试使用 ImageCopy() 时会遇到错误
使用一个真彩色图像和一个调色板图像。

在使用 ImageCopy() 之前,确保转换其中一个图像,或者使用 ImageCreateTrueColor() 而不是 ImageCreate()。
altype at bellsouth dot net
23 年前
ImagePNG($pic,"./dir/pic.png");

为了将图像保存为文件,我必须创建一个名为 "dir" 的目录,并将其 CHMOD 为 777 以授予每个人的读、写和执行权限 - 否则它将无法保存...
JamesM
14 年前
不会破坏图像,但会在输出中添加显示。
这将生成一个随机颜色的图像。如果你喜欢它,你可以使用它,因为你也可以得到 RGB 结果。
<?php
header
("content-type:image/png");
$im = imagecreate(100, 100);
$a = sprintf('%04x',mt_rand(0, 65535));
$b = sprintf('%04x',mt_rand(0, 65535));
$c = sprintf('%04x',mt_rand(0, 65535));
$white = imagecolorallocate($im,$a,$b,$c);
imagepng($im);
imagedestroy($im);
echo
"\n\n\n$a-$b-$c";
?>
php at silisoftware dot com
22 年前
不要尝试创建宽度和/或高度非常大的图像。首先,$width x $height 是(至少)需要分配的内存字节数。其次,如果你超过了任何参数的 int 范围,Apache 会崩溃(在分配任何内存之前)。
不要问我我是怎么发现这一点的 ;)
scottlindh pwnd at hushmail dot com
16 年前
在 UBUNTU 上安装,请执行以下操作..

sudo apt-get install php5-gd

安装完包后,我重新启动了 apache

sudo /etc/init.d/apache reload

转到爱用 Ubuntu...
sk89q
16 年前
根据文件类型加载文件,如果失败则返回 false。

<?php
function imagecreatefromfile($path, $user_functions = false)
{
$info = @getimagesize($path);

if(!
$info)
{
return
false;
}

$functions = array(
IMAGETYPE_GIF => 'imagecreatefromgif',
IMAGETYPE_JPEG => 'imagecreatefromjpeg',
IMAGETYPE_PNG => 'imagecreatefrompng',
IMAGETYPE_WBMP => 'imagecreatefromwbmp',
IMAGETYPE_XBM => 'imagecreatefromwxbm',
);

if(
$user_functions)
{
$functions[IMAGETYPE_BMP] = 'imagecreatefrombmp';
}

if(!
$functions[$info[2]])
{
return
false;
}

if(!
function_exists($functions[$info[2]]))
{
return
false;
}

return
$functions[$info[2]]($path);
}
?>
tassader at xmail dot cz
20 年前
看来 imagecreate 在 gd2 中创建的是灰度图像。
tore at kyberheimen dot com
21 年前
GD 升级问题
我使用 gd 1.6 的 imagecreate 来制作大照片的调整大小的图像。然后,在 gd 2.0 上使用相同的脚本时,颜色全错了。
使用 imagecreatetruecolor() 解决了这个问题!
kim at kimmccall dot org
23 年前
我如何解决我的“未定义函数 imagecreate()”问题
我遇到了很多人都报告过的相同问题,其中大多数 PHP 都能正常工作,但 gd 函数却不能。我安装了 RedHat rpm php-4.0.1pl2。它说(phpinfo.php)它是使用 '--with-gd=shared' 选项配置的。在我的 /usr/lib 目录中,我有 libgd.so.1.8.3 和 libgd.a。我决定用静态库来编译,所以我下载了源代码,用所有相同的配置标志构建,除了我使用 --with-gd=/usr。现在我的 gd 库可以工作了!!!
cstevens at gencom dot us
20 年前
以下是我使用 Gentoo 解决“致命错误:调用未定义函数:imagecreate()”错误的方法

1) 在 /etc/make.conf 中添加 gdb 的 USE 标志

USE="3dnow avi [你拥有的其他东西] gdb"

注意:以下列出了所有 USE 标志
http://www.gentoo.org/dyn/use-index.xml

2) 取消合并 mod_php

*注意* “重新合并”可能需要一段时间,因为它可能需要编译几个依赖项...在非生产时间内执行此操作,如果你绝对不能停机,请备份

emerge -C mod_php

3) 合并 mod_php

emerge -p mod_php
# 找出是否需要很长时间

4) 编辑 /etc/php/apach2-php4/php.ini
取消注释“extension=php_gd2.dll”行

5) 重新启动 apache2

/etc/init.d/apache2 restart

希望这有帮助!

--
库珀·史蒂文森
GenCom
http://www.gencom.us
help at nanomc dot com
18 年前
// 一个简单的 XY 图表

<html>
<head>

<title>XY 图表</title>

<h2>练习 XY 图表</h2>
</head>
<body>

<?php
$left
= 0;
$top = 0;
$x_size = 400;
$y_size = 400;

$char_width = 8;
$char_height = 11;

$x_start = $x_left + 100;
$y_start = $top + $char_height * 1.5;
$x_end = $x_start + $x_size;
$y_end = $y_start + $y_size;
$right = $x_start + $x_size + 40;
$bottom = $y_start + $y_size + $char_height * 1.5;

$graph_n = 100;
for(
$i = 0; $i < $graph_n; $i++ )
{
$graph_x[$i] = $i;
$graph_y[$i] = $i * $i;
}

$min_x = 9e99;
$min_y = 9e99;
$max_x = -9e99;
$max_y = -9e99;

$avg_y = 0.0;

for(
$i = 0; $i < $graph_n; $i++ )
{
if(
$graph_x[$i] < $min_x )
$min_x = $graph_x[$i];

if(
$graph_x[$i] > $max_x )
$max_x = $graph_x[$i];

if(
$graph_y[$i] < $min_y )
$min_y = $graph_y[$i];

if(
$graph_y[$i] > $max_y )
$max_y = $graph_y[$i];

$avg_y += $graph_y[$i];
}

$avg_y = $avg_y / $graph_n;

$min_x = 0;
$min_y = 0;
$max_x += $max_x * 0.05;
$max_y += $max_y * 0.05;

$image = ImageCreate($right - $left, $bottom - $top);
$background_color = imagecolorallocate($image, 255, 255, 255);
$text_color = imagecolorallocate($image, 233, 14, 91);

$grey = ImageColorAllocate($image, 204, 204, 204);
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
$red = imagecolorallocate($image, 255, 0, 0);

imagerectangle($image, $left, $top, $right - 1, $bottom - 1, $black );
imagerectangle($image, $x_start, $y_start, $x_end, $y_end, $grey );

for(
$i = 0; $i < $graph_n; $i++ )
{
$pt_x = $x_start + ($x_end-$x_start)*($graph_x[$i]-$min_x)/($max_x-$min_x);
$pt_y = $y_end - ($y_end - $y_start)*($graph_y[$i]-$min_y)/($max_y-$min_y);

// imagesetpixel( $image, $pt_x, $pt_y, $black );
imagechar($image, 2, $pt_x - 3, $pt_y - 10, '.', $black);
}

$string = sprintf("%2.5f", $max_y);
imagestring($image, 4, $x_start - strlen($string) * $char_width, $y_start - $char_width, $string, $black);

$string = sprintf("%2.5f", $min_y);
imagestring($image, 4, $x_start - strlen($string) * $char_width, $y_end - $char_height, $string, $black);

$string = sprintf("%2.5f", $min_x);
imagestring($image, 4, $x_start - (strlen($string) * $char_width)/2, $y_end, $string, $black);

$string = sprintf("%2.5f", $max_x);
imagestring($image, 4, $x_end - (strlen($string) * $char_width) / 2, $y_end, $string, $black);

$x_title = 'x axis';
$y_title = 'y axis';

imagestring($image, 4, $x_start + ($x_end - $x_start) / 2 - strlen($x_title) * $char_width / 2, $y_end, $x_title, $black);

imagestring($image, 4, $char_width, ($y_end - $y_start) / 2, $y_title, $black);

header('Content-type: image/png');
$filename = sprintf("%d.png", time());
ImagePNG($image,$filename);
ImageDestroy($image);

printf("<img src='%s'> ", $filename);
?>

</body>
</html>
marc at gutt dot it
9 年前
基于 DHKold 的贡献,我意识到 imagecreatefrombmp() 支持所有 1 位、4 位、8 位、16 位、24 位和 32 位位图。最后 Fabien Ménager 为 DOMPDF 项目将其完善。请随意使用它
https://code.google.com/p/dompdf/source/browse/trunk/dompdf/include/functions.inc.php?spec=svn504&r=504#551
foxlovr1 at cox dot net
20 年前
你可以设置它,以便你可以编写一个受 URL 控制的文本。

像这样...

<?php
header
("Content-type: image/png");
$im = @imagecreate(128, 16) or die("Cannot Initialize new GD image stream");
$bc = imagecolorallocate($im, 0, 255, 255);
$tc = imagecolorallocate($im, 0, 0, 0);
imagestring($im, 1, 4, 4, $t, $tc);
imagepng($im);
imagedestroy($im);
?>

然后当你使用图像时,使用这个...

<img src="http://www.yourdomain.com/stuff/cool_image.php?t=Text">

这将创建一个青色背景的图像,并在黑色文本中显示“Text”。

请将评论/问题发送到 [email protected][email protected]
匿名
19 年前
这是你可以用最大高度和宽度创建缩略图的方法。这样它就可以很好地适应画廊表格。在这个例子中,$im 是源图像
<?
// 计算缩略图大小
$ow = imagesx($im);
$oh = imagesy($im);
$maxh = 100;
$maxw = 150;
$new_h = $oh;
$new_w = $ow;

if($oh > $maxh || $ow > $maxw){
$new_h = ($oh > $ow) ? $maxh : $oh*($maxw/$ow);
$new_w = $new_h/$oh*$ow;
}

// 创建目标图像
$dst_img = ImageCreateTrueColor($new_w,$new_h);
// 调整大小并复制图像
ImageCopyResized($dst_img, $im, 0,0,0,0, $new_w, $new_h, ImageSX($im), ImageSY($im));
$function_image_new($dst_img,$galdir.$file);
?>
removethisbeforebayet at removethistooenseirb dot fr
23 年前
请注意我遇到的一个问题。
使用 PHP 函数创建的 Png 图像似乎很难被旧浏览器识别,尤其是 - 好吧,主要是 - IE 4.0(浏览器崩溃)。
我认为这可能是因为 IE 4.0 发布时,png 格式要么非常新,要么使用率不高,因为 jpeg 和 gif 格式非常流行...
所以,如果你打算为将要被 IE 4.0 用户看到的网站动态创建图像,请考虑一下...
也许 jpeg 格式会更好地完成工作。
andrus at vnet dot ee
23 年前
不要忘记在显示图像后使用 ImageDestoy。我忘记了,我的网页大约有 15 张由 GD 生成的图片,Web 服务器很快就崩溃了(服务器是双 Xeon 900MHz 和 4G RAM :[[)。它因为内存不足而崩溃了 :\
sjnorrie at hotmail dot com
20 年前
在 Windows 上。

当出现未定义函数 image* 时,表示没有使用 gd 库。检查 php.ini 文件。确保 php_gd.dll 没有被注释掉。重新启动 apache 应该可以使图像函数正常工作。
To Top