konto usunięte

Temat: maskowanie krawedzi obrazkow

Najlepiej jakby to byl plugin jQuery, ale nie musi byc...

Mam obrazki w systemie (setki, tysiace - screenshoty, jakies boxy i cholera wie co jeszcze) ktore musza miec zaokraglone krawedzie, polprzezroczystosci, a tlo ktore jest w tle strony byc widoczne.
Po prostu maskowanie krawedzi.

Smiga to oczywiscie na aplikacji FLEXowej, flash nie sprawa problemow z takimi duperelami, ale musze zrobic praktycznie to samo w HTMLu, bez modyfikacji oryginalnych obrazkow w tym przypadku JS musi sie tym zajac.

Znalazlem cos takiego jak edge.js, ktory robi dokladnie to czego mi trzeba, licencja do uzytku komercyjnego jest platna, wiec postanowilem zapytac, bo moze ktos z was juz mial podobny problem i szukal rozwiazania jakiegos...
ps.. im mniejszy plugin / biblioteka / skrypt tym lepiej (edge.js ma 12KB i nadal wydaje mi sie dosc spory :))

Jakies sugestie?
Moze darmowe? :)

konto usunięte

Temat: maskowanie krawedzi obrazkow

Widze ze wszyscy lacza sie w bolu i pewnie dlatego nie odpowiadaja ;)

Tak czy siak.. problem zostal rozwiazany przy uzyciu edge.js.
Bardzo ladnie pracuje to w IE7+ (podobno IE6, ale ta strona nie wspiera dinozaura), FF, Opera i caly ten bajzel... nawet na iPhonie i HTC (win i opera) bardzo ladnie to smiga.

Edge.js ma mala wade, bo automatycznie po wgraniu dokumentu, razem ze wszystkimi obrazkami aplikuje maski. Jest biblioteka dostepna na ich stronie i mozna recznie odpalac funkcje ktora bedzie to robic.
W moim przypadku bylo istotne bo wgrywalo sie lacznie 300 obrazkow, ktore byly ukrywane, dodawane stronicowanie itd itp teraz maski sa aplikowane tylko po zmianie na nastepna podstrone.

Mala wada w DOMie IMG zamieniany jest CANVAS. Troche upierdlile, ale mozna potem zaaplikowac usuniecie maski z tej samej biblioteki i zamienia spowrotem na IMG.

Firefox moza aplikowac maski, zanim obrazki sie wgraja (przegldarka sie lekko freezuje), ale IE musi poczekac na wszystkie zdjecia.

Aaa i wazne info: FF moze uzywac plikow PNG by zaaplikwoac ladna maseczke z cieniowanie itd, ale IE uzywa gifa - nie jest to perfekcyjne rozwiazanie, ale w moim przypadku i tak nakladlem na to warstwe z borderami, cieniami itd ;)

---

Moze powyzsze info sie kiedys komus przyda i oszczedzi marnowania czasu i szukania czegos, co dziala ;)
Michał Stachura

Michał Stachura Dedykowane serwisy i
strony www -
http://santri.eu

Temat: maskowanie krawedzi obrazkow

Niedawno miałem podobny problem i tam rozwiązałem go sobie po stronie serwera. U mnie było o tyle łatwiej, że chciałem zrobić jedynie zokrąglane rogi w wyświetlanych obrazkach prezentowanej oferty.
Wystawiona oferta ma od 1 do 3 obrazków rożnej wysokości (szerokość na szczęście ta sama ale to akurat nie problem.).

Rozwiązałem to dość prosto i działa pod każdą przeglądarką i z użyciem png-24 na rogach co daje mi pożądaną półprzeźroczystość (testowane pod IE 8).

