• 27-02-2026, 23:47:28
    #1
    Herkese selamlar,
    Sitelere onlarca resim yüklerken boyutları tek tek küçültmek büyük zaman kaybı. Kendi kullandığım, görüntü kalitesini gözle görülür şekilde bozmadan resimlerin dosya boyutunu %50-%80 oranında düşüren Python botunu sizlerle paylaşıyorum.
    Nasıl Kullanılır? (Çok Basit)
    1. Bilgisayarınızda Python kurulu olmalı. CMD'yi (Terminal) açıp şu komutla kütüphaneyi kurun pip install Pillow
    2. Aşağıda paylaştığım Python kodunu bilgisayarınıza bot.py olarak kaydedin ve ilk kez çalıştırın.
    3. Çalıştırdığınızda kodun olduğu yere otomatik olarak ornek_klasor ve optimize_edilmis_resimler adında iki adet klasör açılacak.
    4. Boyutunu küçültmek istediğiniz tüm resimleri ornek_klasor içine atın.
    5. Botu tekrar çalıştırın. İşlem bu kadar! Bot saniyeler içinde tüm resimleri kalitesini koruyarak daraltıp optimize_edilmis_resimler klasörüne atacaktır. Orijinal resimlerinize kesinlikle dokunmaz.


      İyi çalışmalar dilerim, takıldığınız bir yer olursa konu altından sorabilirsiniz!

      import os
      from pathlib import Path
      from PIL import Image
      import concurrent.futures
      
      def compress_image(input_path: Path, output_path: Path, quality: int = 85) -> bool:
          """
          Görselin kalitesini koruyarak boyutunu küçültür ve yeni hedefe kaydeder.
          """
          try:
              with Image.open(input_path) as img:
                  # Şeffaflık içeren (PNG) veya palet tabanlı (P) görselleri JPG uyumlu hale getirmek için RGB'ye çevir
                  if img.mode in ("RGBA", "P"):
                      img = img.convert("RGB")
                  
                  # optimize=True parametresi, kaliteyi düşürmeden dosya boyutunu algoritmik olarak küçültür
                  img.save(output_path, format="JPEG", quality=quality, optimize=True)
              return True
          except Exception as e:
              print(f"[HATA] {input_path.name} işlenirken bir sorun oluştu: {e}")
              return False
      
      def batch_compress_images(input_dir: str, output_dir: str, quality: int = 85):
          """
          Belirtilen klasördeki tüm görselleri asenkron olarak işler ve çıktı klasörüne aktarır.
          """
          input_path = Path(input_dir)
          output_path = Path(output_dir)
      
          # Çıktı klasörünü oluştur (varsa hata verme)
          output_path.mkdir(parents=True, exist_ok=True)
      
          # İşlenecek hedef dosya uzantıları
          valid_extensions = {".jpg", ".jpeg", ".png", ".webp", ".bmp"}
          
          # Klasördeki görselleri topla
          image_files = [f for f in input_path.iterdir() if f.is_file() and f.suffix.lower() in valid_extensions]
          
          if not image_files:
              print(f"[BİLGİ] '{input_dir}' klasöründe işlenecek uygun görsel bulunamadı.")
              return
      
          print(f"[BAŞLIYOR] Toplam {len(image_files)} görsel bulundu. Çoklu iş parçacığı ile işlem başlatılıyor...")
      
          success_count = 0
          
          # ThreadPoolExecutor ile işlemleri paralel olarak yürüterek CPU ve I/O bekleme sürelerini minimize ediyoruz
          with concurrent.futures.ThreadPoolExecutor() as executor:
              futures = {}
              for img_file in image_files:
                  # Çıktı dosya adını belirle (Örn: resim_min.jpg)
                  out_file = output_path / f"{img_file.stem}_min.jpg"
                  
                  # İşlemi havuza gönder
                  futures[executor.submit(compress_image, img_file, out_file, quality)] = img_file
      
              # İşlemlerin tamamlanmasını takip et
              for future in concurrent.futures.as_completed(futures):
                  if future.result():
                      success_count += 1
      
          print("-" * 50)
          print(f"[TAMAMLANDI] {success_count} / {len(image_files)} görsel başarıyla optimize edildi.")
          print(f"[KONUM] Çıktı klasörü: {output_path.absolute()}")
      
      if __name__ == "__main__":
          # --- YAPILANDIRMA ---
          INPUT_FOLDER = "ornek_klasor"             # Okunacak klasörün adı
          OUTPUT_FOLDER = "optimize_edilmis_resimler" # Oluşturulacak yeni klasörün adı
          COMPRESSION_QUALITY = 85                  # 85 kalitesi, gözle görülür kayıp olmadan en iyi optimizasyonu sağlar
          
          # Eğer input klasörü yoksa test amaçlı oluştur (hata almamak için)
          Path(INPUT_FOLDER).mkdir(exist_ok=True)
          
          batch_compress_images(INPUT_FOLDER, OUTPUT_FOLDER, quality=COMPRESSION_QUALITY)
  • 27-02-2026, 23:48:15
    #2
    Teşekkürler hocam
  • 27-02-2026, 23:57:17
    #3
    Elinize sağlık teşekkürler
  • 28-02-2026, 08:49:49
    #4
    Hocam harika emeğinize sağlık.
    Peki optimize edilmiş görsellerin isimleri değişmiyor demi sadece KB veya MB cinsinde but kücülüyor.
    websitelerimizde genelde çok görsel bulunuyor masaüstüne alıp optimizasyon ayılabilr bununla demi ?
  • 28-02-2026, 15:31:10
    #5
    klasweb adlı üyeden alıntı: mesajı görüntüle
    Hocam harika emeğinize sağlık.
    Peki optimize edilmiş görsellerin isimleri değişmiyor demi sadece KB veya MB cinsinde but kücülüyor.
    websitelerimizde genelde çok görsel bulunuyor masaüstüne alıp optimizasyon ayılabilr bununla demi ?
    İsimlerin değişmemesi lazım evet toplu şekilde boyut küçültebilirsiniz tek tek uğraşmak yerine
  • 28-02-2026, 18:10:43
    #6
    useralpha adlı üyeden alıntı: mesajı görüntüle
    İsimlerin değişmemesi lazım evet toplu şekilde boyut küçültebilirsiniz tek tek uğraşmak yerine
    süper hocam , inşallah isimler değişmiyordur. tekrar emeğinize sağlık.