2

URLを介して渡されたパラメーターを使用して、任意のテキストのPNG画像を生成する単純なサービスがあります。パラメータの1つはテキスト自体であり、残りは「フォント」、「色」、「フォントの太さ」などです。

このようなURLの例は次のとおりです。http: //picselbocs.com/projects/cakemyface/text.php?params = Verdana%7C18%7Cbold%7Cnormal%7Ccenter%7C%23cc0000%7Cunderline&text = Hello%20world!

次のPNGを生成します。

オリジナル

別のスクリプトでは、cURLを使用してこのサービスによって生成されたリソースを取得し、それを使用して画像に変換します。これは、imagecreatefromstring()回転やスケーリングなどの操作が必要なためです。次に、他のリソースとマージします。画像。このために、私は次のコードを使用します:

function getImage($url){
            $ch = curl_init ($url);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
            $resource = curl_exec($ch);
            curl_close ($ch);

            return $resource;
    }


    $url = "http://picselbocs.com/projects/cakemyface/text.php?params=Verdana%7C18%7Cbold%7Cnormal%7Ccenter%7C%23cc0000%7Cunderline&text=Hello%20world!";

    $string = getImage($url);
    $image = imagecreatefromstring($string);

    // Send the image to the client
    header("Content-type: image/png");
    header("Content-disposition: inline; filename=mytext.png");
    imagepng($image);
    imagedestroy($image);

これと同じコードがここにあり、出力を確認できます。問題は、上記のコードが、次の例のように、すべての文字が長方形で埋められた奇妙なPNGを出力することです。

サンプル結果

なぜこれが発生し、どうすれば解決できますか?

もう1つの興味深い点は、テキスト画像へのURLを、たとえば、Google Chartsツールで生成されたQRコード(QRコードなど)へのリンクに置き換えると、結果は本来あるべきものになるということです...

4

1 に答える 1

3

少し遊んだ後、私は問題と解決策を発見しました!

$image = imagecreatefromstring(file_get_contents('http://picselbocs.com/projects/cakemyface/text.php?params=Verdana|18|bold|normal|center|%23cc0000|underline&text=Hello%20world!'));
imagesavealpha($image, TRUE); // this is the fix
header("Content-Type: image/png");
imagepng($image);

画像を作成する方法は、カールを使用しない簡単な方法です。画像にはアルファチャネルの保存が必要なようです。

于 2012-11-24T10:09:14.797 に答える