Na początek narysowałem sobie te cztery zaokrąglone rogi, dałem je jako tło DIVów spozycjonowanych absolutnie i umieściłem je w kontenerze spozycjonowanym relatywnie.
CSS ostatecznie dla tych elementów wygląda tak:
#details_bdy_right {float: right; display: inline; margin: 7px 22px 0 0; position: relative;}
#left_top {background: url(../img/left_top.png) no-repeat; position: absolute; top: 0px; right: 296px; width: 4px; height: 4px; z-index: 10;}
#right_top {background: url(../img/right_top.png) no-repeat; position: absolute; top: 0px; right: 0px; width: 4px; height: 4px; z-index: 10;}
#right_bottom_1 {background: url(../img/right_bottom.png) no-repeat; position: absolute; right: 0px; width: 4px; height: 4px; z-index: 10;}
#left_bottom_1 {background: url(../img/left_bottom.png) no-repeat; position: absolute; right: 296px; width: 4px; height: 4px; z-index: 10;}
#right_bottom_2 {background: url(../img/right_bottom.png) no-repeat; position: absolute; right: 0px; width: 4px; height: 4px; z-index: 10;}
#left_bottom_2 {background: url(../img/left_bottom.png) no-repeat; position: absolute; right: 296px; width: 4px; height: 4px; z-index: 10;}
#right_bottom_3 {background: url(../img/right_bottom.png) no-repeat; position: absolute; right: 0px; width: 4px; height: 4px; z-index: 10;}
#left_bottom_3 {background: url(../img/left_bottom.png) no-repeat; position: absolute; right: 296px; width: 4px; height: 4px; z-index: 10;}

Gdzie #details_bdy_right jest naszym relatywnym kontenerem.
Takie rozwiązanie umożliwiło mi pozycjonowanie absolutne dla rogów względem początku kontenera a nie początku strony. Przy pozycjonowaniu narożników względem początku strony trzeba by jeszcze wcześniej rozpoznawać rozdzielczość i przeliczać właściwą pozycję. Jeśli dorzucimy do tego jeszcze rożną interpretację paddingów dla IE i reszty przeglądarek sprawa byłaby nieco bardziej skomplikowana, a tak to mamy to dość prosto rozwiązane.

Mając takiego CSSa reszta jest już dość prosta.
W HTMLu umieszczam te DIVy narożnikowe w kontenerze (jest ich tak dużo bo mogą być trzy obrazki do każdej oferty i niestety każde zdjęcie może mieć inną wysokość.
HTML
<div id='details_bdy_right'>
<div id='left_top'></div>
<div id='right_top'></div>
<div id='right_bottom_1' style='top: <?=($round1_width-4)?>px'></div>
<div id='left_bottom_1' style='top: <?=($round1_width-4)?>px'></div>
<div id='right_bottom_2' style='top: <?=($round2_width-4)?>px; display: none'></div>
<div id='left_bottom_2' style='top: <?=($round2_width-4)?>px; display: none'></div>
<div id='right_bottom_3' style='top: <?=($round3_width-4)?>px; display: none'></div>
<div id='left_bottom_3' style='top: <?=($round3_width-4)?>px; display: none'></div>
</div>

Jak widzisz lewy górny róg i prawy górny róg są zawsze na tej samej pozycji co mi nieco ułatwiło sprawę.

Na koniec (a w zasadzie na samym początku na wejściu na stronę z produktem) serwer jak ładuje obrazki sprawdza mi ich wysokość nadając odpowiednią wartość dla każdego z style='top: xxx'
PHP
$info1 = getimagesize("img/oferta/$obrazek1");
$round1_width = $info1[1]; // wysokość zaokrąglenia rogów miezona od góry
$info2 = getimagesize("img/oferta/$obrazek2");
$round2_width = $info2[1]; // wysokość zaokrąglenia rogów miezona od góry
$info3 = getimagesize("img/oferta/$obrazek3");
$round3_width = $info3[1]; // wysokość zaokrąglenia rogów miezona od góry

Gdzie zmienne $obrazek to nazwy obrazków z bazy.

I wuala. Działanie możesz zobaczyć przykładowo tutaj.

Tylko patrz na rogi obrazków :)

konto usunięte

Temat: maskowanie krawedzi obrazkow

Domyślam się że problem jest już rozwiązany, aczkolwiek pozwolę sobie odnotować pewną myśl.

Webdeweloperzy nie powinni dostosowywać swoich projektów do przeglądarek. Dinozaur jak zresztą IE7 i IE8 hamują tylko rozwój internetu. Gimnastykowanie się z kodem, aby strona wyglądała jednolicie również na wyżej wymienionych browserów jest nieopłacalne. Produkcja witryny dedykowanej IE jeszcze bardziej.

Faktycznie, że IE ma blisko 30% rynku przeglądarek w Polsce. Jednak uważam, że powinniśmy się zjednoczyć i na każdej źle wyświetlanej stronie na wyżej wymienionych, dołączać skrypt przekierowujący na domówkę np. Chrome. Ponieważ standard to standard i należy o niego walczyć.

