CodeGym /ํ–‰๋™ /Python SELF KO /ํฌ๋งท ๊ด€๋ฆฌ ๋ฐ ๋ณ€ํ™˜

ํฌ๋งท ๊ด€๋ฆฌ ๋ฐ ๋ณ€ํ™˜

Python SELF KO
๋ ˆ๋ฒจ 46 , ๋ ˆ์Šจ 2
์‚ฌ์šฉ ๊ฐ€๋Šฅ

1. ์ด๋ฏธ์ง€ ํฌ๋งท ํ™•์ธ

์ง€์›๋˜๋Š” ์ด๋ฏธ์ง€ ํฌ๋งท

Pillow๋Š” ๋‹ค์–‘ํ•œ ์ด๋ฏธ์ง€ ํฌ๋งท์„ ์ง€์›ํ•˜๋ฉฐ, ๊ทธ ์ค‘์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ผ์š”:

  • JPEG (JPG): ์‚ฌ์ง„์—์„œ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ํฌ๋งท ์ค‘ ํ•˜๋‚˜์˜ˆ์š”. ํ’ˆ์งˆ ์†์‹ค๊ณผ ํ•จ๊ป˜ ์ด๋ฏธ์ง€๋ฅผ ์••์ถ•ํ•˜๋ฏ€๋กœ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ํฌ๊ฒŒ ์ค„์—ฌ์ค˜์š”. ํˆฌ๋ช…๋„๋Š” ์ง€์›ํ•˜์ง€ ์•Š์•„์š”.
  • PNG: ์†์‹ค ์—†๋Š” ํฌ๋งท์ด๋ฉฐ, ํˆฌ๋ช…๋„(์•ŒํŒŒ ์ฑ„๋„)๋ฅผ ์ง€์›ํ•ด์š”. ๋กœ๊ณ , ์•„์ด์ฝ˜, ๋ช…ํ™•ํ•œ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๊ธฐ์— ์ ํ•ฉํ•ด์š”.
  • BMP: ๊ณ ํ™”์งˆ ๋น„์••์ถ• ํฌ๋งท์ด์ง€๋งŒ, ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ปค์š”. ํˆฌ๋ช…๋„๋ฅผ ์ง€์›ํ•ด์š”.
  • TIFF: ์†์‹ค ์—†์ด ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•ด์š”. ์ฃผ๋กœ ์ธ์‡„์— ๋งŽ์ด ์‚ฌ์šฉ๋ผ์š”.
  • WEBP: ์ตœ์‹  ํฌ๋งท์œผ๋กœ ๋†’์€ ์••์ถ•๋ฅ ๊ณผ ํˆฌ๋ช…๋„ ์ง€์›์„ ์ œ๊ณตํ•ด์š”. ์›น ์ด๋ฏธ์ง€๋ฅผ ์œ„ํ•œ ์™„๋ฒฝํ•œ ์„ ํƒ์œผ๋กœ ์ž‘์€ ํŒŒ์ผ ํฌ๊ธฐ์™€ ์ข‹์€ ํ’ˆ์งˆ์„ ๋ณด์žฅํ•ด์š”.

๋ณ€ํ™˜์„ ์œ„ํ•œ ์ด๋ฏธ์ง€ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

์ด๋ฏธ์ง€๋ฅผ ๋ณ€ํ™˜ํ•˜๊ธฐ ์ „์— ๋จผ์ € Image.open() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•ด์š”.

Python

from PIL import Image

# ์ด๋ฏธ์ง€ ์—ด๊ธฐ
image = Image.open("example.jpg")
print(image.format)  # ์ด๋ฏธ์ง€์˜ ์›๋ณธ ํฌ๋งท ํ™•์ธ

2. ์ด๋ฏธ์ง€ ํฌ๋งท ๋ณ€ํ™˜

save() ๋ฉ”์„œ๋“œ๋Š” ํŒŒ์ผ ์ด๋ฆ„์˜ ํ™•์žฅ์ž๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๋ช…์‹œ์ ์œผ๋กœ ํฌ๋งท์„ ์ง€์ •ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํฌ๋งท์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์–ด์š”.

JPEG๋ฅผ PNG๋กœ ๋ณ€ํ™˜

JPEG ์ด๋ฏธ์ง€๋ฅผ PNG๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด ์ €์žฅ ์‹œ ์ƒˆ๋กœ์šด ํ™•์žฅ์ž๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋ผ์š”:

Python

# PNG ํฌ๋งท์œผ๋กœ ์ด๋ฏธ์ง€ ์ €์žฅ
image.save("example_converted.png")

