Django da Imagefiled ile yüklenen görselleri otomatik boyutlandırıp, boş bir görselin ortasına almak ve farklı boyutlarda yeni görseller üretmek içinr örnek kod
class Gorseller(models.Model):
galeri = models.ForeignKey(Galeri, on_delete=models.CASCADE)
dosya = models.ImageField(_('Görsel'), upload_to='galeri/')
aciklama = models.CharField(_('Açıklama'), max_length=250, help_text=_("En fazla 250 karakter"), default='deneme')def save(self, *args, **kwargs):
if self.dosya:
from PIL import Image### NOT: media/galeri/
### NOT: media/galeri/thumb/
### NOT: media/galeri/gecici/
### Mutlaka oluşturulmuş olmalıthdosya_adi = '{}/galeri/thumb/{}-{}.jpg'.format(MEDIA_ROOT, slugify(self.galeri.adi), slugify(self.aciklama))
gecicidosya_adi = '{}/galeri/gecici/{}-{}.jpg'.format(MEDIA_ROOT, slugify(self.galeri.adi), slugify(self.aciklama))arkaplan_Genislik, arkaplan_Yukseklik = 1920, 1080
thm_Genislik, thm_Yukseklik = 192, 108## Yüklenen dosyayı oku
dosya = Image.open(BytesIO(self.dosya.read()))### Tekrar boyutlandırılmak istenen görsel boyutları
dosya.thumbnail((arkaplan_Genislik, arkaplan_Yukseklik), Image.ANTIALIAS)
dosya.save(gecicidosya_adi, format='JPEG', quality=75)### Thumnail için istenen görsel boyutları
dosya.thumbnail((thm_Genislik, thm_Yukseklik), Image.ANTIALIAS)
dosya.save(thdosya_adi, format='JPEG', quality=100)### Boyutlandırılan görseli aç
gecici_img = Image.open(gecicidosya_adi)### Ortalanması için istenen boşluk değerlerini hesapla
yukaridan = int((arkaplan_Yukseklik - gecici_img.size[1]) / 2)
soldan = int((arkaplan_Genislik - gecici_img.size[0]) / 2)### Beyaz arkaplanlı boş bir dosya oluştur
bos = Image.new("RGB", (arkaplan_Genislik, arkaplan_Yukseklik), '#ffffff')
### Beyaz görsele boyutlandırılmış görseli ortalayarak ekle
bos.paste(gecici_img, (soldan, yukaridan))
### Dosyayı kaydetmek için geçici bir bellek oluştur
bosalan = BytesIO()
bos.save(bosalan, format='JPEG', quality=100)
bosalan.seek(0)self.dosya = InMemoryUploadedFile(bosalan, 'ImageField', "{}-{}.jpg".format(slugify(self.galeri.adi), slugify(self.aciklama)), 'image/jpeg', bosalan.tell(), None)super().save(*args, **kwargs)
Django
hakkında diğer konular