Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] miniaturki o okreslonej szerokości bez zniekształceń
Forum PHP.pl > Forum > Przedszkole
baśka
cześć. jestem tu nowa (czyt. raczej amatorka :-) ) i mam problem:

otóż mam skrypt który tworzy mi miniaturki. jak zrobić ,żeby skrypt ten zamieniał na miniaturki pliki gif, jpeg, jpg, png i żeby szerokość zdjęcia miała 250 pikseli ? oraz żebym mogła wybrać do którego pliku dorobić miniaturkę?questionmark.gif

  1. <?php
  2. $img = imagecreatefromjpeg("foto.jpg");
  3. $width = imagesx($img);
  4. $height = imagesy($img);
  5. $width_mini = $width * 0.1;
  6. $height_mini = $height * 0.1;
  7. $img_mini = imagecreatetruecolor($width_mini, $height_mini);
  8. imagecopyresampled($img_mini, $img, 0, 0, 0, 0, $width_mini , $height_mini, $width , $height);
  9. if(imagejpeg($img_mini, "foto_mini.jpg", 80))
  10. print 'ok';
  11. else
  12. print'nie udało się';
  13. imagedestroy($img);
  14. imagedestroy($img_mini);
  15. ?>



jak na razie najwazniejsze jest dla mnie zeby zmiejszało do ustalonej szerokosci a wiecej to juz jako bonus tongue.gif
Amorph
  1. <?php
  2. $width_mini = 250;
  3. ?>
baśka
Cytat(Amorph @ 19.01.2007, 14:22:23 ) *
  1. <?php
  2. $width_mini = 250;
  3. ?>


to powoduje Parse error.
Amorph
Skrypt sprawdzilem...
Dziala na 100%
smile.gif
baśka
Cytat(Amorph @ 19.01.2007, 14:40:19 ) *
Skrypt sprawdzilem...
Dziala na 100%
smile.gif

podstawiłam to co mi napisałes ale zdjecię się rozciągneło i zdeformowało. Chodziło mi zeby symetrycznie zmiejszyło mi tez wysokość.
maryaan
dosyc niedawno byl temat o zmniejszaniu fotek, polecam poszukac
baśka
Cytat(maryaan @ 19.01.2007, 14:48:47 ) *
dosyc niedawno byl temat o zmniejszaniu fotek, polecam poszukac


no ale tam są bardzo skomplikowane kody a ja to muszę później wytłumaczyć koleżance :/
Amorph
Skoro masz szerokosc i wysokosc zdjecia oraz szerokosc po przeskalowaniu(250);
wylicz sobie stosunek oryginalnej szerokosci do zmiejszonej(250)
i o ten wlasnie wynik pomnoz wysokosc poczatkowa.
Zamiast:
  1. <?php
  2. $height_mini = $height * $wynikObliczen;
  3. ?>
baśka
Cytat(Amorph @ 19.01.2007, 14:52:34 ) *
Skoro masz szerokosc i wysokosc zdjecia oraz szerokosc po przeskalowaniu(250);
wylicz sobie stosunek oryginalnej szerokosci do zmiejszonej(250)
i o ten wlasnie wynik pomnoz wysokosc poczatkowa.
Zamiast:
  1. <?php
  2. $height_mini = $height * $wynikObliczen;
  3. ?>


z moich obliczen wynika to:

  1. <?php
  2. $wynikObliczen = ($width_mini * $height)/$width;
  3. ?>

jednak pokazuje:
Fatal error: Allowed memory size of 8388608 bytes exhausted at (null):0 (tried to allocate 1000 bytes) in


biggrin.gif:D:D z matematyki jestem genialna ale nie aż tak... Czy mogłbyś mi to napisać skoro nie stwarzałoby to dla Ciebie problemu. bardzo prosze :*
Amorph
  1. <?php
  2. $width = imagesx($img);
  3. $height = imagesy($img);
  4. $width_mini = 250;
  5. $wynikObliczen = round(($height*$width_mini)/$width)/1000;
  6. $height_mini = $height * $wynikObliczen;
  7. ?>