์ด ์ฝ”๋“œ๋Š” JPEG ์ด๋ฏธ์ง€๋ฅผ PNG ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์ง€์ •๋œ ์ด๋ฆ„์œผ๋กœ ์ €์žฅํ•ด์š”. PNG๋Š” ์†์‹ค๋˜์ง€ ์•Š์€ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•˜๋ฉฐ, ํˆฌ๋ช…ํ•œ ์˜์—ญ๋„ ์ง€์›ํ•ด์š”.

PNG๋ฅผ JPEG๋กœ ๋ณ€ํ™˜

PNG ์ด๋ฏธ์ง€๋ฅผ JPEG๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜๋„ ์žˆ์–ด์š”. ํ•˜์ง€๋งŒ JPEG๊ฐ€ ํˆฌ๋ช…์„ฑ์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํˆฌ๋ช…ํ•œ ์˜์—ญ์€ ํฐ ๋ฐฐ๊ฒฝ์œผ๋กœ ๋Œ€์ฒด๋ผ์š”.

Python

# PNG๋ฅผ JPEG๋กœ ๋ณ€ํ™˜ (ํˆฌ๋ช… ์˜์—ญ์ด ํฐ ๋ฐฐ๊ฒฝ์œผ๋กœ ๋Œ€์ฒด๋จ)
image = image.convert("RGB")  # JPEG์— ํ•„์š”ํ•œ RGB ๋ชจ๋“œ๋กœ ์ „ํ™˜
image.save("example_converted.jpg", "JPEG")

convert("RGB") ๋ฉ”์„œ๋“œ๋Š” JPEG ์ €์žฅ์„ ์œ„ํ•ด RGB ๋ชจ๋“œ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ผ์š”. ์ด๋Š” JPEG๊ฐ€ ํˆฌ๋ช… ์˜์—ญ์„ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ•„์ˆ˜์ ์ด์—์š”.

3. ์ด๋ฏธ์ง€ ํ’ˆ์งˆ ๊ด€๋ฆฌ

Pillow๋Š” quality์™€ optimize ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ œ๊ณตํ•˜์—ฌ ํŒŒ์ผ ํฌ๊ธฐ์™€ ํ’ˆ์งˆ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๊ฒƒ์€ ํŠนํžˆ JPEG์™€ PNG์— ์œ ์šฉํ•ด์š”.

JPEG ํ’ˆ์งˆ ๊ด€๋ฆฌ ๋ฐ ์ตœ์ ํ™”

JPEG ํฌ๋งท์œผ๋กœ ์ €์žฅํ•  ๋•Œ quality ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์••์ถ• ์ •๋„๋ฅผ ์กฐ์ •ํ•ด์š”. ํ’ˆ์งˆ ๊ฐ’์ด ๋†’์„์ˆ˜๋ก ํŒŒ์ผ ํฌ๊ธฐ๋„ ์ปค์ง€๊ณ  ์ด๋ฏธ์ง€ ํ’ˆ์งˆ๋„ ์ข‹์•„์ ธ์š”. quality ๊ฐ’์€ 1์—์„œ 95๊นŒ์ง€ (๊ธฐ๋ณธ๊ฐ’์€ 75) ์„ค์ • ๊ฐ€๋Šฅํ•ด์š”.

Python

# ํ’ˆ์งˆ์„ ๋‚ฎ์ถฐ์„œ JPEG ์ด๋ฏธ์ง€ ์ €์žฅ
image.save("example_compressed.jpg", "JPEG", quality=85)

์ด ์ฝ”๋“œ๋Š” ํ’ˆ์งˆ 85๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜์—ฌ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์ด๋ฉด์„œ๋„ ์ ์ ˆํ•œ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•ด์š”. ๋” ๋‚ฎ์€ ํ’ˆ์งˆ์„ ์›ํ•œ๋‹ค๋ฉด, ์˜ˆ๋ฅผ ๋“ค์–ด ์ธ๋„ค์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด quality = 50์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”.

PNG ์ตœ์ ํ™”

PNG์—์„œ๋Š” optimize = True ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ค‘๋ณต ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์†์‹ค ์—†์ด ์••์ถ•์„ ์ˆ˜ํ–‰ํ•ด์š”. ์ธํ„ฐ๋„ท์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๊ฒŒ์‹œํ•  ๋•Œ ํŠนํžˆ ์œ ์šฉํ•ด์š”.

Python

# ์ตœ์ ํ™”๋œ PNG ์ €์žฅ
image.save("example_optimized.png", "PNG", optimize=True)

PNG ์ตœ์ ํ™”๋Š” ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์—ฌ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ํšจ๊ณผ์ ์ด์—์š”. ํŠนํžˆ ๋กœ๊ณ ์™€ ์•„์ด์ฝ˜์ฒ˜๋Ÿผ ์ž‘์€ ํฌ๊ธฐ์˜ ํŒŒ์ผ์—์„œ ์ค‘์š”ํ•ด์š”.

