Fotoğrafını yükle, çeşitli ayarlarla (piksel boyutu, renk paleti, dithering, parlaklık/kontrast/doygunluk, ızgara) piksel sanatına dönüştür ve PNG olarak indir.
- Frontend: saf HTML + CSS + JavaScript (build adımı yok)
- Görüntü işleme: Python + OpenCV (
opencv-python-headless), Vercel Python serverless fonksiyonu olarak/api/pixelatealtında çalışır
Tüm görüntü işleme sunucu tarafında (OpenCV) yapılır; tarayıcı sadece görseli küçültüp gönderir ve sonucu gösterir.
pixel-forge/
├── index.html # sayfa (cihaz çerçeveli önizleme + kontrol paneli)
├── style.css # tasarım
├── script.js # yükleme, debounce, API çağrısı, indirme
├── api/
│ └── index.py # FastAPI + OpenCV işleme fonksiyonu
├── requirements.txt # Python bağımlılıkları
└── vercel.json # fonksiyon zaman aşımı ayarı
Vercel CLI, hem statik dosyaları hem de Python fonksiyonunu birlikte çalıştırabilir:
npm i -g vercel
cd pixel-forge
vercel devTerminalde verilen adresi (genelde http://localhost:3000) tarayıcıda aç.
Not:
vercel devilk çalıştırmada Python bağımlılıklarını (requirements.txt) otomatik kurar; bu biraz zaman alabilir.
cd pixel-forge
git init
git add .
git commit -m "İlk sürüm: Pixel Forge"
git branch -M main
git remote add origin https://github.com/KULLANICI_ADIN/pixel-forge.git
git push -u origin mainSeçenek A — Vercel Dashboard üzerinden (önerilen):
- https://vercel.com adresine gir, GitHub hesabınla giriş yap
- "Add New Project" → GitHub reponu (
pixel-forge) seç - Framework olarak "Other" otomatik algılanır, ayar değiştirmene gerek yok
- "Deploy" butonuna bas
Seçenek B — CLI ile:
cd pixel-forge
vercel # önce preview deploy
vercel --prod # canlıya alDeploy tamamlandığında Vercel sana https://pixel-forge-xxxx.vercel.app gibi bir
canlı adres verecek.
- Yüklenen görsel tarayıcıda en fazla 1024px kenara sıkıştırılıp sunucuya gönderilir (hız ve Vercel'in istek boyutu sınırı için).
- Her ayar değişikliğinde (slider vb.) 300ms bekleyip tek istek gönderilir (debounce) — sunucuyu gereksiz yormamak için.
- Vercel Hobby planında fonksiyon çalışma süresi sınırlıdır;
vercel.jsoniçindemaxDuration: 30tanımlı, ihtiyaca göre artırılabilir (Pro planda 60 saniyeye kadar). - Dithering (Floyd–Steinberg) küçük mozaik çözünürlüğünde çalıştığı için hızlıdır, ama çok küçük piksel boyutu (2-3px) seçildiğinde işlem biraz daha uzun sürebilir.