我可以显示使用PHP / GD创建的图像而无需保存,也不使用带有图像标题的外部PHP吗?

时间:2012-01-10 23:10:09

标签: php image gd

我正在尝试创建一种以OOP方式显示使用PHP / GD创建的图像的方法。为了实现这一目标,我创建了一个类,除其他外,创建了一个图像。像这样:

<?php
    class MyClass 
    {
        public $image;
        function __construct()
        {
           ...
           $this->image = imagecreatetruecolor(100,100);
           $bg = imagecolorallocate($this->image,100,100,100);
           imagefilledrectangle($this->image,0,0,100,100,$bg);
           ...
        }
        ...
    }

    $myvar = new MyClass
?>

我尝试在类中创建一个输出图像的函数。像这样:

function show()
{
    echo "<img src='" . imagejpeg($this->image,100) . "' />";
}

但它不起作用。我也试过

function show()
{
    echo "<img src='data:image/jpeg;base64," . imagejpeg($this->image,100) . "' />";
}

但这也行不通。想法是简单地从HTML调用函数。像这样:

<div id='anyid'>
    <?php $myvar->show(); ?>
</div>

我这么错吗?有没有办法实现我想要的?我试着想办法使用 img ='mycode.php',但它对我不起作用,因为必须在页面加载之前创建类,图像出现在中途页面。

感谢。

2 个答案:

答案 0 :(得分:31)

首先,您需要向imagejpeg()插入第二个参数,以允许100成为质量参数。然后,您需要 base64编码原始字节

    public function show() {

        // Begin capturing the byte stream
        ob_start();

        // generate the byte stream
        imagejpeg($this->image, NULL, 100);

        // and finally retrieve the byte stream
        $rawImageBytes = ob_get_clean();

        echo "<img src='data:image/jpeg;base64," . base64_encode( $rawImageBytes ) . "' />";

    }

data:image/jpeg;base64要求原始字节编码为base64

此外,我建议将$image变为protected变量,因为我认为它仅在MyClass内创建和维护。

答案 1 :(得分:1)

一个单一的代码行,在盲目搜索3小时后解决我!

...
ob_start();
header( "Content-type: image/jpeg" ); <br/>
imagejpeg( $this->img, NULL, $qualidade );<br/>
imagedestroy( $this->img );<br/>
$i = ob_get_clean();<br/>

echo "<img src='data:image/jpeg;base64," . base64_encode( $i )."'>";   //saviour line!

THKS!