Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Ucinanie fragmentu zdjęć
Forum PHP.pl > Forum > Przedszkole
Tomplus
witam,
mam
mały problem i nie mogę sobie z nim poradzić, a mianowicie chciałem z obrazka o rozmiarach 450x450 uciąć jego środkową część do 350x350, ale jakoś nie mogę tego zrobić.

  1. <?php
  2. $zdjecie = "foto.jpg"; //450x450
  3. //$data = getimagesize($zdjecie);
  4. $zdjecie = imagecreatefromjpeg($zdjecie);
  5. $zdjecie = imagefilledrectangle ($zdjecie,0,100,450,350,imagecolorallocate($zdjecie,255,255,255));
  6. echo "<img src='{$zdjecie}'>";
  7. ?>


po tym skrypcie mam pustkę czyli nic się nie wyświetla.
kipero
Na początek to:
  1. <?php
  2. echo "<img src='{$zdjecie}'>";
  3. ?>

zamień na:
  1. <?php
  2. header('Content-type: image/jpeg');
  3. imagejpeg($zdjecie);
  4. ?>


Teraz działa?
golaod
Po co powielać ten sam błąd 5 tysięcy razy ?
http://pl.php.net/manual/pl/function.imagejpeg.php
Tomplus
@kipero
ale wtedy mi wyświetli jako grafikę cały plik, a ja chce aby został umieszczony w HTMLu czyli <img/>

W manualu działa tak że zamiast wyśietlić mi WWW z treścią i obrazkiem, kreuje mi się sam obrazek - nawet nie obrazek, bo żadna tresc mi sie nie wyswietla, nawet wczesniejsze echo.

Potrzebuje wsadzić w <img/> ucięte zdjęcie.
Trojan
w php tworzysz obrazek tylko, wyświetla ci się on jako jpeg. Na swojej stronie dajesz po prostu link do niego w znaczniku <img>

<img src="http://jakisadres.pl/obrazek.php">
Tomplus
zgadza się, mogę tak zrobić, tylko mnie chodzi żeby wyswietlić obrazek w tym samym pliku skryptu


  1. //HTML
  2. <?php
  3. //instrukcja...
  4. ?>
  5. //HTML
  6. <?php
  7. //instrukacja ucinajaca obrazek
  8. ?>
  9. //echo <img>
  10. //dalszy ciag HTML
Trojan
Jeżeli zmienisz wartość header na header('Content-type: image/jpeg'); to nie możesz tam wyświetlić już innych informacji za pomocą echo.

Powiedz czemu nie możesz zrobić oddzielnego pliku dla obrazka i wstawiać go do HTML-a questionmark.gif może coś takiego questionmark.gif

PLIK obrazek.php
  1. <?php
  2. $zdjecie = $_GET['zdjecie']; //450x450
  3. //$data = getimagesize($zdjecie);
  4. $zdjecie = imagecreatefromjpeg($zdjecie);
  5. $zdjecie = imagefilledrectangle ($zdjecie,0,100,450,350,imagecolorallocate($zdjecie,255,255,255));
  6. header('Content-type: image/jpeg');
  7. imagejpeg($zdjecie);
  8. ?>


twój plik główny
  1. //HTML
  2. <?php
  3. //instrukcja...
  4. ?>
  5. //HTML
  6. //instrukacja ucinajaca obrazek
  7. <img src="http://jakisadres.pl/obrazek.php?zdjecie=foto.jpg">
  8. //echo <img>
  9. //dalszy ciag HTML
Tomplus
wiem że nie mogę wyświetlić innych danych stosując header().

