클라이언트에서 서버로 이미지를 보낼때 방법이 몇가지 있는데 그중 base64로 인코딩하여
이미지를 보내는 방법을 사용해본 내용이다
※ base64란?
8비트 이진 데이터(예를 들어 실행 파일이나, ZIP 파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식
전자 메일을 통한 이진 데이터 전송 등에 많이 쓰이고 있다. 모두 처음 62개는 알파벳 A-Z, a-z와 0-9를 사용하고 있으며 마지막 두 개를 어떤 기호를 쓰느냐의 차이만 있다.
인코딩된 문자열은 알파벳 대소문자와 숫자, 그리고 "+", "/" 기호 64개로 이루어지며, "="는 끝을 알리는 코드로 쓴다.
내가 구현하고 싶은것
클라이언트는 이미지를 base64 인코딩하여 서버로 전달한다
서버는 클라이언트에서 전달받은 base64 이미지에, 특정한 처리를 하고 다시 클라이언트로 결과를 보내준다
이때, 받은 base64 인코딩된 이미지를 웹 페이지에 보여주는 방법을 함께 기록해보았다
이미지를 base64 방식으로 인코딩 하는법
// Select the image
const img = document.querySelector('#testImg');
img.addEventListener('load', function (event) {
getDataUrl(event.currentTarget);
//console.log(dataUrl);
});
사용자가 선택한 이미지가 로드 완료되는 순간
getDataUrl을 호출하여 base64 인코딩을 시작한다
function getDataUrl(img) {
// Create canvas
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
// Set width and height
canvas.width = img.width;
canvas.height = img.height;
// Draw the image
ctx.drawImage(img, 0, 0);
var base64 = canvas.toDataURL('image/*');
strImage = base64.replace(/^data:image\/[a-z]+;base64,/, "");
}
html에서 인코딩된 base64 img 보여주는법
<img src="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEVBMTczNDg3QzA5MTFFNjk3ODM5NjQyRjE2RjA3QTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEVBMTczNDk3QzA5MTFFNjk3ODM5NjQyRjE2RjA3QTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowRUExNzM0NjdDMDkxMUU2OTc4Mzk2NDJGMTZGMDdBOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowRUExNzM0NzdDMDkxMUU2OTc4Mzk2NDJGMTZGMDdBOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjjUmssAAAGASURBVHjatJaxTsMwEIbpIzDA6FaMMPYJkDKzVYU+QFeEGPIKfYU8AETkCYI6wANkZQwIKRNDB1hA0Jrf0rk6WXZ8BvWkb4kv99vn89kDrfVexBSYgVNwDA7AN+jAK3gEd+AlGMGIBFDgFvzouK3JV/lihQTOwLtOtw9wIRG5pJn91Tbgqk9kSk7GViADrTD4HCyZ0NQnomi51sb0fUyCMQEbp2WpU67IjfNjwcYyoUDhjJVcZBjYBy40j4wXgaobWoe8Z6Y80CJBwFpunepIzt2AUgFjtXXshNXjVmMh+K+zzp/CMs0CqeuzrxSRpbOKfdCkiMTS1VBQ41uxMyQR2qbrXiiwYN3ACh1FDmsdK2Eu4J6Tlo31dYVtCY88h5ELZIJJ+IRMzBHfyJINrigNkt5VsRiub9nXICdsYyVd2NcVvA3ScE5t2rb5JuEeyZnAhmLt9NK63vX1O5Pe8XaPSuGq1uTrfUgMEp9EJ+CQvr+BJ/AAKvAcCiAR+bf9CjAAluzmdX4AEIIAAAAASUVORK5CYII=">
자바스크립트에서 base64 인코딩 이미지 보여주는법
document.getElementById('img').src = "data:image/;base64,"+data;
html 이미지 태그 중 id가 img인 객체에 base64 인코딩 이미지 넣는법
"data:image/;base64," + "실제 base64 인코딩된 이미지 데이터"
data:image/;base64, : 이 부분이 base64 인코딩 이미지를 넣어주는 부분이라고 보면 될듯
참고 :
base64란
https://stackoverflow.com/questions/201479/what-is-base-64-encoding-used-for
https://ko.wikipedia.org/wiki/%EB%B2%A0%EC%9D%B4%EC%8A%A464
base64 이미지 인코딩하는법
base64 이미지 보여주는법
https://stackoverflow.com/questions/8499633/how-to-display-base64-images-in-html
'웹 > javascript : 활용' 카테고리의 다른 글
[javascript] Uncaught DOMException: Failed to read the 'sessionStorage' property from 'Window': Access is denied for this document. (0) | 2021.09.06 |
---|---|
[javascript] Node.JS mongoDB 연동하기 부터 삭제까지 (0) | 2021.08.26 |
[javascript] node.js POST json 데이터 보내는법 (fetch 사용) (0) | 2021.08.19 |
[javascript] 오늘 날짜 출력하는법, date 객체 사용하는법 (0) | 2021.01.27 |
자바스크립트 키보드 이벤트 받기 (0) | 2020.10.25 |
자바스크립트 버튼 클릭 유도하는법 (0) | 2020.10.25 |