file_put_contents()在尝试导出图像时发出错误

时间:2012-08-29 19:46:46

标签: php

我通过将一些图像复制到一个新图像中来创建图像。在我的程序的最后一步,我试图将此文件导出到一个文件夹中。

代码如下:

<?php

        require_once "../shdp/simple_html_dom.php";

        $next = "http://www.pidjin.net/2012/08/28/of-my-own/";
        $html = file_get_html($next);
        $imageList = $html->find('div[class=episode] p img');

        $newHeight = 0;

        for($iii=0; $iii<count($imageList); $iii++){
            $storage[$iii] = $imageList[$iii]->src;
            $img[$iii] = imagecreatefromstring(file_get_contents($storage[$iii]));

            $width[$iii] = imagesx($img[$iii]);
            $height[$iii] = imagesy($img[$iii]);

            $newHeight += ($height[$iii] + 30);
        }

        $newWidth = max($width);
        $cummDestHeight = 0;

        $export = imagecreatetruecolor($newWidth, $newHeight);
        imagefill($export, 0,0, 0xFFFFFF);

        for($iii=0;$iii<count($img);$iii++){
            imagecopy($export, $img[$iii], 0, $cummDestHeight, 0, 0, $width[$iii], $height[$iii]);
            $cummDestHeight += $height[$iii] + 30;
        }


        $bits = explode('/',$next);
        file_put_contents("../pidjin/$bits[5]-$bits[4]-$bits[3].png",$export);
?>

我收到的错误是:

Warning: file_put_contents(): supplied resource is not a valid stream resource in E:\Web\Comics\pidjin.php on line 54

问题:我不知道如何让$ export导出有效的流资源。

4 个答案:

答案 0 :(得分:5)

$ export将成为GD图像句柄。 NOT 可以简单地将其转储到文件中并期望获得JPG或PNG图像。

为此,你应该做

imagepng($export, "../pidjin/$bits etc...");

将为您创建.PNG文件。

答案 1 :(得分:1)

另一个问题是,我终于能够使代码正常工作了。

解决方案:问题在于我试图使用file_put_contents来转储GD句柄,事实证明它并不那么简单。我被定向到imagepng函数,该函数将目录作为导出文件的第二个参数。

计划:我制作了一个程序,从webcomic Fredo and Pidjin下载条带,以便我以后可以在无法访问互联网时阅读。该计划如下。

<?php

require_once "../shdp/simple_html_dom.php";

$next = "http://www.pidjin.net/2006/02/19/goofy-monday/";

$counter = 1;
while($next){

    $html = file_get_html($next);

    $imageList = $html->find('div[class=episode] p img');

    $newHeight = 0;

    for($iii=0; $iii<count($imageList); $iii++){
        $storage[$iii] = $imageList[$iii]->src;
        $img[$iii] = imagecreatefromstring(file_get_contents($storage[$iii]));

        $width[$iii] = imagesx($img[$iii]);
        $height[$iii] = imagesy($img[$iii]);

        $newHeight += ($height[$iii] + 30);
    }

    $newWidth = max($width);
    $cummDestHeight = 0;

    $export = imagecreatetruecolor($newWidth, $newHeight);
    imagefill($export, 0,0, 0xFFFFFF);

    for($iii=0;$iii<count($img);$iii++){
        imagecopy($export, $img[$iii], 0, $cummDestHeight, 0, 0, $width[$iii], $height[$iii]);
        $cummDestHeight += $height[$iii] + 30;
    }


    $bits = explode('/',$next);

    imagepng($export, "../pidjin/$counter ($bits[5]-$bits[4]-$bits[3]).png");

    $nextUrl = $html->find('span[class=next] a[rel=next]');
    $next = $nextUrl[0]->href;
    $counter++;
}

&GT;

注意:我使用Simple HTML DOM Parser来抓取源代码并浏览DOM。

干杯。

答案 2 :(得分:0)

用“imagejpeg($ rotate,$ file_new);”

替换“file_put_contents”

答案 3 :(得分:-1)

根据PHP手册的

file_put_contents将第二个参数作为字符串。 图像文件不是字符串。 请参阅上面的另外两个回答。 这就是你保存图像的方式。 请多尝试使用本手册。