PHP Conference Japan 2024

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(
"无法初始化新的 GD 图像流");
$background_color = imagecolorallocate($im, 0, 0, 0);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5, "一个简单的文本字符串", $text_color);
imagepng($im);
imagedestroy($im);
?>

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

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

参见

添加注释

用户贡献的注释 17 条注释

12
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;
}
?>
3
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 中
1
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(
"无法初始化新的GD图像流");

$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);
}

?>
0
[email protected]
22年前
ImageCreate() 函数创建了一个调色板图像。
ImageCreateFromJPEG() 函数创建了一个真彩色图像。

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

在使用 ImageCopy() 之前,请确保转换其中一个图像,或者使用 ImageCreateTrueColor() 代替 ImageCreate()。
-1
[email protected]
23 年前
ImagePNG($pic,"./dir/pic.png");

为了将图像保存为文件,我不得不创建一个名为“dir”的目录,并将其 CHMOD 设置为 777,以便每个人都具有读、写和执行权限——否则它将无法保存……
-2
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";
?>
-1
[email protected]
22年前
不要尝试创建宽度和/或高度非常大的图像。首先,$width x $height 是(至少)需要分配的内存字节数。其次,如果任一参数超出 int 的范围,Apache 将崩溃(在分配任何内存之前)。
别问我我是怎么发现这一点的;)
-4
scottlindh [email protected]
17 年前
在 UBUNTU 上安装,请执行以下操作..

sudo apt-get install php5-gd

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

sudo /etc/init.d/apache reload

去爱 Ubuntu...
-2
[email protected]
21年前
似乎 imagecreate 使用 gd2 创建了一个灰度图像
-2
[email protected]
22年前
GD 升级问题
我使用 imagecreate 和 gd 1.6 来创建大型照片的调整大小的图像。然后,在 gd 2.0 上使用相同的脚本时,颜色全部错误。
使用 imagecreatetruecolor() 解决了问题!
-4
[email protected]
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 库可以工作了!!!
-3
[email protected]
20年前
以下是如何使用 Gentoo 解决“致命错误:调用未定义函数:imagecreate()”错误

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

USE="3dnow avi [您拥有的任何其他内容] gdb"

注意:这是所有 USE 标志的列表
https://gentoolinux.cn/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
-4
[email protected]
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
-4
[email protected]
20年前
您可以设置它,以便您可以编写受 URL 控制的文本。

像这样...

<?php
header
("Content-type: image/png");
$im = @imagecreate(128, 16) or die("无法初始化新的GD图像流");
$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] 发表评论/问题。
-5
[email protected]
23 年前
请注意我遇到的一个问题。
使用 PHP 函数创建的 Png 图像似乎被旧浏览器(尤其是 IE 4.0(浏览器崩溃))识别得很差。
我认为这可能是由于 IE 4.0 发布时,png 格式要么非常新,要么使用不广泛,因为 jpeg 和 gif 格式非常流行……
因此,如果您计划为网站动态创建供 IE 4.0 用户查看的图像,请考虑一下……
也许 jpeg 格式能更好地完成这项工作。
-3
andrus at vnet dot ee
23 年前
别忘了在显示图像后使用 ImageDestoy。我忘记了,我的网页大约有 15 张由 GD 生成的图片,Web 服务器很快就挂掉了(服务器是双 Xeon 900MHz 和 4G RAM :[[)。它挂掉是因为内存不足 :\
-4
sjnorrie at hotmail dot com
21年前
在 Windows 上。

当你遇到 undefined function image* 时,这意味着 gd 库没有被使用。检查 php.ini 文件。确保 php_gd.dll 没有被注释掉。重启 Apache 应该可以使图像函数正常工作。
To Top