한동안 프로젝트를 하느라 정신이 없어 포스팅을 오랜만에 쓰는 것 같다🤔
input tag를 통해서 이미지를 업로드 할 시 화면에 해당 이미지가 화면에 표기되도록 직접 작업해보면서 궁금했던 사항을 공부하였다. 공부하다 binary 데이터를 어떻게 JavaScript로 다뤄야 할지에 대해 많이 알게 된 것 같았다. 관련하여 알게된 사실들은 정리하여 추후 포스팅 해야겠다
구현 코드
// index.html
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
</style>
<body>
<div>
<input type="file" id="input"></input>
</div>
<div>
<img src="" / id='previewImg' style="max-width: 200px;">
</div>
<script>
document.getElementById('input').addEventListener('change', (e) => {
const fileReader = new FileReader(); // File 을 읽기 위한 FileReader 객체 생성
fileReader.readAsDataURL(e.target.files[0]); // Blob -> base64 data로 변환
// 파일 읽기가 완료되었을 때 실행되는 이벤트 핸들러
fileReader.onload = (e) => {
let base64data = fileReader.result;
document.getElementById('previewImg').src = base64data;
}
}
)
</script>
</body>
</html>
코드 설명
일단 <input> tag 클릭하여 img를 업로드 하면 change event handler가 실행된다.
실제 img File의 img를 읽기위해서는 js에서 제공하는 FileReader 라는 객체를 이용해야 하므로 FileReader 객체를 생성하고 readAsDataURL 이라는 메서드를 통해 img File의 data를 base64로 형태로 인코딩하여 읽는다. 해당 작업이 완료되면
fileReader.onload 가 실행되고 base64data 에 img data를 할당하고 base64data를 <img id="previewImg"> 의 src 속성에 넣어주면 된다.
여기서 말하는 Base64 인코딩은 아스키코드에서 사용되는 문자64개로 Data를 표현한다고 이해하면 된다. 어떻게 Byte(8bit) 단위의 img Binary data를 나타나는지 궁금했었는데 3개의 byte를 4개의 6bit로 쪼개서 표현한다고 한다.
참고
https://developer.mozilla.org/ko/docs/Web/API/FileReader
https://developer.mozilla.org/ko/docs/Web/API/FileReader
https://developer.mozilla.org/ko/docs/Web/API/FileReader/readAsDataURL
'Javascript' 카테고리의 다른 글
프로그래머스 > 성격 유형 검사하기 (0) | 2024.06.02 |
---|---|
[JS] base64 img data를 img File 형태로 변경하기 (0) | 2024.05.18 |
예외 처리 방법 ( throw, Error 이용 ) (0) | 2023.11.30 |
Object.is() 개념잡기 (0) | 2023.11.21 |
프로그래머스 코딩테스트 풀이(js) > 완주하지못한선수(lv1) (0) | 2023.08.04 |