У меня есть PHP-скрипт, который генерирует изображение с помощью PHP GD. После того, как он генерирует изображение, он сохраняет его и отправляет этот результат при вызове Ajax:
imagejpeg($img_data, 'filename.jpg'); echo '<img src="/filename.jpg.jpg">';
И после этого изображение отображается на странице, и все в порядке. Но я не хочу создавать изображение каждый раз. Есть ли способ вернуть Ajax только строку $raw_data
и показать изображение? Я пробовал вот так:
echo $img_data;
Но не удача, только то, что возвращается, – это несколько?.
Вот мой код jQuery Ajax:
$.ajax({ type: 'POST', data: { action: 'update_image', //some instructions for creating the image }, url: 'script.php', success: function(msg) { $('#somediv').append(msg); } });
base64 закодирует изображение и вернет его, затем вы можете сделать <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA......." />
На стороне PHP
$image = base64_encode($imageGDRender); echo json_encode(array('image'=>$image));
Это вернет ваш json обратно в ваш jquery
затем на стороне ajax
$.ajax({ ... success: function(data) { var base64Image = data.image; ...now put it in your image $('#image').attr('src','data:image...'+base64Image); })....
Вот решение:
PHP-код:
ob_start(); imagejpeg($im); $outputBuffer = ob_get_clean(); $base64 = base64_encode($outputBuffer); echo '<img src="data:image/jpeg;base64,'.$base64.'" />';
На стороне пользователя (в JQuery):
success: function(data) { $('#somediv').append(data); }
Вы должны изменить заголовок перед выполнением echo $img_data;
header("Content-Type: image/jpeg"); header("Content-Length: " .sizeof($img_data));