图像保存到服务器但使用header()时不会出现在浏览器中

时间:2014-09-17 09:15:47

标签: php image post http-headers

我已经设置了jCrop,以便我网站上的用户可以裁剪和保存(下载)图像。我现在已接近尾声,但是我撞到了墙上。我已经设置了代码(见下文),当我注释掉header()行时,一切都按预期工作,裁剪后的图像会保存到服务器上,我可以从那里下载。

问题在于,当我包含标题并且返回损坏的图像时,我真的不确定原因。如果有人可以提供帮助,我将非常感激

<?php
//$_POST['src'] = http://example.com/example.jpg
$image_url = $_POST['src'];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $image_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);

$targ_w = $_POST['w']; $targ_h = $_POST['h'];

$image = imagecreatefromstring( $data );
$dst_r = imagecreatetruecolor( $targ_w, $targ_h );

if ( !$image )
    exit( 'No valid image' );

$path = '/home/hostname/public_html/'.time().'-image.jpg';

imagecopyresampled( $dst_r, $image, 0, 0, $_POST['x'], $_POST['y'], $targ_w, $targ_h, $_POST['w'], $_POST['h'] );

//header( 'Content-Type: image/jpeg' );

imagejpeg( $dst_r, $path, 100 );

imagedestroy( $dst_r );
//unlink( $path );
exit;
?>

目前,代码代表图像保存在网站的根目录中。如果我取消注释unlink()图像将从目录中删除(这是预期的)。如果我取消注释header()行,则会返回一个页面,其中包含src与页面网址匹配的损坏图像。

谢谢。

1 个答案:

答案 0 :(得分:1)

the documentation指定类似,如果您想直接输出图像,imagejpeg的第二个参数应为NULL

尝试将imagejpeg( $dst_r, $path, 100 );更改为imagejpeg( $dst_r, NULL, 100 );

编辑:这也可以避免使用unlink,因为没有文件。