我有一个关于PHP函数imagesetpixel的快速问题。根据文档here,最终参数是使用imagecolorallocate创建的颜色标识符。这是有道理的。但是我在我的程序中发现了一个拼写错误,我将十六进制值直接传递给imagesetpixel,它仍然正常工作。这是预期的行为吗?它没有在文档中提及,所以我倾向于坚持使用颜色标识符,但我想我会问以防万一。
答案 0 :(得分:1)
如果没有记录,您无权期待任何事情。您的期望与实际行为之间的任何相关性都要记录在案,或者必须视为偶然发生。
答案 1 :(得分:1)
以下是imagecolorallocate()
的作用:https://bitbucket.org/libgd/gd-libgd/src/de7acbfe3e9e43b6b74b740e192915aff4e45a5d/src/gd.c?at=master#cl-518
基本上,它会将RGBA值压缩为int
。你可以这样做,因为int
有4个字节,你需要一个字节来表示每种颜色。
现在,当您将任何值传递给imagesetpixel()
时,PHP可以转换为整数,它将起作用。
你甚至可以自己做(未经测试,可能无法使用truecolor上下文):
$im_color = pack('SSSS', $r, $g, $b, $a);
当然,这整个行为在GD的任何未来版本中都会发生变化,这可能是未记录的原因。