Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] imagewebp() - jak wysłać obrazek w odpowiedzi ajaxa
siutek
post
Post #1





Grupa: Zarejestrowani
Postów: 173
Pomógł: 1
Dołączył: 26.10.2005
Skąd: Toruń

Ostrzeżenie: (0%)
-----


Cześć, mam zagwozdkę...

Mam na serwerze różne rodzaje plików graficznych: niektóre JPG inne TIFF.

Z formularza na stronie wysyłam ajaxa z danymi do umieszczenia na tych grafikach. Chciałbym te grafiki przerobione uzyskać w odpowiedzi ajaxa, tak bym mógł go wstawić w tag <img src=''> o konkretnym ID.
Wymyśliłem sobie, że aby maksymalnie "odciążyć" łącze użytkownika, będę wysyłał grafiki wynikowe w formacie webp. No i teraz pojawia się pytanie:

- jak przypisać wynik działania funkcji imagewebp() do zmiennej? Tak bym mógł właśnie ten obraz wysłać ajaxem do przeglądarki?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
SmokAnalog
post
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Jeśli ten obrazek ma być użyty tylko raz, to może po prostu zwróć Ajaxem zasób obrazka? Wtedy wystarczy:

  1. header('Content-Type: image/webp');
  2.  
  3. // tutaj tworzysz swój obrazek
  4.  
  5. imagewebp($image);


Ustawianie Content-Type nie jest niezbędne w Twoim przypadku (zadziała bez tego), ale jednak wypada podać (IMG:style_emoticons/default/smile.gif)

Potem na tej podstawie konwertujesz do base64 i przypisujesz src="data:image/webp;base64,TwójBase64"

EDIT

Z ciekawości sprawdziłem czy działa łatwo z Fetch API i na szczęście tak (IMG:style_emoticons/default/smile.gif) Zobacz ten przykład:

1. Masz jakiś obrazek w pliku obrazek.jpg. Ten obrazek będziemy przekształcać i zapisywać jako webp.

2. Plik obrazek.php, gdzie przekształcasz obrazek i go "wypluwasz":
  1. <?php
  2.  
  3. header('Content-Type: image/webp');
  4.  
  5. $image = imagecreatefromjpeg('obrazek.jpg');
  6.  
  7. // tutaj możesz się bawić obrazkiem
  8.  
  9. imagewebp($image);


3. I przykładowy HTML, gdzie to się dzieje:
  1. <button>Czary mary</button>
  2. <img>
  3. document.querySelector('button').addEventListener('click', async () => {
  4. const response = await fetch('obrazek.php');
  5. const resource = await response.blob();
  6.  
  7. document.images[0].src = URL.createObjectURL(resource);
  8. });


Działa pięknie (IMG:style_emoticons/default/smile.gif)

Dla kompletności mojej odpowiedzi jeszcze dodam, że oczywiście możesz ustawić src obrazka bezpośrednio na plik .php:

  1. <img src="obrazek.php">


Jeżeli plik PHP wypluwa obrazek tak jak nasz obrazek.php, to <img> sobie poradzi - nawet bez Content-Type lub z nieprawidłowym Content-Type.

Jeżeli musisz wysłać do tego pliku dużo danych lub np. wysyłasz mu obrazek źródłowy, to Fetch API lub Ajax będą na miejscu. Ale jeśli chodzi o prostą operację np. pokazania TIFF jako webp, ustawienie src na plik PHP może wystarczyć. Zakładając, że te obrazki TIFF są na serwerze i tylko mówisz skryptowi który obrazek ma wyświetlić jako webp, możesz np. podawać ten obrazek źródłowy jako parametr w zwykłym GET:

[JAVASCRIPT] pobierz, plaintext
  1. const sourceFileName = document.getElementById('my-input').value;
  2.  
  3. document.getElementById('my-image').src = 'http://foo.test/obrazek.php?source=' + encodeURIComponent(sourceFileName);
[JAVASCRIPT] pobierz, plaintext


I to wystarczy.

Ten post edytował SmokAnalog 3.11.2020, 22:50:56
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 19:44