Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

🖼️ image - Görüntü İşleme

Görüntü yükleme, kaydetme, dönüştürme ve filtreleme işlemleri

📦 77 Fonksiyon 📝 1770 Satır 💾 61.7 KB

📋 Genel Bakış

image modülü, görüntü dosyalarını yükleme, kaydetme, boyutlandırma, filtreleme ve dönüştürme için kapsamlı araçlar sağlar. PNG, JPEG, GIF, BMP ve WebP formatlarını destekler.

📂 Görüntü Yükleme ve Kaydetme

  • image.yükle() - Görüntü dosyası yükleme
  • image.png_kaydet() - PNG olarak kaydetme
  • image.jpeg_kaydet() - JPEG olarak kaydetme
  • image.webp_kaydet() - WebP olarak kaydetme
  • image.yeni() - Boş görüntü oluşturma

🔧 Temel Dönüşümler

  • image.yeniden_boyutlandır() - Boyut değiştirme
  • image.kırp() - Görüntü kırpma
  • image.döndür() - Döndürme (90°, 180°, 270°)
  • image.çevir() - Yatay/dikey çevirme
  • image.küçük_resim() - Thumbnail oluşturma

🎨 Renk İşlemleri

  • image.parlaklık() - Parlaklık ayarlama
  • image.kontrast() - Kontrast ayarlama
  • image.doygunluk() - Renk doygunluğu
  • image.gri_tonlama() - Grayscale dönüşümü
  • image.ters_çevir() - Renk inversiyonu
  • image.sepia() - Sepia efekti

🔍 Filtreler ve Efektler

  • image.bulanıklaştır() - Blur efekti
  • image.keskinleştir() - Sharpen filtresi
  • image.kenar_algıla() - Edge detection
  • image.gürültü_ekle() - Noise ekleme
  • image.gürültü_azalt() - Denoising
  • image.mozaik() - Pixelate efekti

🖌️ Çizim ve Metin

  • image.piksel_ayarla() - Piksel rengi ayarlama
  • image.piksel_al() - Piksel rengi okuma
  • image.dikdörtgen_çiz() - Dikdörtgen çizme
  • image.metin_yaz() - Metin ekleme

📊 Görüntü Bilgisi

  • image.genişlik() - Genişlik bilgisi
  • image.yükseklik() - Yükseklik bilgisi
  • image.format() - Dosya formatı
  • image.histpgram() - Renk histogramı

💡 Kullanım Örnekleri

Görüntü Boyutlandırma ve Thumbnail

kullan image
kullan fs

// Görüntü yükleme
değer resim = image.yükle("fotoğraf.jpg")

yazdır(f"Orijinal boyut: {resim.genişlik()}x{resim.yükseklik()}")

// Yüksek kaliteli yeniden boyutlandırma
değer orta_boy = resim.yeniden_boyutlandır(
    genişlik: 1024,
    yükseklik: 768,
    kalite: image.Kalite.YÜKSEK
)

orta_boy.jpeg_kaydet("fotoğraf_orta.jpg", kalite: 90)
yazdır("✓ Orta boy kaydedildi")

// Thumbnail oluştur (oran korunur)
değer thumbnail = resim.küçük_resim(200, 200)
thumbnail.png_kaydet("fotoğraf_thumb.png")
yazdır("✓ Thumbnail oluşturuldu")

// Kare kırpma (profil fotoğrafı için)
değer merkez_x = resim.genişlik() / 2
değer merkez_y = resim.yükseklik() / 2
değer kare_boyut = 500

değer profil = resim.kırp(
    x: merkez_x - kare_boyut / 2,
    y: merkez_y - kare_boyut / 2,
    genişlik: kare_boyut,
    yükseklik: kare_boyut
)

profil.png_kaydet("profil.png")
yazdır("✓ Profil fotoğrafı oluşturuldu")

Görüntü Filtreleme ve Efektler

kullan image

değer resim = image.yükle("manzara.jpg")

// Gri tonlama
değer gri = resim.gri_tonlama()
gri.jpeg_kaydet("manzara_gri.jpg")
yazdır("✓ Gri tonlama uygulandı")

// Sepia efekti (nostaljik görünüm)
değer sepia = resim.sepia()
sepia.jpeg_kaydet("manzara_sepia.jpg")
yazdır("✓ Sepia efekti uygulandı")

// Parlaklık ve kontrast ayarlama
değer parlak = resim
    .parlaklık(1.2)      // %20 daha parlak
    .kontrast(1.3)       // %30 daha fazla kontrast
    .doygunluk(1.1)      // %10 daha doygun renkler

parlak.jpeg_kaydet("manzara_parlak.jpg")
yazdır("✓ Renk ayarlaması yapıldı")

// Bulanıklaştırma
değer bulanık = resim.bulanıklaştır(yarıçap: 5.0)
bulanık.jpeg_kaydet("manzara_bulanık.jpg")
yazdır("✓ Blur efekti uygulandı")

// Keskinleştirme
değer keskin = resim.keskinleştir(miktar: 1.5)
keskin.jpeg_kaydet("manzara_keskin.jpg")
yazdır("✓ Keskinleştirme uygulandı")

// Kenar algılama (edge detection)
değer kenarlar = resim.kenar_algıla(eşik: 100)
kenarlar.png_kaydet("manzara_kenarlar.png")
yazdır("✓ Kenar algılama yapıldı")

