Text 파일의 각 글자의 Encoding 된 binary code를 Hexadecimal 형태로 살펴본 예제임.
이를 살펴보기 위해 VSCode에 HEX Editor Extension을 설치하여 살펴봄.
UTF-8에 대한 자세한 내용은 다음을 참고:
https://dsaint31.me/mkdocs_site/CE/ch01/code_for_character/?h=ascii#utf-8-universal-coded-character-set-transformation-format-8-bit
BME
Codes for Characters Code 란 특정 형태의 information을 다른 방법으로 표현하는 규칙 또는 해당 규칙으로 표현된 결과물 을 가르킴. 문자를 나타내기 위한 code는 인간이 사용하는 문자 를 일종의 기호 또
dsaint31.me
TEXT 파일
UTF-8 encoding 방식이 현재 가장 많이 쓰이는 한글을 위한 encoding 중 하나임.
(multilingual document에선 거의 UTF-8이 사용됨.)
한 은 3바이트로 표현되며 이를 hex code로는 0x ED 95 9C 임.
1 은 1바이트로 표현되며 이를 hex code로는 0x 31 임. (알파벳과 숫자는 ASCII와 호환됨)
a 도 1바이트로 표현되며 이를 hex code로는 0x 61 임. (역시 ASCII와 호환됨)
Binary File: JPEG (.jpg) 포맷
JPEG 파일을 열어서 바이너리 데이터를 확인해보면, 파일의 시작 부분에 다음과 같은 마커와 정보를 볼 수 있음:
- SOI(Start of Image) 마커 - 0xFF, 0xD8로 시작
- APP0(Application Marker 0) - 대개 0xFF, 0xE0 로 시작하고, 이 다음의 2바이트를 통해 세그먼트 길이를 나타냄.
- 위의 예에서는 0x00, 0x10 이 segment length이며, 16바이트를 의미함.
- 즉 APP0 segment의 총 길이는 16바이트 - 길이 2바이트를 제외하면 14바이트임 (길이제외).
- 길이 이후에 "JFIF"문자열과 null문자 이 놓임: JPEG File Interchange Format
- "JFIF" 문자열 - ASCII로 "JFIF"를 나타내는 바이트 시퀀스 (0x4A, 0x46, 0x49, 0x46, 0x00)
- 0x00 코드의 null문자로 끝남.
- JFIF 버전 번호
- 0x01, 0x01 : JFIF버전이 1.1임을 의미.
- 단위,
- 0x01 : 0x01은 단위가 dpi (dots per pixel)임을 표시
- 해상도
- 0x00, 0x60, 0x00, 0x60 : 0x60은 96으로 가로세로 해상도가 96dpi임을 의미.
- Thumbnail (축소판) 정보
- 0x00, 0x00 : 가로, 세로 크기 0으로 축소판이 없음을 의미
- "JFIF" 문자열 - ASCII로 "JFIF"를 나타내는 바이트 시퀀스 (0x4A, 0x46, 0x49, 0x46, 0x00)
- DQT (Define Quantization Table) 마커 - 0xFF, 0xDB 로 시작하며 양자화 테이블 정의 시작됨.
- 길이: 위의 예에서 0x00, 0x43 으로 67바이트임을 의미.
- 이후 DQT테이블 정보임.
위와 같은 정보를 쉽게 파악할 수 있는 parser를 다양한 이미지처리 라이브러리들이 제공해줌.
다음은 Pillow를 이용하는 방식임.
In [2]: from PIL import Image
...: from PIL.ExifTags import TAGS
...:
...: image = Image.open('../ch00/img/Classic_shot_of_the_ENIAC.jpg')
...: info = image.info # JFIF 정보 등 기본 메타데이터
...: exif_data = image._getexif() # EXIF 데이터 (있는 경우)
In [3]: info
Out[3]:
{'jfif': 257,
'jfif_version': (1, 1),
'dpi': (96, 96),
'jfif_unit': 1,
'jfif_density': (96, 96)}
In [4]: exif_data
In [5]:
- `jfif`가 257이라는 것은 JFIF 마커가 활성화되어 있음을 나타내는 플래그 값을 의미함.
- 자세한 이미지 표준 정보를 몰라도 이미지 라이브러리의 도움으로 쉽게 확인할 수 있음.
같이보면 좋은 자료
2024.01.07 - [개발환경] - [CE] Text file: Text 파일이란?
[CE] Text file: Text 파일이란?
"text file" 은사람과 컴퓨터가 읽을 수 있고 처리할 수 있도록 encoding 된 characters 로 이루어진electric text lines 로 구성되는 형태의파일 포맷 및 해당 파일을 가르킴.https://dsaint31.me/mkdocs_site/CE/ch01/code_
ds31x.tistory.com
2024.06.03 - [Python] - [Python] PIL, Pillow, OpenCV, and Scikit-image
[Python] PIL, Pillow, OpenCV, and Scikit-image
PIL, Pillow, OpenCV, and Scikit-imagePython에서 이미지를 다룰 때 이용되는 주요 패키지들은 다음과 같음.1.PIL (Python Imaging Library)PIL은 1995년에 처음 개발된 Python의 최초 이미지 처리 라이브러리 중 하나
ds31x.tistory.com
'CE' 카테고리의 다른 글
[Py] bytecode 분석 - dis 모듈 (0) | 2025.03.11 |
---|---|
Apple II (1977년, Apple ][ ) (0) | 2025.03.11 |
Switch로 컴퓨터(or 디지털논리회로) 만들기 - Claude Shannon (1937) (0) | 2025.03.11 |
Claude Shannon (0) | 2025.03.11 |
[CE] Differential Analyzer (미분해석기, 1931) (0) | 2025.03.11 |