Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Automatyczne skalowanie obrazka do wcześniej ustalonych rozmiarów
Forum PHP.pl > Forum > PHP
Ciupaska
Automatyczne skalowanie obrazka do wcześniej ustalonych rozmiarów

W jaki sposób można wyświetlić obraz, który jeśli będzie większy niż 500x500px np. 670x700 zostanie automatycznie zeskalowany do rozmiaru 500x500px questionmark.gif
Chodzi o istniejący obraz (nie wgrywany) po prostu przykładowo chcę dać możliwość umieszczania obrazków z innych stron przez użytkownika, ale żeby strona się nie rozpadała, obraz będzie skalowany, jeśli przekroczy dozwolony rozmiar.

Przykład http://forum.softmania.pl/showthread.php?t=28883 jak zrobić coś takiego? Nie koniecznie z takim efektem po kliknięciu.

Chodzi o coś co jest stosowane na forach, ktoś wrzuca obraz 1200x900px a obrazek jest zmniejszany do rozmiaru 300x180px np.
nmts
Napisałem coś takiego:

  1. <?php
  2. $maxWidth=500; $maxHeight=500;
  3. $image="obrazek.jpg";
  4. $size=getimagesize($image);
  5. while($size[0]>$maxWidth || $size[1]>$maxWidth){
  6. $size[0]=($size[0]*95)/100; // liczba 95 mówi o dokładności skalowania, im większa tym skalowanie
  7. $size[1]=($size[1]*95)/100; // jest dokładniejsze(bliżej podanych wartości), ale dłużej wykonuje pętle,
  8. }
  9. $width=$size[0];
  10. $height=$size[1];
  11. ?>


  1. <img src=".$image." height=".$height." width=".$width." />


Każdy obrazek wystarczy przez to przepuścić.
Ciupaska
Edit: Matko, ale ja jestem nie kumaty ostatnio. WIELKIE DZIĘKI exclamation.gif!!!!!!!!!!!!

Jest jeszcze mały problem...
Skrypt oparty jest o system szablonów, jeśli wstawiam kod php, wyświetla się on jako zwykłe litery:


Próbowałem najpierw wstawić php kodem
  1. <script LANGUAGE="php">
  2. W tym miejscu wstaw dowolny kod PHP


Ale również nie wiele to dało, bo nie czyta kodu php.
Jak wstawić kod php aby był widoczny w miejscu
TUTAJ DOWOLNY KOD PHP

Mógł bym najprościej zrobić ramkę, w której umieścił bym kod php ale wtedy nie czyta adresu obrazka.
Czylki kodu: {STORY_URL}


  1. <div class="aclear"></div>
  2. </div>
  3. <div class="mainpost1"><div class="posttitle"><a href="#">{STORY_TITLE}</a><br>
  4.  
  5. TUTAJ DOWOLNY KOD PHP
  6. </div>
  7. <div class="postdetails">{LANG_SUBBY} {STORY_USER_NAME} {STORY_AGO} {LANG_AGO} (via {STORY_DOMAIN})</div>
  8. <div class="postcontent">{STORY_DESC}</div>
nmts
Najlepiej będzie jeśli pogrzebiesz w pliku php, który jest odpowiedzialny za wysłanie danych do pliku szablonu. Wystarczy, że znajdziesz w nim zmienną przechowującą ścieżkę do pliku, 'dasz' tą zmienną temu kawałkowi kodu i wyślesz do szablonu wysokość i szerokość. W pliku tym powinieneś się połapać jak są wysyłane. W pliku szablonu dodasz {width} i {height} w img, i może coś zadziała.
Ciupaska
Tylko tu chodzi o kod:

  1. <?php
  2. $maxWidth=500; $maxHeight=500;
  3. $image="obrazek.jpg";
  4. $size=getimagesize($image);
  5. while($size[0]>$maxWidth || $size[1]>$maxWidth){
  6. $size[0]=($size[0]*95)/100; // liczba 95 mówi o dokładności skalowania, im większa tym skalowanie
  7. $size[1]=($size[1]*95)/100; // jest dokładniejsze(bliżej podanych wartości), ale dłużej wykonuje pętle,
  8. }
  9. $width=$size[0];
  10. $height=$size[1];
  11. ?>


Nie wiem jak go wstawić do pliku STORY.PHP
Na kod story.php możesz zerknąć na: http://pokazywarka.pl/8cdr65/
Bo w pliku STORY.HTML (plik szablonu) nie działa żaden kod php
nmts
http://pokazywarka.pl/r920ds/

Pogrubiłem, to co dodałem, zamiast "obrazek.jpg" dałem $story['story_url']. W szablonie powinno wyglądać mniej więcej tak..

  1. <img src="{STORY_URL}" height="{IMG_H}" width="{IMG_W}" />
Ciupaska
Super działa pięknie, prubowałem w identyczny sposób zrobić tak z index.php ale albo wyrzuca błąd linijki, albo kod
  1. <img src="{STORY_URL}" height="{IMG_H}" width="{IMG_W}" />
nie wyświetla obrazka, jak dodać do index.php kod który umieściłeś w Story.php? został tylko index.php, ale coś robię źle....

http://pokazywarka.pl/oyyqmv/
nmts
http://pokazywarka.pl/k0v3yo/
Nie wiem czy dobrze. Do szablonu przekazywana jest tablica więc zmienne {*} muszą inaczej wyglądać. Porównaj sobie z innymi i się dowiesz jak.
Ciupaska
Faktycznie są inne, ale wystarczyło dodać {STORIES.story_url} . Dzięki wielkie wszystko ładnie działa! snitch.gif

Ale nie pomyślałem o bardzo ważnej rzeczy, obrazku alternatywnym.

Jeśli go nie ma wyskakuje błąd linijki
Kod
Warning: getimagesize(a.png) [function.getimagesize]: failed to open stream: No such file or directory in /home/pierzch/domains/mojadomena.pl/public_html/jakasstrona.php on line 22


Zastosowałem prosty kod:
  1. function ImgError(source)
  2. {
  3. source.src = "error.gif";
  4. source.onerror = "";
  5. return true;
  6. }


I jeśli nie ma obrazka o nazwie obraz.jpg, wyświetla się error.gif
Ale nadal wyskakuje mi błąd linijki
Kod
Warning: getimagesize(a.png) [function.getimagesize]: failed to open stream: No such file or directory in /home/pierzch/domains/mojadomena.pl/public_html/jakasstrona.php on line 22


Jak się tego pozbyć?
nmts
Zastosuj file_exists(); i uruchom cały kod jeśli plik istnieje.
Ciupaska
coś robie źle, bo teraz wyświetla się error.gif nawet jeśli jest obrazek obraz.jpg sadsmiley02.gif
nmts
Nie ogarniam dokładnie ostatniego problemu. Bez sprawdzania pliku nie było error.gif gdy go być nie miało? Może w if(file_exist...) zostawić tylko getimagesize()l, a resztę poza nim, bo może coś potrzebujesz, np. story.url. Możesz pójść na łatwiznę i dodać @ przed getimagesize(); żeby schować error, jak Cie to interesuje...
Z tego co rozumiem to jeśli nie ma obrazka, to ma być widoczny error.gif? Czyli jeśli nie ma obrazka, to znaczy, że story_url nic nie przechowuje? To daj jej adres adres do error.gif, jeśli jest pusta(zwykły warunek), i js nie będzie potrzebny..
Ciupaska
Kombinowałem jeszcze ale w końcu zastosowałem @ przed getimagesize();
Teraz jest ok. Jeszcze raz dzięki wielkie!
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.