A co do twoich obliczen. Wez przykladowo obraz 1000x1000
250*1000/1000=250
i teraz:
$height_mini = $height * $wynikObliczen;
$height_mini = 1000 * 250;
Niezle.
baśka
Cytat(Amorph @ 19.01.2007, 15:17:41 ) *
  1. <?php
  2. $width = imagesx($img);
  3. $height = imagesy($img);
  4. $width_mini = 250;
  5. $wynikObliczen = round(($height*$width_mini)/$width)/1000;
  6. $height_mini = $height * $wynikObliczen;
  7. ?>


A co do twoich obliczen. Wez przykladowo obraz 1000x1000
250*1000/1000=250
i teraz:
$height_mini = $height * $wynikObliczen;
$height_mini = 1000 * 250;
Niezle.



a teraz po Twojej poprawce obrazek jest zniekształcony. W orginale jest wyzszy niz szerszy a teraz odwrotnie. widze ,że to jest ciężka sprawa.

gdy wstawiłam 500 zamiast 1000 to wyświetla mi chyba dobrze. to było drogą prób i błędów. a moze mi ktos powiedziec dlaczego akurat teraz jest dobrze questionmark.gif i jak zrobić to samo dla innych plików graficznych?? bo to chyba tylko dla jpga tak questionmark.gif


mój cały kod:
  1. <?php
  2. $img = imagecreatefromjpeg("aaa.jpg");
  3. $width = imagesx($img);
  4. $height = imagesy($img);
  5. $width_mini = 250;
  6. $wynikObliczen = round(($height*$width_mini)/$width)/500;
  7. $height_mini = $height * $wynikObliczen;
  8. $img_mini = imagecreatetruecolor($width_mini, $height_mini);
  9. imagecopyresampled($img_mini, $img, 0, 0, 0, 0, $width_mini , $height_mini, $width , $height);
  10. $mini_img = "aaa_mini.jpg";
  11. if(imagejpeg($img_mini, $mini_img, 98))
  12. {
  13. print 'zrobiono miniaturke';
  14. }
  15. else
  16. {print'nie udało się';}
  17. imagedestroy($img);
  18. imagedestroy($img_mini);
  19. ?>
[b]
Amorph
Ehh...
Zapracowany jestem i na szybko pisze...
Poprawiony:
  1. <?php
  2. $wynikObliczen = round(($height*$width_mini)/$width);
  3. $height_mini = $wynikObliczen;
  4. ?>
maryaan
w skrocie to wyglada tak:
masz duze zdjecie
masz max wymiary miniaturki (zalozmy 150x150)
obliczasz stosunek szerowkosci do wysokosci (duzego zdjecia) = es
teraz jesli wyjdzie mniejszy od jednosci to znaczy ze wysokosc miniatury bedzie rowna 150 a szerokosc 150*es
jesli jednak es jest wieksze od 1 to znaczy ze obrazek jest szerszy niz wyzszy wiec miniatura bedzie miala szerokosc 150 a wysokosc 150/es

teraz sobie zakoduj albo poszukaj bo na pewno w ten sposob sa pisane skrypty zeby wykrywac ktory bok zdjecia jest dluzszy, mozna by to rozbudowac o miniature niekwadratowa ale jak to masz komus tlumaczyc to lepiej przy kwadracie zostac
Amorph
@maryaan
jesli chcesz nabijac posty do daruj sobie taka pomoc
przeczytaj, ew. przetestuj co bylo wyzej.

Matematyka:
800 250
--- = ----
600 x

800x=250*600\:800
x=187,5
I masz wys obrazka... a nie zgadywanie czy es wieksze od 1 czy mniejsze.
baśka
napotkałam na kolejny mały problem:

mam w zmiennej $link ścieżkę do pliku np. obrazki/obrazek.jpg

co zrobić zeby dodało na koniec nazwy pliku _mini questionmark.gif czyli obrazki/obrazek_mini.jpg


to mi dodaje ale dopiero po rozszerzeniu czyli obrazki/obrazek.jpg_mini sadsmiley02.gif sadsmiley02.gif sadsmiley02.gif
  1. <?php
  2. $mini_img = "obrazek/".$nazwa."_mini";
  3. ?>


problem rozwiązany: dodałam mini_ przed nazwą biggrin.gif

