관련 : - 사진배치] OTL... 찾지 못해 결국 전부체크라... -
얼마전에 "자동"으로 사진배치를 하기 위한 고민(?)을 했었는데,
( 가로세로 4:3 이미지의 경우는 이미 있지만,
크기가 들쑥날쑥한 이미지를 4:3으로 구겨넣는(?) 문제를 해결하지 않았다.)
일단... 사진의 위치를 결정해봐야 했다.
...
사진의 프로필을 모른다는 전제하에
사진의 위치를 먼저 정해보자는 결정을 내리고,
그 사진의 위치를 지정하기 위한 함수를 만들어봤다.
...
<div id=v101016_1>ColNRows 출력부분</div>
<script>
function ColNRows(count) { // count : total count of cells'
var ov=''; // show result
var xn=80; // of overflow, break by "return"
var mLim=-2; // po's minus limit
var po=[], pq=[], pr=[];
// total position, other position, merged position
var cpo, cpq, qcount;
// total loof, other loof, other count
var i, j, cmax; // for loofs
for (i=0; i<count; i++) po[i]=mLim;
cpo=0;
while (cpo<count) {
if (cpo>=0) {
cmax=0;
for (i=0; i<count; i++) {
// for (i=cpo; i<count; i++) { <- cpo 를 0 으로 수정... (최소값을 잡지 못하는 오류때문에...)
if (po[i]>=cmax) cmax=po[i]+1;
if (po[i]==mLim) po[i]=cmax++;
} //end of for
} // end of cpo>=0
for (i=0, qcount=0; i<count; i++) if (po[i]==-1) pq[qcount++]=-1;
if (!qcount) { // if no -1,
/// print of with -1
ov+='+';
for (i=0; i<count; i++) ov+=po[i]+'.';
ov+='\r\n';
if (!xn--) return ov; // break overflow point
///
}
cpq=0;
while (cpq<qcount) {
if (cpq>=0) {
cmax=0;
for (i=cpq; i<qcount; i++) {
if (pq[i]>=cmax) cmax=pq[i]+1;
if (pq[i]==-1) pq[i]=cmax++;
} // end of for
} // end of cpq>=0
/// print in -1
//
//ov+='-';
//for (i=0; i<qcount; i++) ov+=pq[i]+'.';
//ov+='\r\n';
//
//if (!xn--) return ov; // break overflow point
//
// print of merge
ov+='*';
for (i=0, j=0; i<count; i++) {
if (po[i]==-1) ov+=(-pq[j++]-1)+'.'; else ov+=po[i]+'.';
}
ov+='\r\n';
if (!xn--) return ov; // break overflow point
/// ready of next other
cpq=qcount-1;
while (cpq<qcount) {
pq[cpq]--;
if (pq[cpq]==-1) { cpq--; if (cpq<0) break; }
else break;
} // end of smalll cpq
if (cpq<0) break;
} // end of while big cpq
/// ready of next total
cpo=count-1;
while (cpo<count) {
po[cpo]--;
if (po[cpo]==mLim) { cpo--; if (cpo<0) break; }
else break;
} // end of small cpo
if (cpo<0) break;
} // end of while big cpo
// alert(80-xn); // count printed message by limit value
return ov;
}
if (document.getElementById('v101016_1')['innerText']) // if innerText
document.getElementById('v101016_1').innerText=ColNRows(3);
else // not innerText
document.getElementById('v101016_1').textContent=ColNRows(3);
</script>
...
...
음... 기본 법칙(?)은
이전값 가지고 있는 포인터보다 이후에 가지게 되는 포인터가 클 수 있지만,
1이 최대값이어야하고, (array 최대사용의 법칙이랄까 = =;...)
... 세로/가로...나열을 생각하기 전에는 -1 이라는 값이 없었지만,
2중으로 만들기 위해 -1 이라는 값을 만들었다.
*참고*
var mLim=-2;
: 이 값이 -2 가 아닌 -1 이면 cpq 부분들은 존재가치(?)가 사라진다.
...
-1 | 0 | 0 | -2 | |
1 | 1 | -2 | ||
-1 | 2 | 2 | 2 |
뭐... 대략 이런 모양...?
(이 모양은 좌우측 세로배치이지만, 거꾸로 상하측 가로배치형태를 띌 수도 있다.)
...
음... 사진의 크기는 나중에 계산하기로 하고
순서를 최대한 살리기 위한 위치개략도라고 할지...
사진 원본의 크기가 없기 때문에 대략적인 크기산정 자체는 불가능하지만,
이 방법으로 크기산정을 위한 바닥은 짚을 수 있을 것 같다.
...
... 이 함수의 나중 문제라면...
1) 루프가 중복식(?)이라 속도가 느려지기 쉽다. (실행시간이 count^2 에 비례하려나...)
('10.10.20 12:30) ...라고 적었는데... OTL... e^count 에 비례하는 것 같다... (계산상으로는 (count+1)! ...)
2) 같은 크기의 사진들이 "위로" 올라가는 현상은 막아야하는데... 아직 그 형식을 지정하지 못했다.
( 0.1.2 는 문제가 안되지만,
0.1.0 의 경우, 1 위치와 마지막 0 위치의 크기가 같으면 허가하지 말아야 하는...)
3) 값을 받기 위해 이 함수를 부르는 것이 아닌, 이 함수가 크기값을 부르는 형식을 취해야한다.
3번의 경우는 만드는 것은 가능하겠지만,
break point 를 어디에 둬야할지 가늠하기 힘들어서... 그냥 이 형식으로 진행하는 것이 나을 것 같다.
그 외에...
4) mLim 값을 -2 와 -1 값만 쓸 수 있다... (아마도...) 다른 값으로 지정하면 대략 난감 = =;...
5) count 값의 오류판별식은 지정하지 않았다...
6) 위에서 (!qcount) 의 경우에 먼저 출력하는 경우가 있는 것 처럼(?)
사진크기를 알고있을 때 계산할 함수를 따로 지정해야한다...
저 함수 안에 모두 몰아넣으면 = =;... 써줘야(?)할 내용이 너무 길어져...
7) ...
...
NowMark killofki@.
'image area' 카테고리의 다른 글
scroll] 따라오려는(?) 사진... (0) | 2011.02.18 |
---|---|
줄 기준 블럭식 사진 배치준비]...를 하기 위해... (2) (0) | 2010.10.28 |
div] 협소한(?) 공간 깜짝(?) 크게만들기... (0) | 2010.05.05 |
div minimum height...? (0) | 2010.03.20 |
div position:relative ...? (0) | 2010.03.18 |