Lewati ke konten utama
menjadi.dev
Chapter 46.3 Mobile Lanjutan

Image Manipulation & Optimization

Resize, crop, compress, dan konversi format gambar di device

Tujuan Pembelajaran

  • Mampu memanipulasi gambar dengan expo-image-manipulator
  • Memahami strategi optimasi gambar untuk mobile
  • Mengerti format gambar modern (WebP, HEIC) dan kompatibilitas

Analogi

Diagram

      Image Manipulation = Edit Foto di HP:
- Resize = perkecil dimensi (1080p → 480p)
- Crop = potong bagian tertentu
- Rotate = putar (selfie mirror, landscape fix)
- Compress = kecilin file size (3MB → 300KB)
- Format convert = ubah PNG ke WebP (lossless → lossy)
    

Image manipulation seperti edit foto di HP — resize, crop, rotate, compress, konversi format. Semua dilakukan sebelum upload.

Penjelasan Konsep

Gambar langsung dari kamera device bisa 3-12MB — terlalu besar untuk upload ke server. expo-image-manipulator memungkinkan manipulasi gambar di device sebelum upload.

API: (1) ImageManipulator.manipulateAsync(uri, actions, saveOptions). (2) Actions array: resize, rotate, flip, crop. (3) SaveOptions: compress (0-1), format (jpeg/png/webp), base64.

Resize: { resize: { width: 800 } } — maintain aspect ratio. Rotate: { rotate: 90 } — perbaiki orientasi (selfie sering perlu rotate). Crop: { crop: { originX, originY, width, height } }.

Optimasi pipeline: (1) original image (4032x3024, 4MB). (2) Resize → 1080px width (~1MB). (3) Compress quality 0.7 → ~300KB. (4) Convert ke WebP → ~120KB. Total reduksi ~97% dari original.

Format: (1) JPEG — universal, lossy, bagus untuk foto. (2) PNG — support transparansi, lossless, untuk icon/grafik. (3) WebP — modern, lebih kecil dari JPEG/PNG, support transparansi. Gunakan untuk semua upload kecuali perlu kompatibilitas legacy.

Best practice: (1) Resize ke ukuran yang akan ditampilkan (bukan upload 4K untuk thumbnail 200px). (2) Compress sebelum upload — hemat data user. (3) Generate multiple sizes (thumbnail, medium, full) untuk berbagai tampilan.

Inti yang Perlu Dipahami

Bagian ini berfokus pada mampu memanipulasi gambar dengan expo-image-manipulator., memahami strategi optimasi gambar untuk mobile., dan mengerti format gambar modern (WebP, HEIC) dan kompatibilitas. Jangan terburu-buru menghafal istilahnya. Lebih penting untuk memahami peran setiap konsep dan kapan konsep itu muncul dalam pekerjaan web development.

Saat membaca Image Manipulation & Optimization, gunakan tujuan belajar sebagai penanda arah. Kalau kamu sudah bisa menjelaskan tujuan itu dengan kata-katamu sendiri, berarti fondasinya mulai terbentuk.

Cara Membayangkannya

Image manipulation seperti edit foto di HP — resize, crop, rotate, compress, konversi format. Semua dilakukan sebelum upload. Analogi ini dipakai supaya konsep teknis tidak terasa melayang. Hubungkan setiap istilah dengan perannya: siapa yang meminta, siapa yang memproses, data apa yang berpindah, dan hasil apa yang diharapkan.

Kalau analoginya sudah terasa masuk akal, barulah lihat istilah teknisnya. Cara ini membuat materi lebih mudah dipahami daripada langsung menghafal definisi.

Saat Melihat Contoh Kode

Contoh kode pada chapter ini memakai bahasa tsx. Bacalah contoh kode sebagai ilustrasi alur, bukan sebagai bagian yang harus langsung dihafal. Resize width 1080px (cukup untuk kebanyakan UI). Compress 0.7 (keseimbangan kualitas-size). WebP format untuk kompresi maksimal. Hasil siap upload.

Perhatikan nama fungsi, urutan langkah, dan data yang berpindah. Biasanya tiga hal itu sudah cukup untuk memahami hubungan antara teori dan praktik.

Konteks dalam Perjalanan Belajar

Setiap konsep di platform ini dipilih karena dipakai di industri. Fokus pada pemahaman, bukan hafalan.

Kamu sudah di bagian lanjutan. Mulai pikirkan bagaimana konsep ini dipakai di dunia kerja — bukan hanya untuk belajar, tapi untuk membangun produk nyata.

Gunakan pertanyaan reflektif dan prompt AI di akhir chapter sebagai latihan aktif. Membaca saja tidak cukup — kamu perlu menjelaskan ulang dengan kata-katamu sendiri.

Contoh Kode

tsx
import * as ImageManipulator from "expo-image-manipulator";

async function optimizeImage(uri: string) {
  return ImageManipulator.manipulateAsync(
    uri,
    [{ resize: { width: 1080 } }],
    { compress: 0.7, format: ImageManipulator.SaveFormat.WebP }
  );
}

const result = await optimizeImage(photoUri);
await uploadToServer(result.uri);

Penjelasan Kode

Resize width 1080px (cukup untuk kebanyakan UI). Compress 0.7 (keseimbangan kualitas-size). WebP format untuk kompresi maksimal. Hasil siap upload.

Prompt AI

Desain image upload pipeline: user pilih foto → resize ke 1200px → generate 3 ukuran (thumbnail 200px, medium 600px, full 1200px) → upload ketiganya ke server. Berapa total size estimasi?

Pertanyaan Reflektif

Seberapa besar gambar yang kamu upload di aplikasi-aplikasi yang kamu pakai? Apakah mereka melakukan optimasi? Cek size foto sebelum dan sesudah upload.