a wracajac do tematu: czy można dodawać także pliki graficzne z innym rozszerzeniem?questionmark.gif?
maryaan
Cytat(Amorph @ 19.01.2007, 15:52:06 ) *
a nie zgadywanie czy es wieksze od 1 czy mniejsze.
if($szerokosc/$wysokosc > 1) nazywasz zgadywaniem? lol Twoj matematyczny sposob jest super, pod warunkiem ze kolezanka nie uzyje tych miniaturek do zrobienia galerii, bo np przeskalowane Twoim sposobem zdjecie 500x1000 pieknie jej ta gaerie rozwali
Amorph
Nie przesadzaj juz...
Sproboj poszukac smile.gif
  1. <?php
  2. $plik="zdjecie.jpg";
  3. $data=explode('.',$plik);
  4. $nowy_plik=$data[0]."_mini.".$data[1];
  5. ?>

Ostatni raz ! smile.gif

@maryaan
Czytaj co sie pisze!!!
Skrypt mial przeskalowywac obrazki do mniejszych rozmiarow z ZACHOWANIEM PROPORCJI.
Nie ma innej proporcji
500x1000 da 250x500. stosunek 1:2 w obydwu przypadkach.
maryaan
umiejetnosc czytania ze zrozumieniem to raczej Tobie by sie przydala... czy 125x250 juz nie jest proporcja 1:2?

wracajac do tematu
> oraz żebym mogła wybrać do którego pliku dorobić miniaturkę?questionmark.gif

pakujesz calosc kodu do funkcji np miniatura($costam) gdzie argumentem bedize Twoje wybrane zdjecie. Teraz w tresci zamiast nazwy pliku ze zdjeciem uzywasz zmiennej $costam i to w zasadzie wszystko. Miniature zdjecia ala.jpg tworzysz za pomoca miniatura('ala.jpg'), zdjecia puszkaSardynek.jpg - miniatura('puszkaSardynek.jpg') itd
Amorph
Cytat
cześć. jestem tu nowa (czyt. raczej amatorka :-) ) i mam problem:

otóż mam skrypt który tworzy mi miniaturki. jak zrobić ,żeby skrypt ten zamieniał na miniaturki pliki gif, jpeg, jpg, png i żeby szerokość zdjęcia miała 250 pikseli ? oraz żebym mogła wybrać do którego pliku dorobić miniaturkę?questionmark.gif

obraz okresla wymiar: szerokoscxwysokosc.
125x250... gdzie u ciebie szerokosc ma 250 questionmark.gif?

Jak dla mnie EoT
baśka
Nie drapcie sie chłopcy!!!

a mam ostatnie pytanie"

mam nadzieje ze nie marudze za bardzo . A co bedzie w przypadku kiedy zdjecie bedzie mniejsze niz te 250pikseli questionmark.gif to mi chyba rozszerzy... jak zrobic zeby mi nie rozszerzało gdy zdjecie ma szerokosc mniejsza niz 250 pikseli questionmark.gif
Amorph
No nie.... podstawy, podstaw.... korzystaj z wyszukiwarki bo...
to dobry nawyk....
bo nikt nie lubi leni...
  1. <?php
  2. if($width >250)
  3. {
  4. tu procedura zamiany rozmiaru...
  5. }
  6. ?>
baśka
Cytat(Amorph @ 19.01.2007, 18:43:41 ) *
No nie.... podstawy, podstaw.... korzystaj z wyszukiwarki bo...
to dobry nawyk....
bo nikt nie lubi leni...
  1. <?php
  2. if($width >250)
  3. {
  4. tu procedura zamiany rozmiaru...
  5. }
  6. ?>


nie zdawałam sobie sprawy ,że to jest takie proste ;-)

ponawiam pytanie: jak zrobić miniaturki dla innych plików graficznych niz jpg czyli np. gif albo png questionmark.gifquestionmark.gif

czy są jakieś odpowiedniki tych polecen dla gifa i pnga questionmark.gif :
imagecreatefromjpeg
imagejpeg
maryaan
tak sa, manual nie gryzie...
baśka
ok przepraszam ale tego juz nie znalazłam w manualu:

