Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]automatyczne zmniejszanie zdjęcia o max szerokości lub wysokości.
Forum PHP.pl > Forum > Przedszkole
casperii
Witam, mam następujący problem, chciałbym osiągnąć zamierzony cel , że zmniejszając zdjęcie osiągam max. szerokość, ale wysokość przekracza tą która może być dozwolona.

Czyli reasumując, każde zdjęcie jest różne mniejsza szerokość , wyższa wysokość, teraz zmniejszając zdjęcie ma być nie więcej niż 240 szerokości i 330 wysokości.

Mój kod:

  1. $szerokosc=240;
  2. $wysokosc=330;
  3. $duzy = imagecreatefrompng($imgpath);
  4.  
  5. //tworzenie miniaturki
  6. $duzyX=ImageSX($duzy);
  7. $duzyY=ImageSY($duzy);
  8.  
  9.  
  10. $maly=imagecreatetruecolor($szerokosc,($szerokosc/$duzyX)*$duzyY);
  11. $maly2=imagecreatetruecolor($wysokosc,($wysokosc/$duzyY)*$duzyX);
  12.  
  13. $malyY=ImageSY($maly2);
  14. $malyX=ImageSX($maly);


Tylko że na chwilę obecną wygląda to absurdalnie, że szerokość jest ok,a wysokość gdzie powinna być mniejsza to mi ją poszerza do 330.
Pyton_000
Twój problem to Aspect Ratio. Tu masz przykład. Musisz go dostosować sobie.
  1. $size = getimagesize($imgpath);
  2. $ratio = $size[0]/$size[1]; // width/height
  3. if( $ratio > 1) {
  4. $width = 240;
  5. $height = 330/$ratio;
  6. }
  7. else {
  8. $width = 240*$ratio;
  9. $height = 330;
  10. }
casperii
Dzięki za kod ale nie wiem czemu mam cały czas szerokość 0px
Pyton_000
Ja też nie wiem.
casperii
@Pyton_000 podany przez Ciebie skrypt jest trochę wadliwy.
Ogólnie ma zamierzony cel max 240 szer. i max 330 wysokości ale nie jest to symetryczne.
Przykład.

Mamy zdjęcie 319 x 627 px. Teraz chcę je osadzić w kwadrat 240 x 330 px, czyli moje zdjęcie powinno nosić rozmiar 167 x 330 px. W twoim skrypcie było by to 131 x 330 px. Niby 6 px różnicy ale sprawia wrażenie rozciągnięcia.

Kolejny przykład zdjęcie 850 x 850 px. Rozmiar powinien być 240 x 240 px. w twoim przykładzie by wyszło 240 x 330 px.

Powiesz mi jak zrobić tak by osiągnąć cel który mnie interesuje ?


Ok zrobiłem w ten sposób. Jeżeli mam jakiś błąd to proszę mnie poprawić:

  1. $szerokosc=240;
  2. $wysokosc=330;
  3.  
  4. $duzy = imagecreatefrompng($imgpath);
  5. $duzyX=ImageSX($duzy);
  6. $duzyY=ImageSY($duzy);
  7.  
  8. if ($duzyY > $duzyX){
  9. $w = $duzyX * $wysokosc / $duzyY;
  10. $h = $wysokosc;
  11. }else{
  12. $h = $duzyY * $szerokosc / $duzyX;
  13. $w = $szerokosc;
  14. }
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.