4

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

代码如下:

<?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

4 回答 4

5

$export 将是一个 GD 图像句柄。这不是您可以简单地转储到文件并期望获得 JPG 或 PNG 图像的东西。

为此,你应该这样做

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

这将为您创建 .PNG 文件。

于 2012-08-29T19:49:48.767 回答
1

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

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

程序:我制作了一个程序来下载网络漫画Fredo 和 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++;
}

?>

注意:我使用了 Simple HTML DOM Parser 来抓取源代码并查看 DOM。

干杯。

于 2012-08-30T08:50:01.760 回答
1

刚刚将“file_put_contents”替换为“imagejpeg($rotate, $file_new);”

于 2014-09-10T08:42:50.087 回答
-1

根据 PHP 手册,file_put_contents 将第二个参数作为字符串。图像文件不是字符串。请参阅上面的其他两个答案。这就是您保存图像的方式。尝试更多地使用手册。

于 2012-08-30T09:09:08.390 回答