반응형

요즘 이미지 해상도가 매우 높아져서 이미지사이즈가 매우 크다. 파일업로드를 수행하는 서버에서는 네트워크 트래픽에 부하가 많이 발생하므로 이를 줄이는 방법 중 하나는 클라이언트에서 사이즈를 줄이는 방법이 있다.



HTML5 canvas로 이미지를 받을 경우 javascript에서 처리하는 방법이다.


1. 공통.js 나 해당 javascript 안에 선언


(function () {

    var matched, browser;

 

    // Use of jQuery.browser is frowned upon.

    // More details: http://api.jquery.com/jQuery.browser

    // jQuery.uaMatch maintained for back-compat

    jQuery.uaMatch = function (ua) {

        ua = ua.toLowerCase();

 

        var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||

            /(webkit)[ \/]([\w.]+)/.exec(ua) ||

            /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||

            /(msie) ([\w.]+)/.exec(ua) ||

            ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||

            [];

 

        return {

            browser: match[1] || "",

            version: match[2] || "0"

        };

    };

 

    matched = jQuery.uaMatch(navigator.userAgent);

    browser = {};

 

    if (matched.browser) {

        browser[matched.browser] = true;

        browser.version = matched.version;

    }

 

    // Chrome is Webkit, but Webkit is also Safari.

    if (browser.chrome) {

        browser.webkit = true;

    } else if (browser.webkit) {

        browser.safari = true;

    }

 

    jQuery.browser = browser;

})();



// html5의 Canvas를 사용해서 이미지 리사이징이 가능한지 판별하는 메소드 function isImageResizable() { var isCanvasUsable = !!document.createElement('canvas').getContext; var isLowerIE = false; if($.browser.msie) { if($.browser.version < 10) { // IE9은 Canvas는 쓸 수 있지만 file input에서 file Object를 가져오지 못해 제외 isLowerIE = true; } } return isCanvasUsable && !isLowerIE; }

2. 해당 imageUpload.jsp


function openCamera(id) {

var inputId = '#' + id; $(inputId).click(); }


$('#test1').change(function(e){ $('#img_test1').attr('src', URL.createObjectURL(e.target.files[0])); resizingImage('test1', e); });




// fileInput Object에 값이 변경될 때

function resizingImage(fileId, e){

// 이미지 리사이즈가 브라우저단에서 가능하다면 html5 사용...

    if(isImageResizable()) {

        var file = e.target.files[0]; // file Object get...

        if(file.type.match(/image.*/)) {

            // Load the image

            var reader = new FileReader();

            reader.onload = function (readerEvent) {

                var image = new Image();

                image.onload = function (imageEvent) {

 

                    // Resize the image

                    var canvas = document.createElement('canvas'),

                    max_size = 1280,

                    width = image.width,

                    height = image.height;

 

                    if (width > height) {

                        if (width > max_size) {

                            height *= max_size / width;

                            width = max_size;

                        }

                    } else {

                        if (height > max_size) {

                            width *= max_size / height;

                            height = max_size;

                        }

                    }

                    canvas.width = width;

                    canvas.height = height;

                    canvas.getContext('2d').drawImage(image, 0, 0, width, height);

                    var dataUrl = canvas.toDataURL('image/jpeg');

                    //var dataUrl = canvas.toDataURL('image/jpeg', 0.90);   // 이미지 퀄리티 조절도 가능...

                    //var resizedImage = dataURLToBlob(dataUrl);  // 이미지를 바이너리 형태로 변환?

                     

                // 이미지가 리사이즈 되었으면 파일 업로드하는 메소드 호출 시작

                        //변환된 사진 attribute 변경

$("#img_"+fileId).attr('src', dataUrl);

uploadFile(fileId);

// 이미지가 리사이즈 되었으면 파일 업로드하는 메소드 호출 끝

                    return false;

                }

                image.src = readerEvent.target.result;

            }

            reader.readAsDataURL(file);

        }

    }

    return false;

}


...................

...................

...................



<input type="file" accept="image/*" style="display: none;" id="test1" name="test1" capture> <button id="attach_test1" type="button" class="btn_type2 attach_yn" onClick="javascript:openCamera('test1');">

<div class="btn_wrap" id="imgDiv_test1" style="display: none;">     <span class="txt" align="center"><img id="img_test1" style="width: 97%;" /></span> &nbsp;<br> </div>








대략적으로 쓴내용이라 필자는 테스트 해보지 못함. 참고로 사용하길 바람




반응형

'JQUERY/JAVASCRIPT' 카테고리의 다른 글

History API 주소를 내 마음대로  (0) 2018.01.03
window.history 제어 및 뒤로가기 막기  (0) 2018.01.03
반응형

리눅스 vi 에디터 사용법 정리

리눅스 vi 에디터 사용법 정리 vim 텍스트 에디터 단축키

