我已经设置了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与页面网址匹配的损坏图像。
谢谢。
答案 0 :(得分:1)
与the documentation指定类似,如果您想直接输出图像,imagejpeg
的第二个参数应为NULL
。
尝试将imagejpeg( $dst_r, $path, 100 );
更改为imagejpeg( $dst_r, NULL, 100 );
。
编辑:这也可以避免使用unlink
,因为没有文件。