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ı:
- Gerekli Kütüphaneler: Aşağıdaki komutlarla gerekli kütüphaneleri yükleyin:
pip install rembg pillow pip install onnxruntime
- 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.
- 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.
- 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.