【发布时间】:2013-05-31 01:37:10
【问题描述】:
我有一个包含 5 张图像的文件夹,我想通过 PHP 将其编译成垂直图像精灵。我已经遍历了所有获取数据的项目并将其保存到一个数组中:
Array
(
[0] => Array
(
[location] => uploads/test1/android.png
[height] => 175
[width] => 175
[vertical] => 0
)
[1] => Array
(
[location] => uploads/test1/autocad.png
[height] => 225
[width] => 225
[vertical] => 175
)
[2] => Array
(
[location] => uploads/test1/betting.png
[height] => 512
[width] => 512
[vertical] => 400
)
[3] => Array
(
[location] => uploads/test1/calculator.png
[height] => 200
[width] => 200
[vertical] => 912
)
[4] => Array
(
[location] => uploads/test1/ccleaner.png
[height] => 256
[width] => 256
[vertical] => 1112
)
)
垂直是该图像的起始 y 坐标。这是我当前的 PHP:
$background = imagecreatetruecolor($horizontal, $vertical);
$newimg = "sprite.jpg";
foreach($images as $i)
{
$tmp = imagecreatefromjpeg($i['location']);
imagecopy($background, $tmp, 0, $i['vertical'], 0, 0, $i['width'], $i['height']);
imagedestroy($tmp);
}
imagejpeg($background, $newimg);
$images 是上面的数组。当我创建数组时,我计算水平和垂直变量(我已经验证它们是正确的)。我已经用 PHP 尝试了一些东西,并且在某一时刻设法创建了正确尺寸 (512x1368) 的黑色图像,但这与我来的时候差不多。任何想法为什么这不起作用?
这是更新后的代码:
$background = imagecreatetruecolor($horizontal, $vertical);
$newimg = "sprite.png";
foreach($images as $i)
{
$tmp = imagecreatefrompng($i['location']);
imagecopy($background, $tmp, 0, $i['vertical'], 0, 0, $i['width'], $i['height']);
imagedestroy($tmp);
}
imagepng($background, $newimg);
我什至尝试将“imagedestroy”注释掉,看看这是否是罪魁祸首。该代码不会生成任何东西。零。文件夹和图像权限都是 777。在这一点上,我什至不确定下一步该尝试哪个方向。有什么想法吗?
还尝试了“imagecreatefromstring”,但也没有产生任何结果(实际上没有创建文件)。
$frame = imagecreatefromstring(file_get_contents($i['location']));
imagecopy($background, $frame, 0, $i['vertical'], 0, 0, $i['width'], $i['height']);
imagedestroy($frame);
【问题讨论】:
-
粗略一看,当您的所有文件都是 .png 时,您使用的是
imagecreatefromjpeg? -
我不确定您的意思是“这不起作用”。也许我错过了,但你没有说哪个部分不起作用。
-
他解释说他创建了正确尺寸的精灵,但它全是黑色的,这表明图像文件本身存在问题。我认为 PHP 试图将它们解释为他正在使用的函数中的 JPEG,而不是 PNG
-
我认为这无关紧要,我相信我能够使用
imagecreatefromjpeg提取 png 图像,但让我验证一下... -
好的,添加了更新的代码,但它仍然无法生成任何东西(我已经查看了所有文件夹以确保)。想法?
标签: php arrays css-sprites