Co do tego dlaczego nie mogę tworzyć oddzielnego pliku na funkcję ucinającą grafikę, to mam swoje powody i dlatego zwracam sie z pomocą tutaj na forum, aby ten problem rozwiązać.
Trojan
żeby problem rozwiązać trzeba wiedzieć w czym problem dry.gif Od razu mówię w jednym pliku tego nie zrobisz. Zobacz jeszcze mój poprzedni post może chodzi ci o dodawanie parametrów do obrazka questionmark.gif
Tomplus
zasada działania skryptu jest prosta:
$zdjecie -> uciecie do rozmiaru 350x350 -> wyswietlenie w HTML w tagu <img/>
nospor
Cytat
Od razu mówię w jednym pliku tego nie zrobisz.
Ale co ty ze tak powiem "bredzisz" ?

Zrobi, tylko robi to źle. Tomplus umiesz utworzyc plik graficzny w php i go zapisac na dysku? Jak nie to sie naucz. Twoj poczatkowy kod jest temu bliski ale jeszcz brakuje chociazby imagejpeg().

Dodatkowo tamten twoj kod nie ma prawa dzialac, bo nadpisywales zmienna $zdjecie swoimi kodami z gd.
skoto $zdjecie = 'twoj plik.jpg' to nie mozesz potem tej zmiennej nadpisywac, bo przeciez potem wkladasz ją jako źródlo do <img>.
Do operacji na pliku tworz inne zmienne
Tomplus
@nospor
tworzyć potrafiłem, wyświetlać w formie jak podał Trojan również, ale zapisywać, jakoś uleciało ta wiedza, tak samo jak następujący problem.



Stworzyłem funkcje która ma w swoim załozeniu ucinać i zmniejszać grafikę.

  1. <?php
  2. function foto ($od, $do, $rozmiar, $jakosc)
  3. {
  4.  
  5. $pic = @imagecreatefromjpeg($od);
  6. if ($pic)
  7. {
  8. $pic2 = @imagecreatetruecolor ($rozmiar, $rozmiar);
  9. $w1 = imagesx($pic);
  10. $h1 = imagesy($pic);
  11. $w2 = $rozmiar;
  12. $h2 = $w2 * $h1 / $w1;
  13. imagecopyresized($pic2, $pic, 0, 0, 0, ($h1/2)-($w1/2), $w2, $h2, $w1, $h1);
  14. imagefilledrectangle ($pic2,0,0,$w1,($w2*100/$w1),imagecolorallocate($pic2,205,205,205));
  15. imagefilledrectangle ($pic2,0,$h2-($w2*100/$w1),$w1,$h1,imagecolorallocate($pic2,205,205,205));
  16. ImageJPEG ($pic2, $do, $jakosc);
  17. }
  18.  
  19. }
  20. $foto1 = "foto1.jpg";
  21. $zdjecie = "foto.jpg";
  22. foto($zdjecie,$foto1,450,100);
  23. echo "<img src='foto1.jpg'/>"; //dziala
  24. ?>


Problem jest że nie ucina tylko zamazuje fragment obrazku, a potrzebuje ucięty, czyli chce się pozbyć nie potrzebnego fragmentu obrazu.
Jak mam to zrobić ?
Jaki błąd popełniam w funkcji ?

Proszę o pomoc w tej kwestii.
dadexix
taki sposob jest nie odpowiedni i nie wykonywalny... a w ten sposob pokazujesz obrazek foto1.jpg ktory masz na dysku..
Tomplus
wg. mnie i mojego doświadczenia z tym skryptem, pokazuje obrazek który został stworzony (zapisany na dysk) przez funkcję foto(), więc jest wykonalny - tylko kwestia w tym dlaczego lub jak uciąć.

@dadexix
jeżeli znasz sposób lepszy to przedstaw go.

okej, temat zamykamy
w sumie doradzić trzebało mi z jedną rzeczą do tego skryptu:
czyli zastosować funkcję imagecopyresampled();

funkcja dziala podobnie jak imagecopyresized(), tylko że w obrębie stworzonego obrazka możemy przesuwać obrazkiem który wczytaliśmy. Przesunięty obrazek - zapisać i gotowe.


Największą pomoc wniósł do mojego problemu nospor i jemu dziękuje szczególnie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.