Nie rozumiem dlaczego przez parę dni wyrywać sobie włosy z głowy i używać bibliotek JS, skoro ten problem rozwiązuje parę szczupłych linijek wciąż nieformalnego CSS3. Właściwości radius i opacity są obsługiwane przez Chrome,Opere i Firefoxa a nawet Safari. Natomiast filtr przezroczystości działa od IE 5.5+.

Mam nadzieję, że IE9 spełni nasze potrzeby i oduzależni od jQuery. Bo czysty kod właściwości CSS lub lekkich funkcji JavaScript zaczyna pomału zanikać.Jakub Szlenk edytował(a) ten post dnia 06.06.10 o godzinie 20:00
Piotr Mederak

Piotr Mederak Development Team
Leader

Temat: maskowanie krawedzi obrazkow

Jakub S.:
Nie rozumiem dlaczego przez parę dni wyrywać sobie włosy z głowy i używać bibliotek JS, skoro ten problem rozwiązuje parę szczupłych linijek wciąż nieformalnego CSS3.

zrozumiesz jak zaczniesz robic komercyjne projekty, i uslyszysz o czyms co marketingowcy nazywaja 'zasiegiem'

konto usunięte

Temat: maskowanie krawedzi obrazkow

Piotr Mederak:
Jakub S.:
Nie rozumiem dlaczego przez parę dni wyrywać sobie włosy z głowy i używać bibliotek JS, skoro ten problem rozwiązuje parę szczupłych linijek wciąż nieformalnego CSS3.

zrozumiesz jak zaczniesz robic komercyjne projekty, i uslyszysz o czyms co marketingowcy nazywaja 'zasiegiem'

Oczywiście, że się z Tobą zgadzam. Zwłaszcza jak firma reprezentowana przez marketingowca za ów "zasięg" zapłaci.

Z drugiej strony warto tym "specjalistą" od zasięgu wytłumaczyć że skoro do porzucenia IE 6 namawiają poza Google także sami autorzy programu to jest w tym pewna logika. Po prostu jak większość uważam, iż należy sobie ułatwiać życie. Na pewno jako bardziej doświadczony wiesz, że "za ciężką prace medalu nie ma".
Marcin Pawlas

Marcin Pawlas kocham poniedziałek

Temat: maskowanie krawedzi obrazkow

zasięg - marketing - IE6 - poziom - koszt

wszystko zależy jak się rozłoży krzywa na tych pięciu punktach i jakie priorytety będą przyświecać zadaniu.

IE6 już umarł, marketingowcy po prostu po części się trzymają bezpiecznego gruntu.

konto usunięte

Temat: maskowanie krawedzi obrazkow

Marcin Pawlas:
zasięg - marketing - IE6 - poziom - koszt

wszystko zależy jak się rozłoży krzywa na tych pięciu punktach i jakie priorytety będą przyświecać zadaniu.

IE6 już umarł, marketingowcy po prostu po części się trzymają bezpiecznego gruntu.

Od kiedy MS oficjalnie wyparł się IE6 ten grunt przestał być bezpieczny...

konto usunięte

Temat: maskowanie krawedzi obrazkow

a kto normalny chce pisać pod IE6?
obawiam się że zapotrzebowanie na tego typu rozwiązania to swego rodzaju błędne koło

Firma ma aplikacje pod IE6, potrzebuje nowej, nie powie że ma być w normalnej przeglądarce, bo by musiała zainwestować w starą, więc piszą że pod IE6 i koło się zamyka

konto usunięte

Temat: maskowanie krawedzi obrazkow

Przemysław R.:
a kto normalny chce pisać pod IE6?

każdy dobry front-end nie ma z tym problemu...
obawiam się że zapotrzebowanie na tego typu rozwiązania to swego rodzaju błędne koło

Firma ma aplikacje pod IE6, potrzebuje nowej, nie powie że ma być w normalnej przeglądarce, bo by musiała zainwestować w starą, więc piszą że pod IE6 i koło się zamyka

problem rodzi się wtedy, gdy jest to jakaś mocno rozbudowana aplikacja intranetowa zrobiona z ActiveXami... Tutaj (pewnie, nie znam się) aktualizacja oznacza zapewne śmierć takiej aplikacji a koszty jej aktualizacji/przepisania od nowa będą pewnie potężne... I stąd ciągle większość korpo ma starocie w stylu IE5.5 czy IE6...

Następna dyskusja:

"Na krawedzi"




Wyślij zaproszenie do