Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zachowanie skali obrazka w miniaturze
Forum PHP.pl > Forum > PHP
pr0woKator
Witajcie!

Mam mały problem, mianowicie staram się ogarnąć jedną rzeczy przy ulodawowaniu obrazków.
Chodzi mi o to żeby z uploadowanego obrazka zrobić miniaturę o wymiarach MAKSYMALNYCH 155 x 155 px.
Z tym że te obrazki uploadowane nie są kwadratami, mogą mieć różne wymiary np 1004 x 531px.
Nie bardzo wiem jak się do tego zabrać żeby mi się ładnie skala zachowywała.
Może wy mi coś Podpowiecie. Pozdro.
jeremiash
sprawdź która krawędź jest dłuższa i wówczas skaluj do niej
Kofel
Taki kod na szybko:
  1. <?php
  2.  
  3. function calculateThumbnailDimensions( $dim, $max )
  4. {
  5. $more = max( $dim );
  6. $more_max = $max[ end( array_keys($dim, $more) ) ];
  7.  
  8. $scale = $more_max / $more;
  9.  
  10. return ($more_max == $max[0]) ? array($max[0], (int)($dim[1] * $scale)) : array((int)($dim[0] * $scale), $max[1]);
  11. }
  12.  
  13. echo implode('x', calculateThumbnailDimensions( array(1004, 531), array( 155, 155 ) ) ) . PHP_EOL;


"Bardzo" nie testowany. wink.gif

Dostajesz funkcję calculateThumbnailDimensions( array( $width, $height ), array( $max_width, $max_height ) ), i pięknie jej używasz tongue.gif
Mayka
Możesz sie pobawić tym skryptem, bardzo fajny i ma sporo opcji jeśli chodzi o przeskalowywanie http://phpthumb.gxdlabs.com/
jeremiash
  1. <?php
  2.  
  3. function skaluj($adres, $szerokosc)
  4. {
  5.  
  6. // funkcja obsługuje również adresy internetowe jak http i ftp
  7. $pobierz = @file_get_contents($adres);
  8. $src = @imagecreatefromstring($pobierz);
  9. if (!$pobierz or !$src ) return false;
  10. unset($pobierz);
  11.  
  12. $pic_width = imagesx($src);
  13. $pic_height = imagesy($src);
  14. if (($szerokosc == $pic_width) or ($szerokosc == null)) return $src;
  15. $mini_width = $szerokosc;
  16. $mini_height = round($szerokosc * ($pic_height/$pic_width));
  17. $mini = imagecreatetruecolor($mini_width, $mini_height);
  18. imagecopyresampled($mini, $src, 0, 0, 0, 0, $mini_width, $mini_height, $pic_width, $pic_height);
  19. return $mini;
  20. imagedestroy($mini);
  21. }


ten używam sam, działa i bez błędów smile.gif
Kofel
Cytat(jeremiash @ 14.12.2012, 16:38:06 ) *
ten używam sam, działa i bez błędów smile.gif

Twoja metoda uwzględnia tylko szerokość.
viking
http://php.net/manual/en/imagick.resizeimage.php + bestfit + prosty warunek sprawdzający czy rozmiar podany nie jest większy niż żądany (w zależności od wersji imagick).
jeremiash
Cytat(Kofel @ 14.12.2012, 15:41:33 ) *
Twoja metoda uwzględnia tylko szerokość.

tak... więc jak wcześniej napisałem , trzeba sprwdzić która krawędź dłuższa i przerobić w biegu smile.gif
Kofel
Czyli o tak:
  1. function calculateThumbnailDimensions( $dim, $max )
  2. {
  3. if( $dim[0] > $dim[1] )
  4. {
  5. $ratio = $max[0] / $dim[0];
  6. }
  7. else
  8. {
  9. $ratio = $max[1] / $dim[1];
  10. }
  11.  
  12. return array( (int)($dim[0] * $ratio), (int)($dim[1] * $ratio) );
  13. }
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.