์••์ถ• ์ˆ˜์ค€์— ๋”ฐ๋ฅธ JPEG ํ’ˆ์งˆ ๋น„๊ต

quality ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ํŒŒ์ผ ํฌ๊ธฐ์™€ ์ด๋ฏธ์ง€ ํ’ˆ์งˆ์— ์–ด๋–ป๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ์•Œ์•„๋ด์š”.

Python

# ๋‹ค๋ฅธ ํ’ˆ์งˆ ์ˆ˜์ค€์œผ๋กœ JPEG ์ด๋ฏธ์ง€ ์ €์žฅ
image.save("quality_95.jpg", "JPEG", quality=95)
image.save("quality_75.jpg", "JPEG", quality=75)
image.save("quality_50.jpg", "JPEG", quality=50)

์ด ์˜ˆ์ œ์—์„œ๋Š” ๋™์ผํ•œ ์ด๋ฏธ์ง€๋ฅผ ํ’ˆ์งˆ 95, 75, 50์œผ๋กœ ์ €์žฅํ•ด์š”. ํ’ˆ์งˆ 95๋Š” ์›๋ณธ๊ณผ ๊ฑฐ์˜ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๊ณต๊ฐ„์„ ๋” ๋งŽ์ด ์ฐจ์ง€ํ•˜์ง€๋งŒ, ํ’ˆ์งˆ 50์€ ์••์ถ•๋ฅ ์ด ๋†’์•„ ์„ธ๋ถ€ ์‚ฌํ•ญ์˜ ์†์‹ค์ด ๋ˆˆ์— ๋Œ ์ˆ˜ ์žˆ์–ด์š”.

4. WebP ํฌ๋งท ์‚ฌ์šฉ

WebP ํฌ๋งท์€ ์†์‹ค ๋ฐ ๋น„์†์‹ค ์••์ถ•, ํˆฌ๋ช…์„ฑ์„ ๋ชจ๋‘ ์ง€์›ํ•˜๋Š” ์ตœ์‹  ํฌ๋งท์ด์—์š”. ๋†’์€ ์••์ถ•๋ฅ  ๋•๋ถ„์— ์ธํ„ฐ๋„ท์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋ผ์š”.

WebP ํฌ๋งท์œผ๋กœ ์ด๋ฏธ์ง€ ๋ณ€ํ™˜

Python

# ์ด๋ฏธ์ง€๋ฅผ WebP๋กœ ๋ณ€ํ™˜
image.save("example.webp", "WEBP", quality=80)

์ด ์˜ˆ์ œ์—์„œ๋Š” ํ’ˆ์งˆ 80์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ WebP ํฌ๋งท์œผ๋กœ ์ €์žฅํ•ด์š”. WebP๋Š” JPEG ๋˜๋Š” PNG์™€ ๋น„์Šทํ•œ ํ’ˆ์งˆ๋กœ ํ›จ์”ฌ ์ž‘์€ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ œ๊ณตํ•ด์š”.

์ตœ์ ํ™”๋ฅผ ์‚ฌ์šฉํ•œ ์ „์ฒด ๋ณ€ํ™˜ ์˜ˆ์ œ

์ด์ œ ๋ฐฐ์šด ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ด์š”.

Python

from PIL import Image

# ์ด๋ฏธ์ง€ ์—ด๊ธฐ
image = Image.open("example.jpg")

# ์ตœ์ ํ™”๋œ PNG๋กœ ๋ณ€ํ™˜
image.save("converted_optimized.png", "PNG", optimize=True)

# ํ’ˆ์งˆ ๊ฐ์†Œ๋œ JPEG๋กœ ์ €์žฅ
image_rgb = image.convert("RGB")  # JPEG์šฉ RGB ๋ชจ๋“œ๋กœ ์ „ํ™˜
image_rgb.save("converted_compressed.jpg", "JPEG", quality=85)

# ํ’ˆ์งˆ ์ตœ์ ํ™”๋œ WebP๋กœ ๋ณ€ํ™˜
image_rgb.save("converted_optimized.webp", "WEBP", quality=80)

์ด ์˜ˆ์ œ์—์„œ๋Š”:

  • ์†์‹ค ์—†๋Š” PNG ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์—ฌ์š”.
  • ํ’ˆ์งˆ 85๋กœ JPEG๋กœ ์ €์žฅํ•˜์—ฌ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์ด๋ฉด์„œ๋„ ์–‘ํ˜ธํ•œ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•ด์š”.
  • ์ธํ„ฐ๋„ท ๊ฒŒ์‹œ์— ์ ํ•ฉํ•œ WebP ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋†’์€ ํ’ˆ์งˆ๊ณผ ์ž‘์€ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION