2013-01-05 215 views
1

试图使用从http://php.net/manual/en/function.imagecopyresampled.php复制的代码将图像打印到浏览器。PHP图像打印垃圾

它打印出一盒随机字符。

CODE:

public function printSummaryArticle($article, $copy, $thumb) { 
    $src_image = Config::getAbsPath() . '/images/articles/' . $article['image']; 
    echo 
     '<div class="summary_article"><a href="/' 
     . BreadCrumbs::getCrumb(1) 
     . '/' 
     . BreadCrumbs::getCrumb(2) 
     . '/article/' 
     . $article['id'] 
     . '"><h4>' 
     . $article['title'] 
     . '</h4></a> (' 
     . $article['date'] 
     . ')' 
     . '<img src="data:image/jpeg;base64,'. imagejpeg($thumb->generateThumb($src_image, 300, 200)) . '"' 
     . '<p>' 
     . strip_tags($copy->truncateString($article['body'], 250, " ")) 
     . '</p><p><a href="/' . BreadCrumbs::getCrumb(1) 
     . '/' 
     . BreadCrumbs::getCrumb(2) 
     . '/article/' 
     . $article['id'] 
     . '"> Read more</a></p></div>'; 
} 

也试过:

public function printSummaryArticle($article, $copy, $thumb) { 
    $src_image = Config::getAbsPath() . '/images/articles/' . $article['image']; 
    echo 
     '<div class="summary_article"><a href="/' 
     . BreadCrumbs::getCrumb(1) 
     . '/' 
     . BreadCrumbs::getCrumb(2) 
     . '/article/' 
     . $article['id'] 
     . '"><h4>' 
     . $article['title'] 
     . '</h4></a> (' 
     . $article['date'] 
     . ')'; 
     header('Content-type: image/jpeg'); 
     imagejpeg($thumb->generateThumb($src_image, 300, 200)); 
    echo 
     '<p>' 
     . strip_tags($copy->truncateString($article['body'], 250, " ")) 
     . '</p><p><a href="/' . BreadCrumbs::getCrumb(1) 
     . '/' 
     . BreadCrumbs::getCrumb(2) 
     . '/article/' 
     . $article['id'] 
     . '"> Read more</a></p></div>'; 
} 

相同的结果。除了声明标头已被发送的附加错误。

我该如何解决这个问题?

+0

通过它们不是随机的字符的方式。 – Popnoodles

回答

0

您还没有关闭图像标签,但更重要的是在你呼应该字符串

ob_start(); 
imagejpeg($thumb->generateThumb($src_image, 300, 200)); 
$imagejpg=ob_get_clean(); 

那么这

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

您还没有Base64编码的图像数据

在第二个例子中无法做你想要做的事

+0

谢谢popnoodles。我会尝试这一行,但我认为base64,如上所述,无论如何不会有效。 – obmon

+1

好的。我忘了imagejpeg返回布尔,所以更新了答案 – Popnoodles

2

imagejpeg()既不返回一个字符串也不执行Base64编码。要解决这个问题,捕获其在PHP的输出缓冲输出,然后进行Base64编码,捕获输出:

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

注意data: URL被限制为32 KB在Internet Explorer 8,不要在早期版本的工作IE(source)。如果您需要支持IE 8及以下版本,则可能需要将图像另存为服务器上的单独文件。这是留给作为练习读者:)

(有关的解释“头已经发送”警告,见How to fix "Headers already sent" error in PHP

+0

谢谢PleaseStand。我开始认为在输出前保存拇指可能是最好的方法。 – obmon