티스토리 뷰
개요
RLE라는 개념을 알게 되었다. 이미지의 마스크를 서버간 통신으로 전달할 때에 용량을 줄일 수 있다고 한다. 기존 방식으로 정리를 한다면 구글링부터 하고 정보들을 모아서 정리하였겠지만 이번에는 노션의 AI 기능을 적극 활용해 보았다. 작성을 하고 드는 생각은
- 내가 직접 쓰는 것보다 훨씬 세련되게 작성이 된다.
- 이렇게 작성할 수 있게 된 시대에 블로그 포스팅은 어떤 의미를 가지게 되는가?
- 블로그 포스팅에서는 존칭을 안쓰려 하는데 존칭으로 작업이 된다
RLE란?
RLE은 **"Run Length Encoding"**의 약자로, 이미지나 비디오 데이터를 압축하는 데 사용되는 압축 알고리즘 중 하나입니다. 이 알고리즘은 이미지에서 연속된 픽셀 값이 반복되는 경우, 그 값을 반복되는 횟수와 함께 저장하여 데이터를 압축합니다. 이를 통해 데이터 용량을 줄일 수 있습니다.
RLE 알고리즘 다이어그램
알고리즘 자체는 간단하다. 11111000 이라면 1이 5개, 0이 3개이니 1503인 것이다.
실제 구현
실제로 적용할 때에는 다음의 단계를 생각할 수 있다.
- 마스크 이미지를 바이너리 값으로 변환한다.
- 위에 언급한 RLE 방식으로 값을 변환한다.
- 이를 zlib로 한 번 더 압축한 다음
- 바이너리를 통신 전송하기 위해 base64로 변환한다.
다음 코드는 위 내용을 Notion AI에게 Golang으로 예시를 보여달라 요청한 것이다.
func main() {
// assume mask is a 2D boolean array
mask := [][]bool{
{true, true, false},
{false, true, false},
{false, false, true},
}
// encode mask using RLE
var buf bytes.Buffer
var count int32
var value bool
for _, row := range mask {
for _, pixel := range row {
if pixel == value {
count++
} else {
binary.Write(&buf, binary.BigEndian, count)
buf.WriteByte(byte(value))
count = 1
value = pixel
}
}
}
binary.Write(&buf, binary.BigEndian, count)
buf.WriteByte(byte(value))
// compress using zlib
var compressed bytes.Buffer
writer := zlib.NewWriter(&compressed)
writer.Write(buf.Bytes())
writer.Close()
// encode using base64
encoded := base64.StdEncoding.EncodeToString(compressed.Bytes())
fmt.Println(encoded)
}
반응형
'development' 카테고리의 다른 글
황당버그 - 자동차가 바닐라 아이스크림 알러지가 있나봐요 (0) | 2023.06.03 |
---|---|
비밀번호 입력창의 값을 보여주기/가리기 (0) | 2023.04.27 |
특정 사이트의 쿠키와 캐시 제거 방법 (2) | 2023.04.20 |
프로젝트 킥오프 미팅을 알아보자 (0) | 2023.02.08 |
임백준님의 "개발자의 평생공부" 칼럼을 읽고 (0) | 2023.02.02 |
반응형
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- agile
- OpenAI
- bun
- 클린 애자일
- Gin
- API
- 영화
- websocket
- 독서
- 엉클 밥
- 체호프
- 티스토리챌린지
- 인텔리제이
- intellij
- 오블완
- strange
- go
- solid
- golang
- 2023
- notion
- folklore
- 제이펍
- clean agile
- 잡학툰
- Bug
- 독서후기
- 노션
- github
- ChatGPT
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함