Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: resize crop (zmiana rozmiaru obrazka i obcinanie)
Forum PHP.pl > Forum > PHP
AxZx
witam

mecze sie nad kawalkiem kodu i nie wiem jak to rozwiazac bo chyba to jest skomplikowane;)

jest galeria zdjec, uzytkownicy wrzucaja sobie zdjecia, a poszukiwany kod ma za zadanie utworzyc 3 obrazki o zadanych rozmiarach.

zalozenie jest takie:
najpierw zmiana rozmiaru obrazka a pozniej obciecie to co pozostalo poza zadany rozmiar.
jeden obrazek bedzie mial tylko zmieniany rozmiar.

czyli funkcja ktora to bedzie realizowac przyjmuje 5 parametrow:
  1. <?php
  2. function resize($src_width = 0, $src_height = 0, $out_width = 0, $out_height = 0, $crop = TRUE);
  3. ?>

kombinowalem juz na rozne sposoby ale jak do tej pory zawsze znajdywal sie jakis obrazek i rozmiary koncowe ktore w polaczeniu razem nie dawaly oczekiwanego rezultatu.

czy ktos sie juz nad tym glowil?
nie chodzi mi o konkretny kod z funkcjami imagecopyresample i tym podobne, bo dany algorytm bede realizowal na metodach biblioteki Image dolaczonej do Kohany.

pozdrawiam

EDIT:
bezsensu tego posta napisalem.
chodzi o to zeby obrazek na wyjsciu mial identyczne wymiary jak podane w formularzu, ale nie tak zeby wycinal ze srodka tak jak to przewaznie cropy robia tylko najpierw zmniejszyl obrazek do nakrotszej krawedzi a nastepnie ucial z tej dluzszej krawedzi resztki. gdy obrazek jest mniejszy musi powiekszyc do podanych rozmairow no i uciac resztki.
ddiceman
Algorytm step-by-step:
Kod
oznaczenia:
SW - szerokosc zrodla (obrazka do pomniejszenia)
SH - wysokosc zrodla
SI - obrazek zrodlowy
DW - szerokosc docelowa
DH - wysokosc docelowa
DI - obrazek docelowy)

A = DW/DH
B = SW/SH

if(B > A){
    C = DH/SH
    resize: SI(SW, SH) -> DI(SW*C, SH*C = DH); // pomniejszenie tak, ze wysokosc bedzie taka sama
    crop:   DI(SW*C, DH) -> DI(DW, DH)
}
else{
    C = DW/SW
    resize: SI(SW, SH) -> DI(SW*C = DW, SH*C); // pomniejszenie tak, ze szerokosc bedzie taka sama
    crop:   DI(DW, SH*C) -> DI(DW, DH)
}


jakos tak o ile dobrze zrozumialem Twoj problem
AxZx
dzieki, a co oznacza linijka
Kod
SI(SW, SH) -> DI(SW*C, SH*C = DH)

?
gdybys mogl wyjasnic to bede juz wiedzial jak hpp do tego napisac:)
ddiceman
resize staerego obrazka (ktory ma wymiary SWxSH do obrazka o wymiarach AxB, gdzie A = SW*C a B = SH*C, przy czym SH*C jest rowne DH, czyli
  1. <?php
  2. imagecopyresized ($dst_image, $src_image, 0, 0, 0, 0, $src_w*$c , $src_h*$c, $src_w, $src_h);
  3. ?>
AxZx
dzieki bardzo. wyglada sensownie:)
musze sie nad tym zastanowic, bo metody resize i crop w kohanie przyjmuja takie parametry jak szerokosc i wysokosc nowego obrazka oraz parametr ktory okresla wg ktorego boku ma byc zmieniany rozmiar - tzw. master:)

no i wlasnie problem jest w ustaleniu tego master.
czyli wedlug ktorego boku ma robic najpierw resize.
ddiceman
dla spelnionego if wg wysokosci a dla else wg szerokosci
wymiary docelowe to za kazdym razem SW * C oraz SH * C
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.