Programlama

Arka Plan Kaldırma

Reklam

Bu Python scripti, bir klasördeki resimlerin arka planlarını kaldırarak yeni bir klasöre kaydeder. Resimler PNG formatında kaydedilir ve boyutları orijinal boyutlarına göre optimize edilir.

📜 Kod:

import os
from rembg import remove, new_session
from PIL import Image
import io
import traceback
import time

# Başlangıç zamanı
start_time = time.time()

# Klasörler
input_folder = 'images'
output_folder = 'images/image'
log_file = 'log.txt'

# Çıktı klasörü yoksa oluştur
os.makedirs(output_folder, exist_ok=True)

# Log dosyasını başlat
with open(log_file, 'w') as log:
    log.write('Arka Plan Kaldırma İşlem Raporu\n')
    log.write('=============================\n')

# u2netp oturumu başlat (hafif model)
session = new_session(model_name='u2netp')

# Toplam resim sayısı
image_files = [f for f in os.listdir(input_folder) if f.lower().endswith(('.jpg', '.jpeg', '.png'))]
total_files = len(image_files)
processed_files = 0

# Resimler üzerinde dön
for filename in image_files:
    processed_files += 1
    print(f'İşleniyor: {filename} ({processed_files}/{total_files})')

    input_path = os.path.join(input_folder, filename)
    output_path = os.path.join(output_folder, os.path.splitext(filename)[0] + '.png')

    try:
        # Giriş verisini oku
        with open(input_path, 'rb') as f:
            input_data = f.read()

        # Orijinal boyutu oku
        input_image = Image.open(io.BytesIO(input_data))
        original_size = input_image.size
        print(f"Giriş Görsel Boyutu: {original_size}")

        # Arka planı kaldır
        output_data = remove(input_data, session=session)

        # PNG olarak yeniden oku
        output_image = Image.open(io.BytesIO(output_data)).convert("RGBA")

        # Eğer boyut değişmişse, orijinal boyuta getir
        if output_image.size != original_size:
            print(f"Çıktı görsel boyutu farklı: {output_image.size}, yeniden ölçekleniyor...")
            output_image = output_image.resize(original_size, Image.LANCZOS)

        # Şeffaf pikselleri iyileştir
        new_data = [
            (r, g, b, a if a > 0 else 0)
            for r, g, b, a in output_image.getdata()
        ]
        output_image.putdata(new_data)

        # Kaydet ve optimize et
        output_image.save(output_path, 'PNG', optimize=True, compress_level=9)

        # Dosya boyutunu yazdır
        output_size = os.path.getsize(output_path) / (1024 * 1024)
        print(f"Çıktı Boyutu: {output_size:.2f} MB")

        # Loga başarı yaz
        with open(log_file, 'a') as log:
            log.write(f'{filename} başarıyla işlendi: {output_path} ({output_size:.2f} MB)\n')

    except Exception as e:
        error_msg = f"Hata: {filename} - {str(e)}\n{traceback.format_exc()}"
        print(error_msg)
        with open(log_file, 'a') as log:
            log.write(f'{error_msg}\n')

# Süreyi hesapla
end_time = time.time()
print(f"Toplam süre: {end_time - start_time:.2f} saniye")
input("Çıkmak için Enter'a basın...")

📋 Kullanım Talimatları:

  1. Gerekli Kütüphaneler: Aşağıdaki komutlarla gerekli kütüphaneleri yükleyin: pip install rembg pillow pip install onnxruntime
  2. Dosya Yapısını Hazırlama:
    • images adında bir klasör oluşturun.
    • Klasöre işlemek istediğiniz görselleri yükleyin.
    • Çıktıların images/image klasörüne kaydedilecektir.
  3. Scripti Çalıştırma:
    • Terminal veya komut istemcisinde scripti çalıştırın:
    python remove_background.py
    • Çalıştırdığınızda, resimlerin arka planları kaldırılacak ve yeni dosyalar images/image klasöründe PNG formatında kaydedilecektir.
    • Her işlemle ilgili detaylı bir log dosyası log.txt dosyasına kaydedilecektir.
  4. Log Dosyası:
    • log.txt dosyasına, her resmin başarıyla işlenip işlenmediği, işlem sırası ve dosya boyutları hakkında bilgiler yazılacaktır.

🖼️ Örnek Çıktı:

İşleniyor: image1.jpg (1/5)
Giriş Görsel Boyutu: (800, 600)
Çıktı Boyutu: 1.21 MB
image1.jpg başarıyla işlendi: images/image/image1.png (1.21 MB)

İşleniyor: image2.png (2/5)
Giriş Görsel Boyutu: (1024, 768)
Çıktı Boyutu: 1.10 MB
image2.png başarıyla işlendi: images/image/image2.png (1.10 MB)

Toplam süre: 35.24 saniye

💾 Ekstra Bilgiler:

  • Resim Boyutu: Arka plan kaldırma işlemi sonrasında resmin boyutları optimize edilmiştir ve PNG formatında kaydedilir.
  • Şeffaflık Düzeltme: Şeffaf piksellerin doğru şekilde işlenebilmesi için özel bir işlem yapılır.

Reklam
Bu yazı faydalı oldu mu?
Yazar

Kutay Utku

Denediğim, kurduğum ve öğrendiğim teknolojileri sade bir dille anlatıyorum. Sorularını yorumlarda bekliyorum.

Tüm yazıları (661)

Yorumlar

Henüz yorum yapılmamış Düşüncelerini paylaşan ilk kişi sen ol.

Yorum yaz

E-posta adresin yayınlanmaz. Zorunlu alanlar * ile işaretlidir.

Kod paylaşırken <code> etiketini kullanabilirsin.0

Yorumun onaylandıktan sonra yayınlanır.