imagecreatefromstring()不输出图像

时间:2014-03-12 20:02:21

标签: php

我是PHP OOP的新手,我正在做一个我在网上找到的教程。我发现这个来自tut的代码可能正在创建一个包含图像内容的变量,但我不确定如何验证这一点。这些方法对我来说都是新的。     

        // read the image file to a binary buffer
        $fp = fopen($filename, 'rb') 
            or die("Image '$filename' not found!");
        $buf = '';
        while(!feof($fp))
            $buf .= fgets($fp, 4096);

        // create image
        imagecreatefromstring($buf);
    }
}
$image = new Image("image.gif"); 
?>

调用$ image变量以在浏览器中显示图像的最佳方法是什么?起初我认为这是代码应该做的。我没有收到图片未找到的错误,所以至少我可以排除这种情况。我使用的图像是71kb。谢谢!

要添加评论,我看到有一个答案可以解决这个问题,但我很高兴在这个帖子中找到一个直接查看我发布的代码的答案,而不是完全重写的代码。< / p>

1 个答案:

答案 0 :(得分:2)

好的,所以当你致电new Image()时 - 你正在调用__construct()函数 -

你可能已经知道了。

然而,__construct()函数没有输出任何内容。

例如,如果您将echo放在imagecreatefromstring前面 - 那么您可以看到一些输出。否则,该函数本身不输出任何内容。

但是,对于此函数,您必须告诉PHP如何输出它(echo用于字符串)

所以,如果有疑问,RTM:

$im = imagecreatefromstring($buf);
if ($im !== false) {
    header('Content-Type: image/png');
    imagepng($im); 
    imagedestroy($im);
}

现在,既然你正在学习oop,那么让我解释一下 -

你的__construct函数的目的应该是相当明显的 - 但是当你处理对象和类时,你需要分离不同的函数 - 因此,上面的代码片段应该在其中自己的功能,所以最终的结果将是:

<?php

class Image{         

  private $image; //this variable, or 'property'(in OOP Classes) will be shared 


public function __construct($filename){


        $fp = fopen($filename, 'rb') 
            or die("Image '$filename' not found!");
        $buf = '';
        while(!feof($fp))
            $buf .= fgets($fp, 4096);

        // create image
      $this->image =  imagecreatefromstring($buf);
    }

public function renderImage(){
    if ($this->image !== false) {
        header('Content-Type: image/png');
        imagepng($im); 
        imagedestroy($im);
        } 
    }

}
$image = new Image("image.gif"); 
$image->renderImage();