0

我有一个关于 PHP 函数 imagesetpixel 的快速问题。根据此处的文档,最后一个参数是使用 imagecolorallocate 创建的颜色标识符。这是有道理的。但是我在我的程序中发现了一个错字,我将十六进制值直接传递给 imagesetpixel,它仍然工作得很好。这是预期的行为吗?文档中没有提到它,所以我倾向于坚持使用颜色标识符,但我想我会问以防万一。

4

2 回答 2

1

如果没有记录,您无权期待任何事情。您的期望和实际行为之间的任何相关性要么被记录在案,要么必须被视为偶然发生。

于 2013-09-03T13:15:39.680 回答
1

这是做什么imagecolorallocate()的:https ://bitbucket.org/libgd/gd-libgd/src/de7acbfe3e9e43b6b74b740e192915aff4e45a5d/src/gd.c?at=master#cl-518

基本上,它会吐出一个压缩为int. 您可以这样做,因为 andint有 4 个字节,并且您需要一个字节来表示每种颜色。

现在,当您将任何值传递给imagesetpixel()PHP 可以转换为整数时,它就会起作用。

您甚至可以自己执行此操作(未经测试,可能不适用于真彩色上下文):

$im_color = pack('SSSS', $r, $g, $b, $a);

当然,这整个行为在任何未来版本的 GD 中都会发生变化,这可能就是它没有被记录的原因。

于 2013-09-03T13:22:05.627 回答