vi 에디터를 사용하기 위해서는 명령모드와 입력모드의 차이를 알아야합니다. 입력모드는 메모장처럼 텍스트를 자유롭게 편집하는 모드이고, 명령모드는 말 그대로 다양한 명령을 내리는 모드를 말합니다. 처음 vi 에디터를 실행하면 명령모드로 시작을 합니다. vi 에디터 명령모드에서는 커서이동, 복사, 붙여넣기, 문자열 검색 등을 수행할 수 있습니다.


명령모드에서 입력모드로 전환

a : 커서 다음(오른쪽)에 입력

A : 행 마지막 부분에 입력

i : 커서 앞(왼쪽)에 입력

I : 행 처음 부분에 입력

o : 커서 밑에 빈 행을 추가하여 입력

O : 커서 위에 빈 행을 추가하여 입력

s : 커서에 있는 글자를 지우고 입력


입력모드에서 명령모드로 전환

ESC 키를 누른다.


저장, 종료하기

명령모드에서 : (콜론)을 이용하여 다양한 작업을 할 수 있다.

:q

종료한다.

:q! 

저장하지 않고 그냥 강제로 종료한다.

:w

저장한다.

:wq

저장하고 종료한다.

ZZ

저장하고 종료한다. (:wq와 동일)

:wq 파일이름

저장할 때 파일이름을 지정할 수 있다.

(vi 에디터에서는 비정상 종료시 .swp 파일이 생성된다. 필요가 없으면 삭제)


커서 이동

h, j, k, l : 좌, 하, 상, 우 커서 이동 (방향 키가 없는 키보드에서 사용)

w : 다음 단어의 첫 글자로 이동

b : 이전 단어의 첫 글자로 이동

G : 마지막 행으로 가기

:숫자 :  지정한 숫자 행으로 이동. ex) :5


삭제

x : 커서에 있는 글자 삭제

X : 커서 앞에 있는 글자 삭제

dw : 커서를 기준으로 뒤에 있는 단어 글자 삭제 (커서 포함)

db : 커서를 기준으로 앞에 있는 단어 글자 삭제

dd : 커서가 있는 라인(줄) 삭제

dw, db, dd 명령 앞에 삭제할 숫자를 지정할 수 있다. ex) 3dw, 2db, 4dd

삭제 된 내용은 버퍼에 저장되어 붙여넣기가 가능하다.


복사

yw : 커서를 기준으로 뒤에 있는 단어 글자 복사 (커서 포함)

yb : 커서를 기준으로 앞에 있는 단어 글자 복사

yy : 커서가 있는 라인(줄) 복사

yw, yb, yy 명령 앞에 복사할 숫자를 지정할 수 있다. ex) 3yw, 2yb, 4yy


붙여넣기 (복사, 삭제된 내용을 붙여넣는다.)

p : 커서 다음에 붙여넣기

P : 커서 이전에 붙여넣기


찾기

/문자열 : 앞에서 부터 문자열을 찾는다.

?문자열 : 뒤에서 부터 문자열을 찾는다.

n : 뒤로 검색

N : 앞으로 검색


바꾸기

:%s/old/new

각 행의 처음 나오는 old를 찾아 new로 바꾼다.

:%s/old/new/g

모든 old를 찾아 new로 바꾼다.

:%s/old/new/gc

모든 old를 찾아 new로 바꾸기 전에 물어본다.


되돌리기(Undo), 다시실행(Redo)

u : 이전으로  되돌리기 (Undo)

Ctrl + r : 되돌리한 것은 다시 실행하기 (Redo)


자주 사용하는 기능들

:set number 

행번호를 출력한다. (간단하게 :set nu)

:set nonumber 

행번호를 숨긴다. (간단하게 :set nonu)

:cd

현재 디렉토리를 출력한다.

반응형
반응형

JSP 개발서버, 스테이징서버, 상용서버를 만지다 보면 외부 API나 라이센스 등등 URL만 바뀌어서 사용하는 경우가 많다.


한번에 바꾸기 위한 방법이다.


1. deploy_domain.jsp


<%

// 상용 // String deploy_domain = "http://real.penthegom.co.kr"; // 스테이징 // String deploy_domain = "http://stage.penthegom.co.kr"; // 개발 // String deploy_domain = "http://dev.penthegom.co.kr"; // 로컬 // String deploy_domain = "http://localhost:8080"; %>

2. 원하는.jsp 사용방법


<%@ include file="/deploy_domain.jsp"%>

...

...

<%

...

if(deploy_domain.indexOf("real") > -1){

...

}else if(deploy_domain.indexOf("stage") > -1){

...

}else if(deploy_domain.indexOf("dev") > -1){

...

}else{

...

}

...

%>

...

...


반응형

+ Recent posts