1. jak zrobic warunek ze jezeli to jest jpg to robi cos a jesli nie to cos ale nie za pomoca exif_imagetype bo to mi ine działa ale za pomocą mime_content_type questionmark.gifquestionmark.gif albo po prostu zeby działało

rozne kombinacje próbuje:
  1. <?php
  2. if(mime_content_type($mini_img) == ($_FILES['plik']['type']))
  3. ?>

  1. <?php
  2. mime_content_type($mini_img) == "image/jpeg")
  3. ?>

  1. <?php
  2. exif_imagetype($source) == IMAGETYPE_JPEG
  3. ?>


i nic wychodzi Call to undefined function: mime_content_type() in

warunek z Temat: Miniaturka JPEG GIF PNG tez mi nie działa sadsmiley02.gif sadsmiley02.gif sadsmiley02.gif


Ps.
  1. <?php
  2. $sprawdz_rozszerzenie=$naz;
  3. $rozszerzenie=explode('.',$sprawdz_rozszerzenie);
  4. $nowy_plik=$rozszerzenie[0]."_mini.".$rozszerzenie[1];
  5.  
  6.  if($rozszerzenie[1] == "jpg" or $rozszerzenie[1] == "jpeg")
  7. {
  8.  $img = imagecreatefromjpeg($link);
  9. }
  10. elseif($rozszerzenie[1] == "gif")
  11. {
  12.  $img = imagecreatefromgif($link);
  13. }
  14. elseif($rozszerzenie[1] == "png")
  15. {
  16.  $img = imagecreatefrompng($link);
  17. }
  18. else
  19. {
  20.  print 'zly format';
  21. }
  22. ?>


wymysliłam takie cos ... ale dlaczego nie działają mi powyższe funkcje questionmark.gif bo powiedzmy gdyby w nazwie były dwie kropki to juz chyba nie zadziała poprawnie .

EDIT: cos mi sie chrzani z gifami sadsmiley02.gif
Kisiol_Ent
No tam na poczatek dajesz IF szerokosc < 250 && wysokosc < 250 THEN pomin ;p
(tak na logike myselniowa)

Ej a tam sie tak klucislicie jak te miniaturki beda wieksze... co to to to...

a jak beda równe? tzn 250x250? o.0


------------


W = szerokosc duzego obrazka
H = szerokosc malego obrazka

new_w - szerokosc minaturki
new_h - wysokosc miniaturki


IF W = 250 & H = 250 --> nie zmieniaj nic... (czyli new_w = W...)

IF W < 250 & H < 250 --> nie zmieniaj nic...

IF (W > H) --> new_w = 250, new_h = H / (W/250)

IF (H > W) --> new_h = 250, new_w = W / (H/250)



Tak nie w php bo nieumiem :// ale kiedys sie naucze :/

Chcialme ltkyo pomysl zapodac :/

EDIT: baska zmienilas post i teraz mi glupio wyszlo wszystko :/
baśka
dodatkowo: nie wiem dlaczego w Internet explorer nie działa taka składnia :

  1. <?php
  2. if($_FILES[plik][type] == "image/jpeg")
  3. ?>


a w mozilli działa :/


wiec: jaki jest najlepszy sposób zeby poznać typ pliku questionmark.gifquestionmark.gifquestionmark.gif zakładając ze przykłady z zeszłych postów nie działaja sadsmiley02.gif
Amorph
Jeśli nazwy nie będą jakieś "zdziwaczałe" np.
to.jest.nazwa.mojego.pliku.graficznego.jpg
to proponuje explode() i odczytać rozszerzenie, a potem:
Już Podawano Tobie.
baśka
Cytat(Amorph @ 20.01.2007, 16:11:59 ) *
Jeśli nazwy nie będą jakieś "zdziwaczałe" np.
to.jest.nazwa.mojego.pliku.graficznego.jpg
to proponuje explode() i odczytać rozszerzenie, a potem:
Już Podawano Tobie.


a jak wyznaczyc ostatnią wartość po kropce questionmark.gifquestionmark.gif w przypadku kiedy kropek bedzie wiecej.
szukałam w google i nie mogłas znalezc. w manualu tez nie było
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.