Data di Dalam Komputer · Pelajaran 9 dari 9
Gambar dan warna: piksel dan RGB
8 menit baca · BelajarCode
Gambar digital tersusun dari piksel. Resolusi menyatakan banyaknya piksel, misalnya 1920 × 1080 berarti 1920 piksel mendatar dan 1080 piksel tegak, total 2.073.600 piksel.
Warna RGB
Setiap piksel berwarna menyimpan tiga nilai: merah, hijau, dan biru (RGB). Masing-masing 0 sampai 255, sehingga butuh 8 bit per warna atau 24 bit (3 byte) per piksel. Banyaknya kemungkinan warna adalah 256 × 256 × 256 = 16.777.216.
| Warna | R | G | B | Heksadesimal |
|---|---|---|---|---|
| Merah | 255 | 0 | 0 | #FF0000 |
| Hijau | 0 | 255 | 0 | #00FF00 |
| Biru | 0 | 0 | 255 | #0000FF |
| Kuning | 255 | 255 | 0 | #FFFF00 |
| Putih | 255 | 255 | 255 | #FFFFFF |
| Abu-abu | 128 | 128 | 128 | #808080 |
Warna layar dibentuk dari campuran cahaya, jadi merah dan hijau menghasilkan kuning, dan semua warna penuh menghasilkan putih.
Menghitung ukuran gambar
Gambar tanpa kompresi berukuran: lebar × tinggi × byte per piksel.
1lebar = 19202tinggi = 10803byte_per_piksel = 34ukuran = lebar * tinggi * byte_per_piksel5print("Banyak piksel:", lebar * tinggi)6print("Ukuran tanpa kompresi:", ukuran, "byte")7print("Sekitar", round(ukuran / 1_000_000, 1), "MB")Banyak piksel: 2073600 Ukuran tanpa kompresi: 6220800 byte Sekitar 6.2 MB
Tanda _ di 1_000_000 hanya pemisah supaya angka besar mudah dibaca.
Kompresi
Foto 1920 × 1080 dari HP biasanya jauh lebih kecil dari 6,2 MB karena dikompresi. Ada dua jenis kompresi:
- Lossless (tanpa kehilangan), misalnya PNG. Gambar bisa dikembalikan persis seperti aslinya. Cocok untuk tangkapan layar dan logo.
- Lossy (dengan kehilangan), misalnya JPEG. Detail yang sulit dilihat mata dibuang supaya ukurannya jauh lebih kecil. Cocok untuk foto.
Mengubah warna menjadi abu-abu
Mata manusia lebih peka terhadap hijau daripada merah dan biru. Karena itu, kecerahan sebuah warna sering dihitung dengan bobot berbeda untuk setiap komponen:
1def keabuan(r, g, b):2 return round(0.299 * r + 0.587 * g + 0.114 * b)34print(keabuan(255, 0, 0))5print(keabuan(0, 255, 0))6print(keabuan(31, 90, 240))76 150 89
Hijau murni terlihat jauh lebih terang daripada merah murni, sesuai dengan bobotnya.
Cek pemahaman
Berapa byte yang dibutuhkan gambar 100 × 100 piksel dengan warna 24 bit tanpa kompresi?
Latihan
Ukuran foto HD
Hitung ukuran foto 1280 × 720 piksel dengan warna 24 bit tanpa kompresi, dalam byte dan dalam MB (1 MB = 1.000.000 byte). Lalu, jika kompresi JPEG membuat ukurannya tinggal sepersepuluh, berapa ukurannya?
Pembahasan
1ukuran = 1280 * 720 * 32print(ukuran, "byte")3print(ukuran / 1_000_000, "MB")4print("Setelah kompresi:", ukuran / 10 / 1_000_000, "MB")2764800 byte 2.7648 MB Setelah kompresi: 0.27648 MB
Kompresi membuat foto jauh lebih cepat dikirim dan hemat ruang penyimpanan.
Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler Python online.