// Mozaik efekti
değer mozaik = resim.mozaik(piksel_boyutu: 10)
mozaik.jpeg_kaydet("manzara_mozaik.jpg")
yazdır("✓ Mozaik efekti uygulandı")

Toplu Görüntü İşleme

kullan image
kullan fs

sınıf Görüntüİşlemci {
    fonksiyon toplu_yeniden_boyutlandır(
        kaynak_klasör: Dize,
        hedef_klasör: Dize,
        max_genişlik: Tam,
        max_yükseklik: Tam
    ) -> Sonuç<Tam, Hata> {
        // Hedef klasörü oluştur
        fs.klasör_oluştur(hedef_klasör)?
        
        // Tüm görüntü dosyalarını bul
        değer dosyalar = fs.dosyalar_listele(kaynak_klasör)?
        değer görüntü_uzantıları = [".jpg", ".jpeg", ".png", ".bmp", ".gif"]
        
        değer işlenen = 0
        
        için dosya içinde dosyalar {
            değer uzantı = fs.uzantı(dosya).küçük_harfe()
            
            eğer uzantı içinde görüntü_uzantıları {
                değer kaynak_yol = fs.birleştir(kaynak_klasör, dosya)
                değer hedef_yol = fs.birleştir(hedef_klasör, dosya)
                
                dene {
                    değer resim = image.yükle(kaynak_yol)
                    
                    // Boyutu kontrol et
                    eğer resim.genişlik() > max_genişlik veya resim.yükseklik() > max_yükseklik {
                        // Orantılı boyutlandırma
                        değer oran = (max_genişlik.gerçek() / resim.genişlik().gerçek())
                            .min(max_yükseklik.gerçek() / resim.yükseklik().gerçek())
                        
                        değer yeni_genişlik = (resim.genişlik().gerçek() * oran).tam()
                        değer yeni_yükseklik = (resim.yükseklik().gerçek() * oran).tam()
                        
                        değer yeni_resim = resim.yeniden_boyutlandır(
                            yeni_genişlik,
                            yeni_yükseklik,
                            kalite: image.Kalite.YÜKSEK
                        )
                        
                        yeni_resim.jpeg_kaydet(hedef_yol, kalite: 85)
                        yazdır(f"✓ İşlendi: {dosya} ({resim.genişlik()}x{resim.yükseklik()} -> {yeni_genişlik}x{yeni_yükseklik})")
                        işlenen += 1
                    } yoksa {
                        // Boyut zaten uygun, sadece kopyala
                        fs.dosya_kopyala(kaynak_yol, hedef_yol)?
                        yazdır(f"→ Kopyalandı: {dosya}")
                        işlenen += 1
                    }
                } yakala hata {
                    yazdır(f"❌ Hata ({dosya}): {hata}")
                }
            }
        }
        
        dön Tamam(işlenen)
    }
    
    fonksiyon watermark_ekle(
        kaynak: Dize,
        hedef: Dize,
        watermark_metin: Dize,
        konum: Dize = "sağ_alt"
    ) -> Sonuç<Boş, Hata> {
        değer resim = image.yükle(kaynak)?
        
        // Watermark konumunu hesapla
        değer (x, y) = eşleştir konum {
            "sol_üst" => (10, 10),
            "sağ_üst" => (resim.genişlik() - 200, 10),
            "sol_alt" => (10, resim.yükseklik() - 40),
            "sağ_alt" => (resim.genişlik() - 200, resim.yükseklik() - 40),
            _ => (10, resim.yükseklik() - 40)
        }
        
        // Yarı şeffaf metin ekle
        resim.metin_yaz(
            watermark_metin,
            x: x,
            y: y,
            font: "Arial",
            boyut: 24,
            renk: image.rgba(255, 255, 255, 180),  // Beyaz, %70 opaklık
            gölge: doğru
        )
        
        resim.jpeg_kaydet(hedef, kalite: 90)?
        dön Tamam(boş)
    }
}

// Kullanım
değer işlemci = Görüntüİşlemci {}

// Toplu yeniden boyutlandırma
yazdır("Görüntüler yeniden boyutlandırılıyor...")
değer sonuç = işlemci.toplu_yeniden_boyutlandır(
    "orijinal_resimler",
    "küçük_resimler",
    1920,
    1080
).aç()

yazdır(f"\n✓ Toplam {sonuç} görüntü işlendi")

// Watermark ekle
işlemci.watermark_ekle(
    "fotoğraf.jpg",
    "fotoğraf_watermark.jpg",
    "© 2024 Benim Fotoğraflarım",
    konum: "sağ_alt"
).aç()

yazdır("✓ Watermark eklendi")

🎯 İyi Uygulamalar

  • Yeniden boyutlandırmada yüksek kalite filtreleri kullanın
  • JPEG kayıt için 85-95 arası kalite değeri optimal
  • Dosya boyutunu küçültmek için WebP formatını düşünün
  • Büyük görüntülerde streaming işleme kullanın
  • Thumbnail'ler için aspect ratio'yu koruyun
  • Watermark için şeffaf PNG kullanın
  • Filtreleri art arda uygulamak yerine kombine edin

🔗 İlgili Modüller