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ファイルをエクスポートするための2番目の引数としてディレクトリを取得する関数に誘導されました。

プログラム:インターネットにアクセスできないときに後で読むことができるように、ウェブコミックの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パーサーを使用して、ソースをスクレイプし、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は、2番目の引数を文字列にします。画像ファイルは文字列ではありません。上記の他の2つの回答を参照してください。それがあなたが画像を保存する方法です。もう少しマニュアルを使ってみてください。

于 2012-08-30T09:09:08.390 に答える