2011-08-05 13 views
9

Powiedzmy mam kod, który wygląda mniej więcej tak:Wyświetlanie obrazu utworzonego z imagecreatefromstring

<?PHP 

// 
//... stuff here 
// 

$im = imagecreatefromstring($imageData); 

echo "<img src=" . /* what goes here? */ . "alt=\"the image\" />"; 


// 
// more stuff here 
// 
?> 

Co mogę zastąpić/*, co się dzieje tutaj? */w jaki sposób zostaną wyświetlone moje dane obrazu?

Dziękuję.

Odpowiedz

10

Co mam zastąpić/* co tu jest? */w jaki sposób zostaną wyświetlone moje dane obrazu?

Podświetlona lokalizacja to tak zwany atrybut src z img HTML-tagDocs. Wartość to tak zwana URIDocs.

W twoim przypadku chcesz, aby identyfikator URI wskazywał dane zdjęcie. Nie określono, który typ obrazu powinien być wyprowadzany jako, więc założę, że jest to obraz PNG w poniższym przykładzie.

Konieczne jest teraz przekształcenie danych obrazu w URI. Najbardziej prosta URI aby utworzyć z danych obrazu jest tzw data: URIWikipedia:

<?PHP 

// 
//... stuff here 
// 

$im = imagecreatefromstring($imageData); 

ob_start(); 
imagepng($img); 
$png = ob_get_clean(); 
$uri = "data:image/png;base64," . base64_encode($png); 

echo "<img src=" . $uri /* URI goes here */ . "alt=\"the image\" />"; 

// 
// more stuff here 
// 
?> 

Nawet ta jest najbardziej prosty sposób do przodu, to nie zawsze jest zalecane, aby to zrobić, ponieważ dane obrazu zostaną zwrócone z HTML do przeglądarki. Jeśli obraz jest duży, jest to zwykle uważane za narzut.

Zamiast korzystać z identyfikatora URI data: można umieścić tam również dowolny inny identyfikator URI, na przykład identyfikator URI HTTP, który wskazuje skrypt PHP na serwerze, który zwraca obraz. Taki skrypt może być bardzo prosty:

<?php 
$img = imagecreatefromstring($string); 
header('Content-type: image/png'); 
imagepng($img); 

Jest to porównywalne z tym, co Marc B suggested, see his answer as well.

+0

Dziękujemy! Wymagało to buforowania wyjściowego; Chciałbym dać ci +5! – veeTrain

0

Najpierw należy zapisać zasób w pliku lub wypisać go za pomocą czegoś takiego jak imagepng() w osobnym żądaniu.

Aby uzyskać więcej informacji, zobacz dokumentację imagecreatefromstring().

Jeśli chcesz użyć Data URI scheme, można spróbować to zamiast:

<?php 

// If your image is binary data. use `base64_encode($imageData)`. 
$imageData = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl' 
      . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr' 
      . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r' 
      . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg=='; 

echo '<img src="data:image/png;base64,'. $imageData .'" />'; 
0

myślę, że można zrobić coś takiego ...

$src = "data:image/gif;base64," . $imageData ; 
echo "<img src=\"$src\" alt=\"the image\" />"; 
2
<?php 

$img = imagecreatefromstring($string); 

header('Content-type: image/jpeg'); 
imagejpeg($img); 

powinno być wszystko, co potrzeba. Robiąc to za pomocą tagu graficznego takim, jaki jesteś, musisz wydrukować obraz do pliku tymczasowego i wskazać na nim znacznik obrazu (który wywołuje drugie żądanie HTTP) lub użyć data url.

Powiązane problemy