1)
기존에 블럭식배치를 구성하고, 표현하는 것 까지는 진행했습니다만,
그 이후(?), 이 내용들을 어떻게 더 편하게(?) 쓸 수 있을까..를 고민해오다가
.. 만들고나니 편하긴(?) 합니다만,
(만들기 이전까지는 배치에만 몇시간을 매달려있었죠.. 지금은 배치만에 걸리는 시간이 30분 이내입니다..)
.. 이걸 설명하려고 하니 또 한세월 걸리겠군요..
최적화 작업은 나중으로 미루더라도,
적어놓는 것이 우선일 것 같아 올립니다.
...
2)
<script>
// init String's Function..
(function() {
// parseInt's trail version..
String.prototype.intParse = function() {
return parseInt(this);
}
// appending replace..
String.prototype.replaceAll = function() {
var ov = this,
i, ar = arguments,
arl = ar.length;
for (i = 0; i < arl; i += 2) {
ov = ov.replace(ar[i], ar[i + 1]);
}
return ov;
}
})();
// alert('1,2,3,4,'.replaceAll(/^\s*.*\s*,\s*.*\s*,\s*.*\s*,\s*.*\s*,/, '1'));
// on click, action & for Excel and prev source's converting..
function textpharse_120918_1(iv) {
var i, a = [],
v = document.all ? iv.innerHTML : iv.textContent,
c, li, sv, b = [],
j, ov, wRateAll, wRateHalfDefault, wRateHalfDefaultMinRate = 2
// block's outer size.. = width - > maximum size, height : for getting size..
,
matWidth = 540,
matHeight = 540;
if (!v) v = iv.value;
// div lines (no check version (as string with numeric) )
li = 0;
for (i = 0; i < v.length; i++) {
switch (c = v.charCodeAt(i)) {
case 10:
sv = v.substring(li, ei + 1);
if (sv.charCodeAt(0) > 32) a.push(sv);
ei = (li = i + 1);
break;
case 13:
sv = v.substring(li, ei + 1);
if (sv.charCodeAt(0) > 32) a.push(sv);
ei = (li = i + 1);
break;
case 32:
if (li == i) li++;
break;
default:
ei = i;
break;
}
}
if (li < i) {
sv = v.substring(li, ei + 1);
if (sv.charCodeAt(0) > 32) a.push(sv);
} // if no ending push, push..
c = {};
for (i = 0; i < a.length; i++) {
switch (i % 3) {
// case 0 : c.title=(a[i].substr(2, 3)).replace(/_/g, '.'); break;
// case 0 : c.title=(a[i].substr(1, 2)).replace(/_/g, '.'); break;
// case 0 : c.title=(a[i].substr(7, a[i].length-13)).replace(/_/g, '.'); break;
case 0:
c.title = (a[i].substr(10, a[i].length - 16)).replace(/_/g, '.');
break;
case 1:
break;
case 2:
if (a[i].charAt(a[i].length - 1) == ')') c.nums = a[i].substring(0, a[i].length - 1) + ',';
else
c.nums = a[i];
b.push(c); // b[b.length]=c;
c = {}; // c=new Object();
break;
}
}
wRateAll = 0;
for (i = 0; i < b.length; i++) {
c = b[i];
sv = c.nums;
li = sv.indexOf(',');
c.left = sv.substring(0, li).intParse();
j = sv.indexOf(',', li + 1);
c.top = sv.substring(li + 1, j).intParse();
li = sv.indexOf(',', j + 1);
c.width = sv.substring(j + 1, li).intParse();
j = sv.indexOf(',', li + 1);
c.height = sv.substring(li + 1, j).intParse();
li = sv.indexOf(',', j + 1);
c.owidth = sv.substring(j + 1, li).intParse();
j = sv.indexOf(',', li + 1);
c.oheight = sv.substring(li + 1, j).intParse();
wRateAll += (c.wRate = c.owidth / c.oheight);
}
ov = // 'default : v<'+'br/><'+'br/>
('<'+'table>').replace(/v/, (wRateHalfDefault = Math.sqrt(wRateAll) / wRateHalfDefaultMinRate) * wRateHalfDefaultMinRate);
for (i = 0; i < b.length; i++) {
c = b[i];
ov += '<'+'tr><'+'td>' + c.title + '<'+'/td><'+'td>' + c.owidth + '<'+'/td><'+'td>' + c.oheight + '<'+'/td><'+'td>=b' + (i + 1) + '/c' + (i + 1) + '<'+'/td><'+'td>=d' + (i + 1) + '/1.5<'+'/td><'+'/tr>';
}
ov += ('<'+'tr>fff<'+'td>c<'+'/td><'+'td>e<'+'/td>').replaceAll(/f/g, '<'+'td><'+'/td>', /c/, '=sum(D1:Da)', /a/, i, /e/, '=sum(E1:Ea)', /a/, i) + '<'+'/tr>';
ov += '<'+'/table>';
document.getElementById('output_120918_1').innerHTML = ov;
// after set prevalues
(function() {
function ppPaste(ppv) {
var ov = '',
i, ppvl = ppv.length;
for (i = 0; i < ppvl; i++) {
ov += '<'+'br/>' + (ov ? ',' : '') + 'a~b/c:d = e'.replaceAll(/a/, ppv[i].start, /b/, ppv[i].compend, /c/, ppv[i].sum, /d/, ppv[i].gabcount, /e/, ppv[i].height);
}
return ov;
}
function s2cDiv(v) {
var ov = [],
vl = v.length;
for (i = 0; i < vl; i++) {
ov[i] = v.charAt(i);
}
return ov;
}
var bta = [],
btaU = [];
function twinmin(min, max) {
var p, dv, q, r, s = 0;
if (min >= max) {
// document.write(('<'+'br/><'+'br/>--!! minc maxd<'+'br/><'+'br/> ').replaceAll(/c/, min, /d/, max));
return max;
}
p = parseInt(Math.log(max) / Math.log(10));
while (1) {
dv = 1;
for (q = p; q > 0; q--) dv *= 10;
for (q = p; q < 0; q++) dv /= 10;
r = parseInt(max / dv) * dv;
if (r >= max) r -= dv;
// document.write('<'+'br/>pa sb re minc maxd/ '.replaceAll(/a/, p, /b/, s, /e/, r, /c/, min, /d/, max));
if (r > min) {
// document.write('<'+'br/>');
return s + r;
}
s += r;
min -= r;
max -= r;
p--;
}
return min;
}
function btrace(bv, start, end, sum) {
var i, isum = 0,
p, j, iput;
for (i = start; i < end; i++) {
isum += (bta[i] = parseInt(bv[i].wRate * (matWidth - (end - start - 1) * 2) / sum));
btaU[i - start] = (bta[i] + 1) / bv[i].wRate;
}
btaU.length = end - start;
btaU.sort();
p = matWidth - (end - start - 1) * 2 - isum;
for (j = p - 1; j >= 0; j--) {
if (btaU[j] != btaU[p]) break;
}
// document.write((j>=0)?('*ja [j]d pb [p]e <'+'br/>').replaceAll( /a/, j, /d/, btaU[j], /b/, p, /e/, btaU[p]):('minc *pb [p]e <'+'br/>').replaceAll( /b/, p, /e/, btaU[p], /c/, (matWidth-(end-start-1)*2)/sum));
iput = (j >= 0 ? twinmin(btaU[j], btaU[p]) : twinmin((matWidth - (end - start - 1) * 2) / sum, btaU[p]));
return iput;
}
var
d, e = [],
pp = [],
f, i, j, k, leftv, topv, l, m, sum, gabcount, countmax, heightsum, heightmin, heightmax, heigthv, heightvalue, goodvalue, bl = b.length,
ov, ov2, ov3, ov4, tv, tvFinal = '',
ovFinal = '',
aA = s2cDiv('ABCDEFGHIJKLMNOPQRSTUVWXYZ'),
btv;
for (i = 1; i < bl; i++) {
e[i] = 0;
}
i = 1;
goodvalue = 10; // for getting..
// start of while
while (i < bl) {
// loop getter (by dim's bit..)
if (e[i]) {
e[i] = 0;
i++;
continue;
} else {
e[i] = 1;
i = 1;
}
// line checker
pp[k = 0] = l = {};
l.start = 0;
for (j = 1; j < bl; j++) {
if (e[j]) continue;
l.compend = j;
k++;
pp[k] = l = {};
l.start = j;
}
l.compend = j;
k++;
pp.length = k;
// end of line checker
sum = 0;
gabcount = 0;
countmax = 6;
heightsum = 0;
heightmin = heightmax = 0; // for check
k = 0;
// precheck
for (j = 0; j < bl; j++) {
d = b[j]; // from out's value
if ((j) && (!e[j])) {
if (sum < wRateHalfDefault) break; // if line's sum<(sqrt(wRateAll)/wRateHalfDefaultMinRate), stop checking..
pp[k].sum = sum;
pp[k].gabcount = gabcount;
heightsum += (
heightv = pp[k].height = (matWidth - gabcount * 2) / pp[k].sum / matWidth);
if (!heightmin) {
heightmin = heightv;
heightmax = heightv;
} else {
if (heightv < heightmin) heightmin = heightv;
else if (heightv > heightmax) heightmax = heightv;
}
k++;
sum = d.wRate;
gabcount = 0;
} else {
sum += d.wRate;
gabcount++;
}
}
pp[k].sum = sum;
pp[k].gabcount = gabcount;
heightsum += (
heightv = pp[k].height = (matWidth - gabcount * 2) / pp[k].sum / matWidth);
if (!heightmin) {
heightmin = heightv;
heightmax = heightv;
} else {
if (heightv < heightmin) heightmin = heightv;
else if (heightv > heightmax) heightmax = heightv;
}
if (gabcount > countmax) countmax = gabcount;
k++;
// if (j)
if (sum < wRateHalfDefault) {
// ov+='!'+sum+'!'
continue; // step to next..
}
// end of precheck & precompute
heightvalue =
Math.abs(Math.log((heightsum * matWidth + k * 2) / matHeight)) + Math.abs(Math.log(heightmin / heightmax));
if (goodvalue == 10) {
goodvalue = heightvalue;
// please set value
} else {
if (heightvalue < goodvalue) {
goodvalue = heightvalue;
// please set value
}
}
//sum=0;
k = 0;
topv = 0;
leftv = 0;
l = 0;
// ov=''; // ready print..
//
//
// for (j = 0; j < bl; j++) {
// d = b[j]; // from out's value
// if (!e[j]) { // j's rate is more few than e[j]..
// if (j) {
// ov += ('(v)<'+'br/>').replace(/v/, pp[k].sum /* sum */ );
// k++;
// }
// }
// ov += d.title.substring(0, 8) + ' / '; /* sum=(e[j]?sum:0)+d.wRate;*/
// // +d.owidth+' '+d.oheight+' '+(d.owidth/d.oheight)+' / ';
// }
//
// ov += ('(v)<'+'br/>').replace(
// /v/, pp[k].sum /*sum*/
// )
// + 'v / v'.replaceAll(
// /v/, e, /v/, ppPaste(pp)
// )
// + '<'+'br/>--- abs(log(sum))' + Math.abs(Math.log(heightsum * matWidth + k * 2)/matWidth) + ' / sum' + heightsum
// + '<'+'br/> : abs(log(min/max))' + Math.abs(Math.log(heightmin / heightmax)) + ' min' + heightmin + ' max' + heightmax
// + '<'+'br/> : value' + heightvalue + ' ' + (heightvalue == goodvalue ? '***********found**********' : '')
// + '<'+'br/><'+'br/>';
// ov='<'+'table border=1><'+'tr><'+'/tr><'+'tr>';
ov = '<'+'table ><'+'tr><'+'/tr><'+'tr>';
ov2 = ov3 = ov4 = '<'+'tr>';
tv = '';
m = b.length;
btv = btrace(b, pp[0].start, pp[0].compend, pp[0].sum);
for (j = 0; j < bl; j++) {
d = b[j];
if (!e[j]) {
if (j) {
while (l < countmax) {
ov += '<'+'td><'+'/td>';
ov2 += '<'+'td><'+'/td>';
ov3 += '<'+'td><'+'/td>';
ov4 += '<'+'td><'+'/td>';
l++;
}
// document.write(ppPaste(pp));
ov += ('<'+'td>a<'+'/td><'+'td>b<'+'/td><'+'/tr>').replaceAll(/a/, '=(e-fg)/hi', /e/, matWidth, /f/, aA[l + 1], /g/, m + 3 + k * 5, /h/, aA[l + 1], /i/, m + 4 + k * 5, /b/, '=jk*2', /j/, aA[l + 2], /k/, m + 4 + k * 5);
ov2 += ('<'+'td>a<'+'/td><'+'td>b<'+'/td><'+'td>c<'+'/td><'+'/tr>').replaceAll(/a/, btv, /b/, '=SUM(ef:gh)', /e/, aA[0], /f/, m + 4 + k * 5, /g/, aA[l - 1], /h/, m + 4 + k * 5, /c/, '=COUNT(ij:kl)-1', /i/, aA[0], /j/, m + 4 + k * 5, /k/, aA[l - 1], /l/, m + 4 + k * 5);
// /a/, 1, /b/, '=SUM(ef:gh)', /e/, aA[0], /f/, m + 4 + k * 5, /g/, aA[l - 1], /h/, m + 4 + k * 5, /c/, '=COUNT(ij:kl)-1', /i/, aA[0], /j/, m + 4 + k * 5, /k/, aA[l - 1], /l/, m + 4 + k * 5);
ov3 += ('<'+'td>a<'+'/td><'+'/tr>').replaceAll(/a/, '=SUM(ef:gh)+ij', /e/, aA[0], /f/, m + 5 + k * 5, /g/, aA[l - 1], /h/, m + 5 + k * 5, /i/, aA[l + 1], /j/, m + 3 + k * 5);
ov4 += ('<'+'td><'+'/td><'+'td>a<'+'/td><'+'/tr>').replaceAll(/a/, (k ? '=INT(ef+gh)+2' : '0'), /e/, aA[l + 1], /f/, m + 1 + k * 5, /g/, aA[l], /h/, m - 1 + k * 5);
ov += ov2 + ov3 + ov4 + '<'+'tr><'+'/tr>';
ov2 = ov3 = ov4 = '<'+'tr>';
k++; // line's count
topv += parseInt(btv) + 2;
btv = btrace(b, pp[k].start, pp[k].compend, pp[k].sum);
leftv = 0;
l = 0; // column position reset
}
}
tv += a[j * 3] + '\r\n' + a[j * 3 + 1] + '\r\n' + a[j * 3 + 2].replaceAll(/^[^,]*,[^,]*,[^,]*,[^,)]*([,)])/, 'a, b, c, d$1 ',
// +a[j*3+2].replaceAll(/^.*,.*,.*,.*([,)])/, 'a, b, c, d$1 ',
/a/, leftv, /b/, topv, /c/, parseInt(btv * b[j].wRate), /d/, parseInt(btv)) + '\r\n';
leftv += parseInt(btv * b[j].wRate) + 2;
ov += ('<'+'td>v<'+'/td>').replace(/v/, d.title);
ov2 += ('<'+'td>v<'+'/td>').replaceAll(/v/, '=LOOKUP(ea, $A$1:$A$b, $D$1:$D$c)', /e/, aA[l], /a/, m + 3 + k * 5, /b/, m, /c/, m);
ov3 += ('<'+'td>v<'+'/td>').replaceAll(/v/, '=INT(ea*$bc)', /e/, aA[l], /a/, m + 4 + k * 5, /b/, aA[countmax], /c/, m + 4 + k * 5);
ov4 += ('<'+'td>v<'+'/td>').replaceAll(/v/, (l ? '=ab+ce+2' : '0'), /a/, aA[l - 1], /b/, m + 5 + k * 5, /c/, aA[l - 1], /e/, m + 6 + k * 5);
l++; // td's count before countmax
}
// btv=btrace(b, pp[k].start, pp[k].compend, pp[k].sum);
while (l < countmax) {
ov += '<'+'td><'+'/td>';
ov2 += '<'+'td><'+'/td>';
ov3 += '<'+'td><'+'/td>';
ov4 += '<'+'td><'+'/td>';
l++;
}
ov += ('<'+'td>a<'+'/td><'+'td>b<'+'/td><'+'/tr>').replaceAll(/a/, '=(e-fg)/hi', /e/, matWidth, /f/, aA[l + 1], /g/, m + 3 + k * 5, /h/, aA[l + 1], /i/, m + 4 + k * 5, /b/, '=jk*2', /j/, aA[l + 2], /k/, m + 4 + k * 5);
ov2 += ('<'+'td>a<'+'/td><'+'td>b<'+'/td><'+'td>c<'+'/td><'+'/tr>').replaceAll(/a/, btv, /b/, '=SUM(ef:gh)', /e/, aA[0], /f/, m + 4 + k * 5, /g/, aA[l - 1], /h/, m + 4 + k * 5, /c/, '=COUNT(ij:kl)-1', /i/, aA[0], /j/, m + 4 + k * 5, /k/, aA[l - 1], /l/, m + 4 + k * 5);
// /a/, 1, /b/, '=SUM(ef:gh)', /e/, aA[0], /f/, m + 4 + k * 5, /g/, aA[l - 1], /h/, m + 4 + k * 5, /c/, '=COUNT(ij:kl)-1', /i/, aA[0], /j/, m + 4 + k * 5, /k/, aA[l - 1], /l/, m + 4 + k * 5);
ov3 += ('<'+'td>a<'+'/td><'+'/tr>').replaceAll(/a/, '=SUM(ef:gh)+ij', /e/, aA[0], /f/, m + 5 + k * 5, /g/, aA[l - 1], /h/, m + 5 + k * 5, /i/, aA[l + 1], /j/, m + 3 + k * 5);
ov4 += ('<'+'td><'+'/td><'+'td>a<'+'/td><'+'/tr>').replaceAll(/a/, (k ? '=INT(ef+gh)+2' : '0'), /e/, aA[l + 1], /f/, m + 1 + k * 5, /g/, aA[l], /h/, m - 1 + k * 5);
ov += ov2 + ov3 + ov4 + '<'+'tr><'+'/tr><'+'tr><'+'td colspan=' + (countmax + 3) + '> <'+'/td><'+'/tr><'+'/table>';
if (heightvalue == goodvalue) {
tvFinal = tv;
ovFinal = ov;
}
}
// end of while
document.getElementById('output2_120918_1').innerHTML = ovFinal;
document.getElementById('output3_120918_1').innerText = tvFinal;
m = document.selection.createRange();
m.moveToElementText(document.getElementById('selectArea_120918_1'));
if (l > 0) if (confirm('select?')) m.select();
// if (prompt('select?')) m.select();
})();
// end of second function action
}
</script>
<textarea onclick=textpharse_120918_1(this); >'_2012-05-25-17.41.48.jpg',
'_2012-05-25-17.41.48.jpg documents...',
0, 0, 134, 100, 1019, 768,
'_2012-05-26-18.57.34.jpg',
'_2012-05-26-18.57.34.jpg documents...',
135, 0, 134, 100, 992, 768,
'_2012-05-26-19.24.59.jpg',
'_2012-05-26-19.24.59.jpg documents...',
270, 0, 134, 100, 1013, 768,
'_2012-05-26-19.30.57.jpg',
'_2012-05-26-19.30.57.jpg documents...',
405, 0, 134, 100, 1013, 768,
'_2012-05-26-19.33.35.jpg',
'_2012-05-26-19.33.35.jpg documents...',
0, 101, 179, 134, 1024, 768,
'_2012-05-26-19.33.42_47_52_57_34.01_06_12.jpg',
'_2012-05-26-19.33.42_47_52_57_34.01_06_12.jpg documents...',
180, 101, 179, 134, 1368, 2000,
'_2012-05-26-22.25.58.jpg',
'_2012-05-26-22.25.58.jpg documents...',
360, 101, 179, 134, 1011, 768,
'_2012-05-26-22.40.02.jpg',
'_2012-05-26-22.40.02.jpg documents...',
0, 236, 179, 134, 1002, 768,
'_2012-05-26-22.43.21.jpg',
'_2012-05-26-22.43.21.jpg documents...',
180, 236, 179, 134, 1024, 768,
'_2012-05-26-23.54.52.jpg',
'_2012-05-26-23.54.52.jpg documents...',
360, 236, 179, 134, 982, 768)
</textarea>
<div id=selectArea_120918_1>
<div id=output_120918_1></div>
<div id=output2_120918_1></div>
</div>
<hr/>
output<br/><textarea id=output3_120918_1 onclick=this.select(); ></textarea>
...
3)
output
...
4)
부분부분 설명하자면,
**
String.prototype.intParse = function() { .. }
String.prototype.replaceAll = function() { .. }
String 에 prototype 선언해서, .. trail 타입으로 적용하도록 했습니다.
**
function textpharse_120918_1(iv) { .. }
클릭하면 작동(?) 시작합니다.
.. 사실 외부(textarea onclick=.. )에서 부르는 함수는 요거 하나밖에 없어요.
**
// block's outer size.. = width - > maximum size, height : for getting size..
,matWidth = 540,matHeight = 540;
표준규격(?)으로 정해놓은 크기입니다.
요걸 어떻게든 편하게 표현할 수 있도록 하는 게 문제겠군요..
(아직 object 형식으로 표현하는 것은 생각지 않고 있습니다..)
**
if (!v) v = iv.value;
chrome 용으로 임시 추가한 내용입니다.
chrome 에서는 textarea 의 값이 .innerText 가 아니라 .value 더라구요.
.. IE8 에서 속도문제(-.-..)때문에 작동 못할 땐 chrome 이라도 빌려(?)야하니까요..
**
// div lines (no check version (as string with numeric) )
..
샘플.. 내용을 읽으실 수 있다면 아시겠지만,
내용물의 구분을 LineFeed, CarriageReturn 등으로 하고 있습니다. ( .push(..) )
SPace 도 있긴 합니다만, 그건 마지막 글자 체크한다고 넣어둔 거라고 알고있습니다.
**
c = {};
..
각 항목의 .title .nums ..을 저장하는 곳입니다.
, 'image src'
, 'image document'
, position let, position top, position width, position height, original width, original height [,oPL, oPT, oPW, oPH] ..
요런 순서라서요..
.title 에 들어가는 값에 가공한 흔적(?)이 있는데요,
그건 상황에 따라 값을 넣으면 될거라 생각됩니다.
(요것도 어떻게는 일반화 시켜야할 항목입니다.. 사진기마다 저장하는 파일명, 파일형식이 다 달라서요..)
**
wRateAll = 0;
..
.title 에 이어서, .left .top .width .height .owidth .oheight .. 를 저장하는 곳입니다.
wRateAll 은 전체값들의 세로대비 가로비율이죠. 가로로 나열한 후 최적화시킬 거라서요..
세로로 길쭉한 것도 포함해보고 싶었습니다만,
.. 아직 적용할 방법을 찾지 못해서요..
**
ov = // 'default : v<'+'br/><'+'br/>
('<'+'table>').replace(/v/, (wRateHalfDefault = Math.sqrt(wRateAll) / wRateHalfDefaultMinRate) * wRateHalfDefaultMinRate);
본격적으로 값 입력하기 시작입니다.
.. 사실은 저 땐 <table> 요것만 들어가죠.
v 값을 넣어둔 것은, 나중에 테스트용으로 사용하지않을까..싶어서에요.
**
for (i = 0; i < b.length; i++) {
c = b[i];
..
각 사진들의 값들을 Excel 에 index 형식으로 올리는 곳입니다.
요 아래 보시면 아시겠지만, '=sum(D1:Da)'.replace(/a/, i) 같은 부분은
사진 전체 갯수에 맞춰 몇번째줄까지 합을 계산하라는 Excel 계산식이니까요.
Excel 로 보고, 계산이 안맞다(?) 싶으면, 부분부분부터 수정하려고 남겨놨던겁니다.
.. 물론, 요 덕을 잘 보고 있습니다 ㅜ.ㅜ.. (버그가 있다는 얘기죠..)
**
document.getElementById('output_120918_1').innerHTML = ov;
그래서, 집계된 내용은 첫번째 출력물로 보냅니다.
Excel 용 index 죠.
**
// after set prevalues
(function() {
..
본격적으로 시작하는 내용입니다.
이 이후에는 사각틀의 위치분석도 할겁니다.
**
function ppPaste(ppv) { .. }
중간중간 함수체크용으로 냅뒀습니다.
어디에서 어느 값이 어떻게 변하는지 체크할 필요가 있더라구요.
**
function s2cDiv(v) { .. }
EXCEL 줄 말고 칸의 string 표시용으로 남겨놨습니다.
string 의 charAt() 기능을 써도 됩니다만,
그래도 array[0]='A'..형식이 빠를 것 같아서요..
1회용(?) 변환함수이긴 한데, 의미상으로 남겨놨다..는게 맞겠네요.
**
function twinmin(min, max) { .. }
min 값보다 크고, max 값에 가까운
글자상으로 최대한 작은 숫자를 찾으려고 한거죠.
btrace 에서 출력값 마무리할 때 씁니다.
**
function btrace(bv, start, end, sum) { .. }
줄별(?)로 계산해보는 단계입니다.
표시될 사진 번호범위를 정해서, 대략값을 잡고 (보통, 이 값은 최대가로크기보다 작습니다..)
대략값에서 몇번재 커진 값인지, 그리고 그 범위를 찾아
최적값을 출력하는거죠.
( .sort() 가 왜 있었는지 이제야 이해가 되는군요.. )
물론, 정확도(같은 두께의 값이 나타날 확률..)에서 문제가 있긴 합니다만,
.sort() 의 속도만 받아준다면, 크게 문제가 안되겠..다는 생각으로 만들어둔겁니다.
**
// loop getter (by dim's bit..)
..
loop 도는 동안, 정의될 블록나누기 지점 변환과정입니다.
일종의 카운터이긴 한데요, .. 2진화 시켜놨더니, 느리긴 느라더라구요.
최소갯수의 법칙..을 미리 만들어둘 수 없는게 좀 문제긴 했군요..
1이면 다음줄 연장, 0이면 그 곳에서 끊긴다는 내용입니다.
**
// line checker
..
돌 때마다 object 를 만들어 line 을 표시하는군요..
같은 범위일 때..라는 조건을 넣는다면
다시쓰는 방법으로 최적화될 수 있을텐데..라는 아쉬움이 있습니다.
**
// precheck
..
본격적으로 계산하기 전에 준비운동(?)한다는 내용인데요..
규격(?)이 생각과 너무 차이나면 건너띄고 (.. 처리시간 줄인다고 넣은 코드네요..)
그렇지 않다면 하던 준비 마저 한다는 내용이네요.
**
..
if (heightvalue < goodvalue) { .. }
..
최적화율을 체크하는 곳입니다.
이후 공정은 냅두더라도, 기록 준비시작하는 곳이죠.
**
ov = '<'+'table ><'+'tr><'+'/tr><'+'tr>';
..
기록 시작입니다.
**
btv = btrace(b, pp[0].start, pp[0].compend, pp[0].sum);
최적화 높이 받아서
**
if (!e[j]) {
..
ov += ('<'+'td>a<'+'/td><'+'td>b<'+'/td><'+'/tr>').replaceAll(/a/, '=(e-fg)/hi', /e/, matWidth, /f/, aA[l + 1], /g/, m + 3 + k * 5, /h/, aA[l + 1], /i/, m + 4 + k * 5, /b/, '=jk*2', /j/, aA[l + 2], /k/, m + 4 + k * 5);
..
끊는 위치이면 남은 공간 채워넣고 마무리하도록 하고,
**
tv += a[j * 3] + '\r\n' + a[j * 3 + 1] + '\r\n' + a[j * 3 + 2].replaceAll(/^[^,]*,[^,]*,[^,]*,[^,)]*([,)])/, 'a, b, c, d$1 ',
// +a[j*3+2].replaceAll(/^.*,.*,.*,.*([,)])/, 'a, b, c, d$1 ',
/a/, leftv, /b/, topv, /c/, parseInt(btv * b[j].wRate), /d/, parseInt(btv)) + '\r\n';
excel 쪽 말고, 원본변환용으로 준비도 하고
**
ov += ('<'+'td>v<'+'/td>').replace(/v/, d.title);
..
줄별 칸도 준비하고..해서
**
if (heightvalue == goodvalue) { .. }
값이 맞으면(?) 적용 최우선순위 맞춰놓고
**
document.getElementById('output2_120918_1').innerHTML = ovFinal;
document.getElementById('output3_120918_1').innerText = tvFinal;
excel 용 한부(?), 원본변환용 한부 적용시킨 후
**
m = document.selection.createRange();
m.moveToElementText(document.getElementById('selectArea_120918_1'));
if (l > 0) if (confirm('select?')) m.select();
..
excel 용 한부 복사범위 잡겠느냐고 질문 던져(?)서,
되면 복사범위를 잡습니다.
...
5)
위에 적어놓은
써먹은 범위 다시쓰기라든지,
세로 길쭉하게 적용 가능하게 한다든지..
아직 replace 를 적용하지 못한 부분을 적용해본다든지..같은
좀 복잡(?)한 숙제들이 남아있습니다만,
= =;.. 글쎄요.. 언제쯤 다시 재개할지는 모르겠네요.
easyBow killofki@.
기존에 블럭식배치를 구성하고, 표현하는 것 까지는 진행했습니다만,
그 이후(?), 이 내용들을 어떻게 더 편하게(?) 쓸 수 있을까..를 고민해오다가
.. 만들고나니 편하긴(?) 합니다만,
(만들기 이전까지는 배치에만 몇시간을 매달려있었죠.. 지금은 배치만에 걸리는 시간이 30분 이내입니다..)
.. 이걸 설명하려고 하니 또 한세월 걸리겠군요..
최적화 작업은 나중으로 미루더라도,
적어놓는 것이 우선일 것 같아 올립니다.
...
2)
<script>
// init String's Function..
(function() {
// parseInt's trail version..
String.prototype.intParse = function() {
return parseInt(this);
}
// appending replace..
String.prototype.replaceAll = function() {
var ov = this,
i, ar = arguments,
arl = ar.length;
for (i = 0; i < arl; i += 2) {
ov = ov.replace(ar[i], ar[i + 1]);
}
return ov;
}
})();
// alert('1,2,3,4,'.replaceAll(/^\s*.*\s*,\s*.*\s*,\s*.*\s*,\s*.*\s*,/, '1'));
// on click, action & for Excel and prev source's converting..
function textpharse_120918_1(iv) {
var i, a = [],
v = document.all ? iv.innerHTML : iv.textContent,
c, li, sv, b = [],
j, ov, wRateAll, wRateHalfDefault, wRateHalfDefaultMinRate = 2
// block's outer size.. = width - > maximum size, height : for getting size..
,
matWidth = 540,
matHeight = 540;
if (!v) v = iv.value;
// div lines (no check version (as string with numeric) )
li = 0;
for (i = 0; i < v.length; i++) {
switch (c = v.charCodeAt(i)) {
case 10:
sv = v.substring(li, ei + 1);
if (sv.charCodeAt(0) > 32) a.push(sv);
ei = (li = i + 1);
break;
case 13:
sv = v.substring(li, ei + 1);
if (sv.charCodeAt(0) > 32) a.push(sv);
ei = (li = i + 1);
break;
case 32:
if (li == i) li++;
break;
default:
ei = i;
break;
}
}
if (li < i) {
sv = v.substring(li, ei + 1);
if (sv.charCodeAt(0) > 32) a.push(sv);
} // if no ending push, push..
c = {};
for (i = 0; i < a.length; i++) {
switch (i % 3) {
// case 0 : c.title=(a[i].substr(2, 3)).replace(/_/g, '.'); break;
// case 0 : c.title=(a[i].substr(1, 2)).replace(/_/g, '.'); break;
// case 0 : c.title=(a[i].substr(7, a[i].length-13)).replace(/_/g, '.'); break;
case 0:
c.title = (a[i].substr(10, a[i].length - 16)).replace(/_/g, '.');
break;
case 1:
break;
case 2:
if (a[i].charAt(a[i].length - 1) == ')') c.nums = a[i].substring(0, a[i].length - 1) + ',';
else
c.nums = a[i];
b.push(c); // b[b.length]=c;
c = {}; // c=new Object();
break;
}
}
wRateAll = 0;
for (i = 0; i < b.length; i++) {
c = b[i];
sv = c.nums;
li = sv.indexOf(',');
c.left = sv.substring(0, li).intParse();
j = sv.indexOf(',', li + 1);
c.top = sv.substring(li + 1, j).intParse();
li = sv.indexOf(',', j + 1);
c.width = sv.substring(j + 1, li).intParse();
j = sv.indexOf(',', li + 1);
c.height = sv.substring(li + 1, j).intParse();
li = sv.indexOf(',', j + 1);
c.owidth = sv.substring(j + 1, li).intParse();
j = sv.indexOf(',', li + 1);
c.oheight = sv.substring(li + 1, j).intParse();
wRateAll += (c.wRate = c.owidth / c.oheight);
}
ov = // 'default : v<'+'br/><'+'br/>
('<'+'table>').replace(/v/, (wRateHalfDefault = Math.sqrt(wRateAll) / wRateHalfDefaultMinRate) * wRateHalfDefaultMinRate);
for (i = 0; i < b.length; i++) {
c = b[i];
ov += '<'+'tr><'+'td>' + c.title + '<'+'/td><'+'td>' + c.owidth + '<'+'/td><'+'td>' + c.oheight + '<'+'/td><'+'td>=b' + (i + 1) + '/c' + (i + 1) + '<'+'/td><'+'td>=d' + (i + 1) + '/1.5<'+'/td><'+'/tr>';
}
ov += ('<'+'tr>fff<'+'td>c<'+'/td><'+'td>e<'+'/td>').replaceAll(/f/g, '<'+'td><'+'/td>', /c/, '=sum(D1:Da)', /a/, i, /e/, '=sum(E1:Ea)', /a/, i) + '<'+'/tr>';
ov += '<'+'/table>';
document.getElementById('output_120918_1').innerHTML = ov;
// after set prevalues
(function() {
function ppPaste(ppv) {
var ov = '',
i, ppvl = ppv.length;
for (i = 0; i < ppvl; i++) {
ov += '<'+'br/>' + (ov ? ',' : '') + 'a~b/c:d = e'.replaceAll(/a/, ppv[i].start, /b/, ppv[i].compend, /c/, ppv[i].sum, /d/, ppv[i].gabcount, /e/, ppv[i].height);
}
return ov;
}
function s2cDiv(v) {
var ov = [],
vl = v.length;
for (i = 0; i < vl; i++) {
ov[i] = v.charAt(i);
}
return ov;
}
var bta = [],
btaU = [];
function twinmin(min, max) {
var p, dv, q, r, s = 0;
if (min >= max) {
// document.write(('<'+'br/><'+'br/>--!! minc maxd<'+'br/><'+'br/> ').replaceAll(/c/, min, /d/, max));
return max;
}
p = parseInt(Math.log(max) / Math.log(10));
while (1) {
dv = 1;
for (q = p; q > 0; q--) dv *= 10;
for (q = p; q < 0; q++) dv /= 10;
r = parseInt(max / dv) * dv;
if (r >= max) r -= dv;
// document.write('<'+'br/>pa sb re minc maxd/ '.replaceAll(/a/, p, /b/, s, /e/, r, /c/, min, /d/, max));
if (r > min) {
// document.write('<'+'br/>');
return s + r;
}
s += r;
min -= r;
max -= r;
p--;
}
return min;
}
function btrace(bv, start, end, sum) {
var i, isum = 0,
p, j, iput;
for (i = start; i < end; i++) {
isum += (bta[i] = parseInt(bv[i].wRate * (matWidth - (end - start - 1) * 2) / sum));
btaU[i - start] = (bta[i] + 1) / bv[i].wRate;
}
btaU.length = end - start;
btaU.sort();
p = matWidth - (end - start - 1) * 2 - isum;
for (j = p - 1; j >= 0; j--) {
if (btaU[j] != btaU[p]) break;
}
// document.write((j>=0)?('*ja [j]d pb [p]e <'+'br/>').replaceAll( /a/, j, /d/, btaU[j], /b/, p, /e/, btaU[p]):('minc *pb [p]e <'+'br/>').replaceAll( /b/, p, /e/, btaU[p], /c/, (matWidth-(end-start-1)*2)/sum));
iput = (j >= 0 ? twinmin(btaU[j], btaU[p]) : twinmin((matWidth - (end - start - 1) * 2) / sum, btaU[p]));
return iput;
}
var
d, e = [],
pp = [],
f, i, j, k, leftv, topv, l, m, sum, gabcount, countmax, heightsum, heightmin, heightmax, heigthv, heightvalue, goodvalue, bl = b.length,
ov, ov2, ov3, ov4, tv, tvFinal = '',
ovFinal = '',
aA = s2cDiv('ABCDEFGHIJKLMNOPQRSTUVWXYZ'),
btv;
for (i = 1; i < bl; i++) {
e[i] = 0;
}
i = 1;
goodvalue = 10; // for getting..
// start of while
while (i < bl) {
// loop getter (by dim's bit..)
if (e[i]) {
e[i] = 0;
i++;
continue;
} else {
e[i] = 1;
i = 1;
}
// line checker
pp[k = 0] = l = {};
l.start = 0;
for (j = 1; j < bl; j++) {
if (e[j]) continue;
l.compend = j;
k++;
pp[k] = l = {};
l.start = j;
}
l.compend = j;
k++;
pp.length = k;
// end of line checker
sum = 0;
gabcount = 0;
countmax = 6;
heightsum = 0;
heightmin = heightmax = 0; // for check
k = 0;
// precheck
for (j = 0; j < bl; j++) {
d = b[j]; // from out's value
if ((j) && (!e[j])) {
if (sum < wRateHalfDefault) break; // if line's sum<(sqrt(wRateAll)/wRateHalfDefaultMinRate), stop checking..
pp[k].sum = sum;
pp[k].gabcount = gabcount;
heightsum += (
heightv = pp[k].height = (matWidth - gabcount * 2) / pp[k].sum / matWidth);
if (!heightmin) {
heightmin = heightv;
heightmax = heightv;
} else {
if (heightv < heightmin) heightmin = heightv;
else if (heightv > heightmax) heightmax = heightv;
}
k++;
sum = d.wRate;
gabcount = 0;
} else {
sum += d.wRate;
gabcount++;
}
}
pp[k].sum = sum;
pp[k].gabcount = gabcount;
heightsum += (
heightv = pp[k].height = (matWidth - gabcount * 2) / pp[k].sum / matWidth);
if (!heightmin) {
heightmin = heightv;
heightmax = heightv;
} else {
if (heightv < heightmin) heightmin = heightv;
else if (heightv > heightmax) heightmax = heightv;
}
if (gabcount > countmax) countmax = gabcount;
k++;
// if (j)
if (sum < wRateHalfDefault) {
// ov+='!'+sum+'!'
continue; // step to next..
}
// end of precheck & precompute
heightvalue =
Math.abs(Math.log((heightsum * matWidth + k * 2) / matHeight)) + Math.abs(Math.log(heightmin / heightmax));
if (goodvalue == 10) {
goodvalue = heightvalue;
// please set value
} else {
if (heightvalue < goodvalue) {
goodvalue = heightvalue;
// please set value
}
}
//sum=0;
k = 0;
topv = 0;
leftv = 0;
l = 0;
// ov=''; // ready print..
//
//
// for (j = 0; j < bl; j++) {
// d = b[j]; // from out's value
// if (!e[j]) { // j's rate is more few than e[j]..
// if (j) {
// ov += ('(v)<'+'br/>').replace(/v/, pp[k].sum /* sum */ );
// k++;
// }
// }
// ov += d.title.substring(0, 8) + ' / '; /* sum=(e[j]?sum:0)+d.wRate;*/
// // +d.owidth+' '+d.oheight+' '+(d.owidth/d.oheight)+' / ';
// }
//
// ov += ('(v)<'+'br/>').replace(
// /v/, pp[k].sum /*sum*/
// )
// + 'v / v'.replaceAll(
// /v/, e, /v/, ppPaste(pp)
// )
// + '<'+'br/>--- abs(log(sum))' + Math.abs(Math.log(heightsum * matWidth + k * 2)/matWidth) + ' / sum' + heightsum
// + '<'+'br/> : abs(log(min/max))' + Math.abs(Math.log(heightmin / heightmax)) + ' min' + heightmin + ' max' + heightmax
// + '<'+'br/> : value' + heightvalue + ' ' + (heightvalue == goodvalue ? '***********found**********' : '')
// + '<'+'br/><'+'br/>';
// ov='<'+'table border=1><'+'tr><'+'/tr><'+'tr>';
ov = '<'+'table ><'+'tr><'+'/tr><'+'tr>';
ov2 = ov3 = ov4 = '<'+'tr>';
tv = '';
m = b.length;
btv = btrace(b, pp[0].start, pp[0].compend, pp[0].sum);
for (j = 0; j < bl; j++) {
d = b[j];
if (!e[j]) {
if (j) {
while (l < countmax) {
ov += '<'+'td><'+'/td>';
ov2 += '<'+'td><'+'/td>';
ov3 += '<'+'td><'+'/td>';
ov4 += '<'+'td><'+'/td>';
l++;
}
// document.write(ppPaste(pp));
ov += ('<'+'td>a<'+'/td><'+'td>b<'+'/td><'+'/tr>').replaceAll(/a/, '=(e-fg)/hi', /e/, matWidth, /f/, aA[l + 1], /g/, m + 3 + k * 5, /h/, aA[l + 1], /i/, m + 4 + k * 5, /b/, '=jk*2', /j/, aA[l + 2], /k/, m + 4 + k * 5);
ov2 += ('<'+'td>a<'+'/td><'+'td>b<'+'/td><'+'td>c<'+'/td><'+'/tr>').replaceAll(/a/, btv, /b/, '=SUM(ef:gh)', /e/, aA[0], /f/, m + 4 + k * 5, /g/, aA[l - 1], /h/, m + 4 + k * 5, /c/, '=COUNT(ij:kl)-1', /i/, aA[0], /j/, m + 4 + k * 5, /k/, aA[l - 1], /l/, m + 4 + k * 5);
// /a/, 1, /b/, '=SUM(ef:gh)', /e/, aA[0], /f/, m + 4 + k * 5, /g/, aA[l - 1], /h/, m + 4 + k * 5, /c/, '=COUNT(ij:kl)-1', /i/, aA[0], /j/, m + 4 + k * 5, /k/, aA[l - 1], /l/, m + 4 + k * 5);
ov3 += ('<'+'td>a<'+'/td><'+'/tr>').replaceAll(/a/, '=SUM(ef:gh)+ij', /e/, aA[0], /f/, m + 5 + k * 5, /g/, aA[l - 1], /h/, m + 5 + k * 5, /i/, aA[l + 1], /j/, m + 3 + k * 5);
ov4 += ('<'+'td><'+'/td><'+'td>a<'+'/td><'+'/tr>').replaceAll(/a/, (k ? '=INT(ef+gh)+2' : '0'), /e/, aA[l + 1], /f/, m + 1 + k * 5, /g/, aA[l], /h/, m - 1 + k * 5);
ov += ov2 + ov3 + ov4 + '<'+'tr><'+'/tr>';
ov2 = ov3 = ov4 = '<'+'tr>';
k++; // line's count
topv += parseInt(btv) + 2;
btv = btrace(b, pp[k].start, pp[k].compend, pp[k].sum);
leftv = 0;
l = 0; // column position reset
}
}
tv += a[j * 3] + '\r\n' + a[j * 3 + 1] + '\r\n' + a[j * 3 + 2].replaceAll(/^[^,]*,[^,]*,[^,]*,[^,)]*([,)])/, 'a, b, c, d$1 ',
// +a[j*3+2].replaceAll(/^.*,.*,.*,.*([,)])/, 'a, b, c, d$1 ',
/a/, leftv, /b/, topv, /c/, parseInt(btv * b[j].wRate), /d/, parseInt(btv)) + '\r\n';
leftv += parseInt(btv * b[j].wRate) + 2;
ov += ('<'+'td>v<'+'/td>').replace(/v/, d.title);
ov2 += ('<'+'td>v<'+'/td>').replaceAll(/v/, '=LOOKUP(ea, $A$1:$A$b, $D$1:$D$c)', /e/, aA[l], /a/, m + 3 + k * 5, /b/, m, /c/, m);
ov3 += ('<'+'td>v<'+'/td>').replaceAll(/v/, '=INT(ea*$bc)', /e/, aA[l], /a/, m + 4 + k * 5, /b/, aA[countmax], /c/, m + 4 + k * 5);
ov4 += ('<'+'td>v<'+'/td>').replaceAll(/v/, (l ? '=ab+ce+2' : '0'), /a/, aA[l - 1], /b/, m + 5 + k * 5, /c/, aA[l - 1], /e/, m + 6 + k * 5);
l++; // td's count before countmax
}
// btv=btrace(b, pp[k].start, pp[k].compend, pp[k].sum);
while (l < countmax) {
ov += '<'+'td><'+'/td>';
ov2 += '<'+'td><'+'/td>';
ov3 += '<'+'td><'+'/td>';
ov4 += '<'+'td><'+'/td>';
l++;
}
ov += ('<'+'td>a<'+'/td><'+'td>b<'+'/td><'+'/tr>').replaceAll(/a/, '=(e-fg)/hi', /e/, matWidth, /f/, aA[l + 1], /g/, m + 3 + k * 5, /h/, aA[l + 1], /i/, m + 4 + k * 5, /b/, '=jk*2', /j/, aA[l + 2], /k/, m + 4 + k * 5);
ov2 += ('<'+'td>a<'+'/td><'+'td>b<'+'/td><'+'td>c<'+'/td><'+'/tr>').replaceAll(/a/, btv, /b/, '=SUM(ef:gh)', /e/, aA[0], /f/, m + 4 + k * 5, /g/, aA[l - 1], /h/, m + 4 + k * 5, /c/, '=COUNT(ij:kl)-1', /i/, aA[0], /j/, m + 4 + k * 5, /k/, aA[l - 1], /l/, m + 4 + k * 5);
// /a/, 1, /b/, '=SUM(ef:gh)', /e/, aA[0], /f/, m + 4 + k * 5, /g/, aA[l - 1], /h/, m + 4 + k * 5, /c/, '=COUNT(ij:kl)-1', /i/, aA[0], /j/, m + 4 + k * 5, /k/, aA[l - 1], /l/, m + 4 + k * 5);
ov3 += ('<'+'td>a<'+'/td><'+'/tr>').replaceAll(/a/, '=SUM(ef:gh)+ij', /e/, aA[0], /f/, m + 5 + k * 5, /g/, aA[l - 1], /h/, m + 5 + k * 5, /i/, aA[l + 1], /j/, m + 3 + k * 5);
ov4 += ('<'+'td><'+'/td><'+'td>a<'+'/td><'+'/tr>').replaceAll(/a/, (k ? '=INT(ef+gh)+2' : '0'), /e/, aA[l + 1], /f/, m + 1 + k * 5, /g/, aA[l], /h/, m - 1 + k * 5);
ov += ov2 + ov3 + ov4 + '<'+'tr><'+'/tr><'+'tr><'+'td colspan=' + (countmax + 3) + '> <'+'/td><'+'/tr><'+'/table>';
if (heightvalue == goodvalue) {
tvFinal = tv;
ovFinal = ov;
}
}
// end of while
document.getElementById('output2_120918_1').innerHTML = ovFinal;
document.getElementById('output3_120918_1').innerText = tvFinal;
m = document.selection.createRange();
m.moveToElementText(document.getElementById('selectArea_120918_1'));
if (l > 0) if (confirm('select?')) m.select();
// if (prompt('select?')) m.select();
})();
// end of second function action
}
</script>
<textarea onclick=textpharse_120918_1(this); >'_2012-05-25-17.41.48.jpg',
'_2012-05-25-17.41.48.jpg documents...',
0, 0, 134, 100, 1019, 768,
'_2012-05-26-18.57.34.jpg',
'_2012-05-26-18.57.34.jpg documents...',
135, 0, 134, 100, 992, 768,
'_2012-05-26-19.24.59.jpg',
'_2012-05-26-19.24.59.jpg documents...',
270, 0, 134, 100, 1013, 768,
'_2012-05-26-19.30.57.jpg',
'_2012-05-26-19.30.57.jpg documents...',
405, 0, 134, 100, 1013, 768,
'_2012-05-26-19.33.35.jpg',
'_2012-05-26-19.33.35.jpg documents...',
0, 101, 179, 134, 1024, 768,
'_2012-05-26-19.33.42_47_52_57_34.01_06_12.jpg',
'_2012-05-26-19.33.42_47_52_57_34.01_06_12.jpg documents...',
180, 101, 179, 134, 1368, 2000,
'_2012-05-26-22.25.58.jpg',
'_2012-05-26-22.25.58.jpg documents...',
360, 101, 179, 134, 1011, 768,
'_2012-05-26-22.40.02.jpg',
'_2012-05-26-22.40.02.jpg documents...',
0, 236, 179, 134, 1002, 768,
'_2012-05-26-22.43.21.jpg',
'_2012-05-26-22.43.21.jpg documents...',
180, 236, 179, 134, 1024, 768,
'_2012-05-26-23.54.52.jpg',
'_2012-05-26-23.54.52.jpg documents...',
360, 236, 179, 134, 982, 768)
</textarea>
<div id=selectArea_120918_1>
<div id=output_120918_1></div>
<div id=output2_120918_1></div>
</div>
<hr/>
output<br/><textarea id=output3_120918_1 onclick=this.select(); ></textarea>
...
3)
output
...
4)
부분부분 설명하자면,
**
String.prototype.intParse = function() { .. }
String.prototype.replaceAll = function() { .. }
String 에 prototype 선언해서, .. trail 타입으로 적용하도록 했습니다.
**
function textpharse_120918_1(iv) { .. }
클릭하면 작동(?) 시작합니다.
.. 사실 외부(textarea onclick=.. )에서 부르는 함수는 요거 하나밖에 없어요.
**
// block's outer size.. = width - > maximum size, height : for getting size..
,matWidth = 540,matHeight = 540;
표준규격(?)으로 정해놓은 크기입니다.
요걸 어떻게든 편하게 표현할 수 있도록 하는 게 문제겠군요..
(아직 object 형식으로 표현하는 것은 생각지 않고 있습니다..)
**
if (!v) v = iv.value;
chrome 용으로 임시 추가한 내용입니다.
chrome 에서는 textarea 의 값이 .innerText 가 아니라 .value 더라구요.
.. IE8 에서 속도문제(-.-..)때문에 작동 못할 땐 chrome 이라도 빌려(?)야하니까요..
**
// div lines (no check version (as string with numeric) )
..
샘플.. 내용을 읽으실 수 있다면 아시겠지만,
내용물의 구분을 LineFeed, CarriageReturn 등으로 하고 있습니다. ( .push(..) )
SPace 도 있긴 합니다만, 그건 마지막 글자 체크한다고 넣어둔 거라고 알고있습니다.
**
c = {};
..
각 항목의 .title .nums ..을 저장하는 곳입니다.
, 'image src'
, 'image document'
, position let, position top, position width, position height, original width, original height [,oPL, oPT, oPW, oPH] ..
요런 순서라서요..
.title 에 들어가는 값에 가공한 흔적(?)이 있는데요,
그건 상황에 따라 값을 넣으면 될거라 생각됩니다.
(요것도 어떻게는 일반화 시켜야할 항목입니다.. 사진기마다 저장하는 파일명, 파일형식이 다 달라서요..)
**
wRateAll = 0;
..
.title 에 이어서, .left .top .width .height .owidth .oheight .. 를 저장하는 곳입니다.
wRateAll 은 전체값들의 세로대비 가로비율이죠. 가로로 나열한 후 최적화시킬 거라서요..
세로로 길쭉한 것도 포함해보고 싶었습니다만,
.. 아직 적용할 방법을 찾지 못해서요..
**
ov = // 'default : v<'+'br/><'+'br/>
('<'+'table>').replace(/v/, (wRateHalfDefault = Math.sqrt(wRateAll) / wRateHalfDefaultMinRate) * wRateHalfDefaultMinRate);
본격적으로 값 입력하기 시작입니다.
.. 사실은 저 땐 <table> 요것만 들어가죠.
v 값을 넣어둔 것은, 나중에 테스트용으로 사용하지않을까..싶어서에요.
**
for (i = 0; i < b.length; i++) {
c = b[i];
..
각 사진들의 값들을 Excel 에 index 형식으로 올리는 곳입니다.
요 아래 보시면 아시겠지만, '=sum(D1:Da)'.replace(/a/, i) 같은 부분은
사진 전체 갯수에 맞춰 몇번째줄까지 합을 계산하라는 Excel 계산식이니까요.
Excel 로 보고, 계산이 안맞다(?) 싶으면, 부분부분부터 수정하려고 남겨놨던겁니다.
.. 물론, 요 덕을 잘 보고 있습니다 ㅜ.ㅜ.. (버그가 있다는 얘기죠..)
**
document.getElementById('output_120918_1').innerHTML = ov;
그래서, 집계된 내용은 첫번째 출력물로 보냅니다.
Excel 용 index 죠.
**
// after set prevalues
(function() {
..
본격적으로 시작하는 내용입니다.
이 이후에는 사각틀의 위치분석도 할겁니다.
**
function ppPaste(ppv) { .. }
중간중간 함수체크용으로 냅뒀습니다.
어디에서 어느 값이 어떻게 변하는지 체크할 필요가 있더라구요.
**
function s2cDiv(v) { .. }
EXCEL 줄 말고 칸의 string 표시용으로 남겨놨습니다.
string 의 charAt() 기능을 써도 됩니다만,
그래도 array[0]='A'..형식이 빠를 것 같아서요..
1회용(?) 변환함수이긴 한데, 의미상으로 남겨놨다..는게 맞겠네요.
**
function twinmin(min, max) { .. }
min 값보다 크고, max 값에 가까운
글자상으로 최대한 작은 숫자를 찾으려고 한거죠.
btrace 에서 출력값 마무리할 때 씁니다.
**
function btrace(bv, start, end, sum) { .. }
줄별(?)로 계산해보는 단계입니다.
표시될 사진 번호범위를 정해서, 대략값을 잡고 (보통, 이 값은 최대가로크기보다 작습니다..)
대략값에서 몇번재 커진 값인지, 그리고 그 범위를 찾아
최적값을 출력하는거죠.
( .sort() 가 왜 있었는지 이제야 이해가 되는군요.. )
물론, 정확도(같은 두께의 값이 나타날 확률..)에서 문제가 있긴 합니다만,
.sort() 의 속도만 받아준다면, 크게 문제가 안되겠..다는 생각으로 만들어둔겁니다.
**
// loop getter (by dim's bit..)
..
loop 도는 동안, 정의될 블록나누기 지점 변환과정입니다.
일종의 카운터이긴 한데요, .. 2진화 시켜놨더니, 느리긴 느라더라구요.
최소갯수의 법칙..을 미리 만들어둘 수 없는게 좀 문제긴 했군요..
1이면 다음줄 연장, 0이면 그 곳에서 끊긴다는 내용입니다.
**
// line checker
..
돌 때마다 object 를 만들어 line 을 표시하는군요..
같은 범위일 때..라는 조건을 넣는다면
다시쓰는 방법으로 최적화될 수 있을텐데..라는 아쉬움이 있습니다.
**
// precheck
..
본격적으로 계산하기 전에 준비운동(?)한다는 내용인데요..
규격(?)이 생각과 너무 차이나면 건너띄고 (.. 처리시간 줄인다고 넣은 코드네요..)
그렇지 않다면 하던 준비 마저 한다는 내용이네요.
**
..
if (heightvalue < goodvalue) { .. }
..
최적화율을 체크하는 곳입니다.
이후 공정은 냅두더라도, 기록 준비시작하는 곳이죠.
**
ov = '<'+'table ><'+'tr><'+'/tr><'+'tr>';
..
기록 시작입니다.
**
btv = btrace(b, pp[0].start, pp[0].compend, pp[0].sum);
최적화 높이 받아서
**
if (!e[j]) {
..
ov += ('<'+'td>a<'+'/td><'+'td>b<'+'/td><'+'/tr>').replaceAll(/a/, '=(e-fg)/hi', /e/, matWidth, /f/, aA[l + 1], /g/, m + 3 + k * 5, /h/, aA[l + 1], /i/, m + 4 + k * 5, /b/, '=jk*2', /j/, aA[l + 2], /k/, m + 4 + k * 5);
..
끊는 위치이면 남은 공간 채워넣고 마무리하도록 하고,
**
tv += a[j * 3] + '\r\n' + a[j * 3 + 1] + '\r\n' + a[j * 3 + 2].replaceAll(/^[^,]*,[^,]*,[^,]*,[^,)]*([,)])/, 'a, b, c, d$1 ',
// +a[j*3+2].replaceAll(/^.*,.*,.*,.*([,)])/, 'a, b, c, d$1 ',
/a/, leftv, /b/, topv, /c/, parseInt(btv * b[j].wRate), /d/, parseInt(btv)) + '\r\n';
excel 쪽 말고, 원본변환용으로 준비도 하고
**
ov += ('<'+'td>v<'+'/td>').replace(/v/, d.title);
..
줄별 칸도 준비하고..해서
**
if (heightvalue == goodvalue) { .. }
값이 맞으면(?) 적용 최우선순위 맞춰놓고
**
document.getElementById('output2_120918_1').innerHTML = ovFinal;
document.getElementById('output3_120918_1').innerText = tvFinal;
excel 용 한부(?), 원본변환용 한부 적용시킨 후
**
m = document.selection.createRange();
m.moveToElementText(document.getElementById('selectArea_120918_1'));
if (l > 0) if (confirm('select?')) m.select();
..
excel 용 한부 복사범위 잡겠느냐고 질문 던져(?)서,
되면 복사범위를 잡습니다.
...
5)
위에 적어놓은
써먹은 범위 다시쓰기라든지,
세로 길쭉하게 적용 가능하게 한다든지..
아직 replace 를 적용하지 못한 부분을 적용해본다든지..같은
좀 복잡(?)한 숙제들이 남아있습니다만,
= =;.. 글쎄요.. 언제쯤 다시 재개할지는 모르겠네요.
easyBow killofki@.
'image area' 카테고리의 다른 글
rotate] 이미지 회전시키기.. (0) | 2013.09.14 |
---|---|
filter & position in IE8] filter 적용범위에 관한 내용입니다. (0) | 2012.12.06 |
css] 구구단..? (0) | 2012.11.29 |
다중 스크롤바] ..를 적용해보고 싶었습니다. (0) | 2012.11.28 |
2진검색형트리] binary tree, insert & print for Web browser.. (0) | 2012.11.22 |