Изображение сохраняется на сервере, но не отображается в браузере при использовании header ()

Я настроил 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, соответствующим URL страницы.

Спасибо.

0

Решение

подобно документация указывает, что второй аргумент imagejpeg должно быть NULL если вы хотите вывести изображение напрямую.

Попробуйте изменить imagejpeg( $dst_r, $path, 100 ); в imagejpeg( $dst_r, NULL, 100 );,

Изменить: это также избавляет вас от использования unlink, поскольку файл не создается.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]