포럼
image_lazyload 애드온 수정기.
2014.05.12 16:45
기존 애드온에 상당한 문제가 있었음...
이미지 크기를 지정하지 않을 경우라던가..
더미 이미지 크기를 그대로 불러오는 문제가 발생.
더미 이미지 크기가 원본 이미지보다 작으면 한번에 여러 이미지가 로드되고....
반대로 너무 크면 사이트 레이아웃에 따라 스크롤이 변하여 footer가 밀려있거나
브라우저가 멍청이(..)이 되는 경우가 있음.
따라서 기존 배포중인 애드온의 배포를 중지하고...
방치하다가.. 잠깐 짬이나서 다시 도전..!
첫번째. 이미지 원본 크기 구하기
getImageSize() 함수를 이용하여 원본 이미지 크기를 구함.
두번째. 원본 크기를 이미지태그에 자동 기입하는 작업.
str_replace()로 쉽게 처리.
그리고 결과 확인.!
어...어...어...?! 어째서 더미의 원본크기(100*100)이 되는 거지?
원인을 파악하기 시작함.
정답은 prettyphoto 애드온이 이미지 리사이즈를 할 때 해당 이미지의 원본크기로 변환해버림!
더미 이미지 파일 크기는 100*100이니까 이미지 크기가 100*100으로 되어서
한 페이지를 보면 모든 이미지가 로드되어버림..ㄷㄷ
그래서.. 해당 애드온을 사용안하기로...-_-;;;
근데.. 이렇게 해도 문제가 해결되지 않음!
그 이유는 가로 사이즈야 xe_content 기준으로 리사이즈가 되는데
height 값이 변경되지 않는.. 즉 원본이미지가 1920*1080 이고 화면 가시영역(xe_content 가로)가 1000px 이면
해당 더미이미지크기가
1000*1080이 되어버림.....
이 부분은 jquery로 처리해보기로 함...
해당 이미지를 each로 불러와서
다음과 같은 스크립트로 비율은 구한 후 가로 세로 사이즈 크기를 재정의함.
//image resize
//이미지 크기를 구해옴
var sw = $(this).attr('width');
sh =$(this).attr('height');
// xe_content 가로 사이즈를 구함
var mother = $('.xe_content').width();
// 이미지 크기가 가로사이즈랑 같거나 크면~ 크기값 구함
if(mother <= sw){
//가로값이 리사이즈된 퍼센트 구함
var percent = mother / sw;
//가로 비율에 맞게 높이값 구함
var heights = sh * percent;
// 각각 사이즈를 재정의해줌
$(this).width(mother);
$(this).height(heights);
}
그리고 확인!
오..! ready()로 호출해서 약간의 딜레이는 느껴지지만 크게 문제 없음!
변경된 애드온 테스트는 (더미 이미지의 크기는 100*100 입니다.)
http://anizen.kr/image_lazyload/129147
여기서..
자료는 최종적으로 확인 후 업로드 예정. (아직은 회사이기 때문에..^^)
* 예상치 못한 버그가 있을 수 있음.
* 예상되는 버그..는 getImageSize() 사용시 http://~ 같은 경우 php.ini 설정에서 allow_url_fopen값이 off되어 있으면 작동안함. (에러뿜음) 그래서 우선은 일단 사이트 도메인 기준으로 동일하면 상대경로로 변경함
* 화면보다 작은 이미지는? (확인해보지 않음 - 다만 문제는 없을 것으로...)
* prettyphoto 애드온이 매력적이지만 이미지 원본 기준으로 사이즈를 리사이즈하기 때문에 사용이 불가능할 것으로...
* 하지만 최종적으로는 이미지를 삽입할 때 크기를 자동으로 입력하게 하는 방향이 가장 BEST! - 이 방법으로 연구중
댓글 21
-
이즈야
2014.05.12 17:09
-
애니즌
2014.05.12 17:38
헛...! 조금만 더 기다릴 걸 그랬나요? ㅜ 제껀 엉성해서 별로에요~~
-
mAKEkr
2014.05.12 17:22
css로 lazyload 이전 이미지에 max-width:100%걸어보세요. 가로만 리사이징되어서 문제없으실검다.
-
애니즌
2014.05.12 17:37
사실 가로는 큰 문제가 안됩니다... 세로가 문제지요..ㅠ.ㅠ
-
mAKEkr
2014.05.12 18:09
저같은경우 lazyload 작성할일 있으면 lazyload된 이미지에는 가로, 세로 옵션을 싹 삭제해줍니다.
그래도 안되시면.. . _.)
-
애니즌
2014.05.12 18:12
가로 세로를 삭제하면
더미 이미지 크기로 나오더라구요.. (물론 더미 이미지를 엄청 크게 뽑아두면 괜찮긴 하지만..)
간혹 특정 레이아웃 (footer 하단 고정 등..)에선 문제가 되더군요..
아무튼 현재 문제는 없군요..ㅎㅎ
-
이즈야
2014.05.12 18:28
크기 지정 안 해주면 Lazyload로 불러올 때 스크롤바가 들쭉날쭉하는 걸 보실 수 있습니다 ㅋㅋ
-
mAKEkr
2014.05.12 18:29
아뇨 lazyload된 이미지요.
lazyload되기전에 크기지정 안했다가 lazyload 작동 안하는거 보고 "읭?!" 했던 기억이 있네요.
-
애니즌
2014.05.12 18:30
넵 ㅋㅋ 그게 문제입니다.
더미이미지를 예를 들어 100x100이나 원본보다 엄청 작게하면
한 화면에 다나오더군요..-_-;; (페이지 하나 볼 때 이미지가 여러개가 한번에 로드..!! )
-
KrteamENT
2014.05.12 21:43
~_~ 애드온 팩토리님의 작품은 오늘도 패치가 되고..
-
애니즌
2014.05.12 22:49
으아~ 역시 예상치 못한 버그가 발생!! 두둥!
-
こさき!
2014.05.12 23:04
엄청 기대중입니다!
계속 자료실 눈팅중이네요
-
애니즌
2014.05.12 23:41
임시 배포합니다.
allow_url_fopen 값이 off되어 있을 경우 외부 이미지에 대해서는 작동안합니다.
on/off와 관계 없이 자신의 사이트의 경우 알아서 호스트를 날려버려서 작동하도록 합니다.
설정이 추가되었습니다.
1. 더미 이미지 변경 가능 (직접 파일을 바꾸지 않아도 설정에서 이미지 경로만 써주면 됩니다.)
2. http / https 호스트 선택 (기존 보안서버를 항상 사용할 경우 https 설정을 제공
3. port 제공 (80포트가 아닌 다른 포트 사용시 입력하시면 됩니다.)
기본적으로 세팅을 하지 않아도 일반적인 웹환경에서는 다 작동을 하나...
특수 환경 (https 나 port 사용)의 경우 설정을 해줘야 정상적으로 작동합니다.!
참고로! 아예 작동이 안되는 것은 아닙니다.
하..지...만...! 원본 이미지 크기를 가져올 수 없기 때문에.. 문제가 됩니다.
현재 가장 베스트로 계획하고 있는 것은... 게시판 글 등록시
자동으로 사이즈를 구해서 입력하도록.. 하는 방향..입니다.
단, 기존에 width~height 값이 입력되어 있으면 아무런 문제가 없습니다!
본 애드온은 prettyphoto와 충돌이 있습니다.
정확히는 해당 애드온이 이미지 원본 크기 기준으로 강제 리사이즈해서... 딱히 대처할 수 있는 방법이 없습니다.
공식~ 자료실에 올리지 않고 여기에 올리는 것은 다소 안정성(?)이랄까... 전반적인 검토 및 테스트 후기? 등등이 필요하기 때문입니다.
참고로 본 애드온에서 자체적으로 이미지 리사이즈를 제공합니다.
*다음버전에서 계획중인 기능
1. 이미지 작성시 강제적으로 사이즈 입력하게 하기..
2. 이미지 리사이즈 기능 개선
3. 이미지 뷰어 연동(자체)
아무래도 다른 뷰어와의 충돌이 있기 때문에 자체적으로 지원하는 것이 가장 좋은 방법이라 생각됩니다....
따라서.. 뭐.. 일단 현재는 이러합니다.
이상입니다.
-
애니즌
2014.05.12 23:46
현재 확인된 문제
1. 브라우저 사이즈 변경시 리사이즈 안됨.(사이트가 가변or 반응형일 경우에만 해당)
> 해당 문제는 사이즈 변경을 없애버리고.. 이미지 리사이즈 애드온을 사용하면 됨
테스트는 본문내 이미지 조절 애드온(./addons/resize_image/)과
jQuery Ligntbox 애드온(./addons/jq_lightbox/)에서 테스트하였음 ( 둘 중 하나만 사용하시면 됩니다. )
-
misol
2014.05.13 00:49
외부 파일에 대해서는
./classes/file/FileHandler.class.php 에 정의된 getRemoteResource 인가? 그 비슷한 이름의 메소드를 이용해보세요. 원하시는 결과를 얻으실겁니다. -
애니즌
2014.05.13 01:55
옷..! 감사합니다.
과연 제가 할 수 있을지는 모르겠지만..-_-;; 이것저것 만져보도록 하겠습니다~
-
YJSoft
2014.05.13 07:59
filehandler를 사용해서 allow_url_fopen이 off인 경우 파일을 cache 폴더에 받은 뒤 분석하도록 수정해 보았습니다.
image_lazyload_filehandler.zip
allow_url_fopen이 off이고, imgur로 올려진 이미지 lazyload 테스트 url입니다.
-
YJSoft
2014.05.13 08:17
-
애니즌
2014.05.13 10:05
우와!! 우와아아!! 우와아아아아!! 대단합니다 !! +_+ !! 이런 것도 있었군요..
파일핸들러.. 좋은 녀석이군요 +_+
그럼 굳이 host를 날릴 필요가 없겠네요 !!+_+
기존 host 설정을 날려버려야겠습니당 +_+ 원츄!
-
애니즌
2014.05.13 10:09
라스트오더군요 +_+!!
-
애니즌
2014.05.13 11:20
오~~ 좋은 방법이 구현되었습니다..! 두둥
글 쓸때.. 처음에 말했듯이
강제적으로 사이즈를 지정하게 해주고...
해당 사이즈를 기준으로.. 원하는 해상도로 이미지를 뽑아주는 사이트를 이용해서
해당 이미지를 뽑는 겁니다...!
현재 구현은 되었고.. 테스트 좀 하고 있네요..후후
아... 이 작업 제가 하려고 벼르고 있던 건데!
제가 생각해둔 아이디어가 죄다 적혀 있네요!