我正在尝试创建一种以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',但它对我不起作用,因为必须在页面加载之前创建类,图像出现在中途页面。
感谢。
答案 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!