【问题标题】:PHP to create image spritePHP创建图像精灵
【发布时间】: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


【解决方案1】:

哇...所以是的,我在“上传”文件夹上正确设置了权限,但 $newimg 试图直接保存在根目录中(不是 777),这就是它似乎失败的原因。

当然,我确实在让它工作后不久再次打破了它(试图让背景变成白色而不是黑色,奇怪的是不太好),但我相信我最终会让它工作的!

感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 2019-09-26
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多