Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP]Tworzenie miniaturek z funkcją wycinania kawałka zdjęcia
Forum PHP.pl > Forum > Przedszkole
arekko
Witam,
jestem nowicjuszem PHP. Tworze strony internetowe hobbistycznie już od kilku lat jednak teraz mam większe zlecenie i nie mogę sobie poradzić z galerią zdjęć. Chciałbym aby można było wysyłać zdjęcia za pomocą PHP na serwer do jednego pliku ( z tym sobie bym poradził ) a dodane zdjęcia automatycznie ten sam skrypt przetwarzał by na miniaturki i zapisywał w osobny folderze. Chciałbym aby miniaturki tworzone były w tym stylu: PHP zmniejsza obraz o 60% w szerokości i wysokości i wycina fragment zdjęcia przykładowo 300 px na 300 px. Tak aby każda minaturka była kwadratem a tym samym formacie. I z tym mam największy problem. Ktoś pomoże jak można tego dokonać?
bialko0019
Witaj, po pierwsze kolego musisz mieć bibliotekę do zdjęć, np. GD - ona na serwerze prawie każdym jest zainstalowana, ( możesz sprawdzić za pomocą phpinfo() czy jest dostępna).

Musisz sobie ustalić kilka zmiennych, a dokładniej wielkości jaki jak szerokość obrazka, wysokość obrazka, obrazek jaki ma być wykradowany ( tez wysokosc i szerokosc ) oraz piksele w jakich chcesz je uciąć. Mając te dane, tworzysz sobie za pomocą funkcją imagecreatetruecolor(miniaturka_szer, miniaturka_wys). Oczywiście musisz również przed tem użyć podobnej funkcji - imagecreatefromjpeg(url do pliku jpg). Mając w zmiennych te rzeczy, używasz funkcji do m.in. kadrowania, czyli imagecopyresampled(). Następnie funkcją imagejpeg() możesz zapisać.

Pamiętaj, że w zależności od roszerzenia obrazka, możesz użyć innych funkcji podobnych.

Jeśli będziesz miał problem to napisz, pomogę i ułożysz taką funkcję w kilka minut ;-)

arekko
Witam, dzięki za wskazówki. Ja jestem w PHP zielony więc i tak za dużo mi to nie pomoże więc byłbym wdzięczny jakbyś pomógł mi w napisaniu takiego czegoś. Chciałbym aby jeden skrypt obsługiwał wszystkie czynności z wysłaniem zdjęcia na serwer sobie bym poradził (wysyłane do folderu grafika) i w dalszej częsci chciałbym aby php z tych zdjęc automatycznie generował minaturki w folderze (minaturki) (zmniejszenie zdjęcia o np. 60% i docięcie zdjęcia do kwadratu) Dzięki za pomoc smile.gif
trueblue
A może jesteś mniej zielony na użycie prawie gotowca? http://wideimage.sourceforge.net/
arekko
Raczej wolałbym coś co pisałem wyżej, chce żeby to było w miarę prosto napisane ale też działało smile.gif
trueblue
W jednej linijce kodu można wczytać obrazek, przeskalować, dociąć i zapisać.
Wydaje mi się, że to jest proste.
arekko
Pomógłbyś jaki to kod?
trueblue
Na głównej stronie są 2 przykłady, wystarczy przemieszać je i utworzyć jeden.

A tu resize procentowy.
http://wideimage.sourceforge.net/wp-conten...ml#methodresize
arekko
Okej dzięki, pokombinuje i napisze co mi z tego wyszło smile.gif

Uznałem że zacznę się uczyć PHP ale na razie potrzebuję coś na szybko więc znalazłem kod, który wysyła grafikę na serwer do jednego pliku tworzy miniaturkę w drugim pliku to jest wycinek z tego kodu o rozmiarach miniaturki:
case false: // zmniejszanie bezpośrednio do 180x160px
$nts = imagecreatetruecolor($config['thumbnail_width'], $config['thumbnail_height']);
imagecopyresized($nts, $ic, 0, 0, 0, 0, $config['thumbnail_width'], $config['thumbnail_height'], $is[0], $is[1]);
break;
default: // zmniejszanie z zachowaniem skali, aż do osiągnięcia co najmniej 180x160px
$width = $is[0];
$height = $is[1];
$ratio = $is[0] / $config['thumbnail_width'];
if ( $ratio > 1 )
{
$width = $config['thumbnail_width'];
$height = intval($is[1] / $ratio);
}
$ratio = $height / $config['thumbnail_height'];
if ( $ratio > 1 )
{
$width = intval($width / $ratio);
$height = $config['thumbnail_height'];
}
$nts = imagecreatetruecolor($width, $height); // utworzenie obrazka o podanych rozmiarach z czarnym tłem
imagecopyresized($nts, $ic, 0, 0, 0, 0, $width, $height, $is[0], $is[1]); break;
}
switch ( $extension ) // zapis do pliku
{
case 'gif':
imagegif($nts, $config['path_thumbnails'] . $filename);
break;
case 'png':
imagepng($nts, $config['path_thumbnails'] . $filename);
break;
default:
imagejpeg($nts, $config['path_thumbnails'] . $filename);
break;
}
imagedestroy($nts); // zniszczenie obrazka
return $config['path_thumbnails'] . $filename;
}
?>

Pomógłbyś mi zmodyfikować ten kod? Nie chce zeby zdjęcie w pionie były zniekształcane więc wymyśliłem aby zmniejszało zdjęcie do maksymalnej wysokości 275px i maksymalnej szerokość 275 px. Wtedy wytworzy nam sie zdjecie np. 275 px na 250 px i kod będzie ucinał je do 250 px na 250 px. I w ten sposób mam miniaturki w jednakowym kształcie i nie tracą one na zawartości zbyt wiele. Proszę o gotowy skrypt lub dokładnie instrukcje co zmienić. Z góry dzięki wielkie.

Czy ktoś mógłby podać mi instrukcje jak tego dokonać?
ctom
  1. if( $this->user('arekko')->seid('mam większe zlecenie') && $this->user('arekko')->seid('Proszę o gotowy skrypt lub dokładnie instrukcje') {
  2. $link = "http://forum.php.pl/Kupie_f64.html";
  3. } else {
  4. $link = "https://github.com/search?l=PHP&q=image+resize&ref=searchresults&type=Repositories&utf8=%E2%9C%93";
  5. }
  6.  
  7. return $this->RedirectTo( $link ) ;
MESSIAH :)
Cytat(ctom @ 10.01.2015, 11:43:24 ) *
  1. if( $this->user('arekko')->seid('mam większe zlecenie') && $this->user('arekko')->seid('Proszę o gotowy skrypt lub dokładnie instrukcje') {
  2. $link = "http://forum.php.pl/Kupie_f64.html";
  3. } else {
  4. $link = "https://github.com/search?l=PHP&q=image+resize&ref=searchresults&type=Repositories&utf8=%E2%9C%93";
  5. }
  6.  
  7. return $this->RedirectTo( $link ) ;

Umarłem zapomniałeś dodać funkcji : function notRealizeJob()
  1. { if( $this->user('arekko')->seid('mam większe zlecenie') && $this->user('arekko')->donthave('Gotowy skrypt lub dokładnie instrukcje') {
  2. $link = "http://forum.php.pl";
  3. } else {
  4. or die("Nie dostanę kasy.");
  5. }
  6. }
arekko
Zbyt dużo sakrazmu w waszych odpowiedziach .. proszę o instrukcje jakich funkcji należy użyć.
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.