Text파일과 Binary 파일의 차이를 이해하기 위한 문서임:
- Text 파일의 각 글자의 Encoding (UTF-8)된 binary code를 Hexadecimal 형태로 살펴보고
- Binary 파일의 0과 1의 표현을 JPEG 이미지 파일을 사용하여 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 File and Binary File
컴퓨터 파일은 데이터를 해석하는 방식에 따라 크게 텍스트 파일(Text File)과 이진 파일(Binary File)로 구분
- 텍스트 파일 (Text File)
- 사람이 읽을 수 있는 문자(문자열)로 구성되어 있으며,
- 메모장이나 VS Code 같은 텍스트 에디터로 열어서 내용을 바로 확인할 수 있음.
- 예시: .txt, .md, .json, .yaml, .py, .c 등.
- 이진 파일 (Binary File)
- 주로, 문자가 아닌 데이터(이미지, 소리, 실행 코드 등)가
- 0과 1의 조합으로 저장되어 있음: 문자도 binary file로저장하는 경우엔 스타일 정보도 같이 포함되는 경우가 많음.
- Binary File은 일반적으로 전용 프로그램이 있어야만 내용을 올바르게 해석할 수 있음.
- 예시: .jpg, .mp3, .exe, .pdf, .zip 등.
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) 포맷
binary 파일은 다양한 format이 있으며 이는 사용되는 프로그램이 다름. 여기선 이미지 파일 중 JPEG 포맷 파일에 대해 살펴본다.

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를 다양한 이미지처리 라이브러리들이 제공해줌.
JFIF(JPEG File Interchange Format) 세그멘트 외의 촬영정보는 EXIF 데이터로 제공됨.
JFIF는 JPEG 압축 이미지를 다양한 시스템과 소프트웨어에서 호환되게 교환할 수 있도록 해상도(density), 버전 등의 기본 메타데이터를 규정한 표준 포맷.
https://ds31x.tistory.com/481#%EB%A9%94%ED%83%80%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%86%8D%EC%84%B1
Pillow에서 Image 객체의 주요 attribute.
Pillow(PIL)의 Image 객체는 Pillow 라이브러리에서 이미지 처리의 핵심이 되는 클래스임.이는 이미지를 추상화 하며, 다음과 같은 주요 속성들을 가지고 있음:기본 정보 속성size이미지의 크기를 (width,
ds31x.tistory.com
다음은 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 마커가 활성화되어 있음을 나타내는 플래그 값(pillow 내부에서 사용하는 값임)을 의미함.- jfif_unit의 경우, density에 대한 단위임: 0(단위없음) / 1(inch단위) / 2 (cm단위)
- jfif_density는 jfif_unit 단위에 대해 pixel이 몇 개인지를 의미함.
- 자세한 이미지 표준 정보를 몰라도 이미지 라이브러리의 도움으로 쉽게 확인할 수 있음.
같이보면 좋은 자료
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
[python] Text mode vs. Binary mode: File open
Python에서 특정 파일을 open하는 경우, text mode 또는 binary mode 중 하나로 열게 된다.기본은 text mode임. 이 둘의 차이점은 간단히 설명하면,현재 open하고자 하는 file을 text파일로 처리할지아니면 binary
ds31x.tistory.com
https://dsaint31.me/mkdocs_site/OS/file/?h=file
BME
File 컴퓨터를 사용하기 위해 필요한 정보들이 담김. 컴퓨터에서 사용되는 data 저장의 기본단위 파일 이름의 extension(확장명 or 확장자) 파일에 포함된 정보의 종류 및 해당 파일을 열기 위한 연결
dsaint31.me
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' 카테고리의 다른 글
| [C] LLP64 vs. LP64 (0) | 2025.03.21 |
|---|---|
| [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 |