1. ์ด๋ฏธ์ง ํฌ๋งท ํ์ธ
์ง์๋๋ ์ด๋ฏธ์ง ํฌ๋งท
Pillow๋ ๋ค์ํ ์ด๋ฏธ์ง ํฌ๋งท์ ์ง์ํ๋ฉฐ, ๊ทธ ์ค์๋ ๋ค์์ด ํฌํจ๋ผ์:
- JPEG (JPG): ์ฌ์ง์์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ํฌ๋งท ์ค ํ๋์์. ํ์ง ์์ค๊ณผ ํจ๊ป ์ด๋ฏธ์ง๋ฅผ ์์ถํ๋ฏ๋ก ํ์ผ ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ฌ์ค์. ํฌ๋ช ๋๋ ์ง์ํ์ง ์์์.
- PNG: ์์ค ์๋ ํฌ๋งท์ด๋ฉฐ, ํฌ๋ช ๋(์ํ ์ฑ๋)๋ฅผ ์ง์ํด์. ๋ก๊ณ , ์์ด์ฝ, ๋ช ํํ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๊ธฐ์ ์ ํฉํด์.
- BMP: ๊ณ ํ์ง ๋น์์ถ ํฌ๋งท์ด์ง๋ง, ํ์ผ ํฌ๊ธฐ๊ฐ ์ปค์. ํฌ๋ช ๋๋ฅผ ์ง์ํด์.
- TIFF: ์์ค ์์ด ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ ํฉํด์. ์ฃผ๋ก ์ธ์์ ๋ง์ด ์ฌ์ฉ๋ผ์.
- WEBP: ์ต์ ํฌ๋งท์ผ๋ก ๋์ ์์ถ๋ฅ ๊ณผ ํฌ๋ช ๋ ์ง์์ ์ ๊ณตํด์. ์น ์ด๋ฏธ์ง๋ฅผ ์ํ ์๋ฒฝํ ์ ํ์ผ๋ก ์์ ํ์ผ ํฌ๊ธฐ์ ์ข์ ํ์ง์ ๋ณด์ฅํด์.
๋ณํ์ ์ํ ์ด๋ฏธ์ง ๋ถ๋ฌ์ค๊ธฐ
์ด๋ฏธ์ง๋ฅผ ๋ณํํ๊ธฐ ์ ์ ๋จผ์ Image.open()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์์ผ ํด์.
from PIL import Image
# ์ด๋ฏธ์ง ์ด๊ธฐ
image = Image.open("example.jpg")
print(image.format) # ์ด๋ฏธ์ง์ ์๋ณธ ํฌ๋งท ํ์ธ
2. ์ด๋ฏธ์ง ํฌ๋งท ๋ณํ
save()
๋ฉ์๋๋ ํ์ผ ์ด๋ฆ์ ํ์ฅ์๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ๋ช
์์ ์ผ๋ก ํฌ๋งท์ ์ง์ ํ์ฌ ๋ค์ํ ํฌ๋งท์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ ์ ์์ด์.
JPEG๋ฅผ PNG๋ก ๋ณํ
JPEG ์ด๋ฏธ์ง๋ฅผ PNG๋ก ๋ณํํ๋ ค๋ฉด ์ ์ฅ ์ ์๋ก์ด ํ์ฅ์๋ฅผ ์ค์ ํ๋ฉด ๋ผ์:
# PNG ํฌ๋งท์ผ๋ก ์ด๋ฏธ์ง ์ ์ฅ
image.save("example_converted.png")
์ด ์ฝ๋๋ JPEG ์ด๋ฏธ์ง๋ฅผ PNG ํฌ๋งท์ผ๋ก ๋ณํํ๊ณ ์ง์ ๋ ์ด๋ฆ์ผ๋ก ์ ์ฅํด์. PNG๋ ์์ค๋์ง ์์ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ ํฉํ๋ฉฐ, ํฌ๋ช ํ ์์ญ๋ ์ง์ํด์.
PNG๋ฅผ JPEG๋ก ๋ณํ
PNG ์ด๋ฏธ์ง๋ฅผ JPEG๋ก ๋ณํํ ์๋ ์์ด์. ํ์ง๋ง JPEG๊ฐ ํฌ๋ช ์ฑ์ ์ง์ํ์ง ์์ผ๋ฏ๋ก ํฌ๋ช ํ ์์ญ์ ํฐ ๋ฐฐ๊ฒฝ์ผ๋ก ๋์ฒด๋ผ์.
# 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) ์ค์ ๊ฐ๋ฅํด์.
# ํ์ง์ ๋ฎ์ถฐ์ JPEG ์ด๋ฏธ์ง ์ ์ฅ
image.save("example_compressed.jpg", "JPEG", quality=85)
์ด ์ฝ๋๋ ํ์ง 85๋ก ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ์ฌ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด๋ฉด์๋ ์ ์ ํ ํ์ง์ ์ ์งํด์. ๋ ๋ฎ์ ํ์ง์ ์ํ๋ค๋ฉด, ์๋ฅผ ๋ค์ด ์ธ๋ค์ผ์ ์์ฑํ๊ธฐ ์ํด quality = 50
์ผ๋ก ์ค์ ํ ์ ์์ด์.
PNG ์ต์ ํ
PNG์์๋ optimize = True
๋งค๊ฐ๋ณ์๊ฐ ์ค๋ณต ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ์ฌ ์์ค ์์ด ์์ถ์ ์ํํด์. ์ธํฐ๋ท์์ ์ด๋ฏธ์ง๋ฅผ ๊ฒ์ํ ๋ ํนํ ์ ์ฉํด์.
# ์ต์ ํ๋ PNG ์ ์ฅ
image.save("example_optimized.png", "PNG", optimize=True)
PNG ์ต์ ํ๋ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ฌ ํ์ง์ ์ ์งํ๋ ๋ฐ ํจ๊ณผ์ ์ด์์. ํนํ ๋ก๊ณ ์ ์์ด์ฝ์ฒ๋ผ ์์ ํฌ๊ธฐ์ ํ์ผ์์ ์ค์ํด์.
์์ถ ์์ค์ ๋ฐ๋ฅธ JPEG ํ์ง ๋น๊ต
quality
๋งค๊ฐ๋ณ์๋ฅผ ๋ณ๊ฒฝํ๋ฉด ํ์ผ ํฌ๊ธฐ์ ์ด๋ฏธ์ง ํ์ง์ ์ด๋ป๊ฒ ์ํฅ์ ๋ฏธ์น๋์ง ์์๋ด์.
# ๋ค๋ฅธ ํ์ง ์์ค์ผ๋ก 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 ํฌ๋งท์ผ๋ก ์ด๋ฏธ์ง ๋ณํ
# ์ด๋ฏธ์ง๋ฅผ WebP๋ก ๋ณํ
image.save("example.webp", "WEBP", quality=80)
์ด ์์ ์์๋ ํ์ง 80์ผ๋ก ์ด๋ฏธ์ง๋ฅผ WebP ํฌ๋งท์ผ๋ก ์ ์ฅํด์. WebP๋ JPEG ๋๋ PNG์ ๋น์ทํ ํ์ง๋ก ํจ์ฌ ์์ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ ๊ณตํด์.
์ต์ ํ๋ฅผ ์ฌ์ฉํ ์ ์ฒด ๋ณํ ์์
์ด์ ๋ฐฐ์ด ๋ชจ๋ ๋ฐฉ๋ฒ์ ๊ฒฐํฉํ์ฌ ์ฌ๋ฌ ํฌ๋งท์ผ๋ก ๋ณํํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์ด๋ด์.
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 ํฌ๋งท์ผ๋ก ๋ณํํ์ฌ ๋์ ํ์ง๊ณผ ์์ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
GO TO FULL VERSION