Görsel ve video dönüşümleri¶
TEBHOS görselleri yeniden boyutlandırır ve dönüştürür, animasyonu korur ya da kaldırır ve bir videodan durağan bir görsel çıkarır. Görsel varlık yolları ile depolanmış nesne yolu tek bir dönüşüm motorunu paylaşır. Medya vekilindeki imzalı harici medya yolunun ise bu sayfanın sonunda açıklanan, daha küçük ve ayrı bir kümesi vardır.
Dönüşüm ne zaman çalışır¶
Görsel varlık isteği her zaman motordan geçer, çünkü hiçbir parametre verilmese bile varsayılan 128 size değeri uygulanır. Depolanmış nesne isteği ise size, width, height, format veya animated=false belirttiğinde ya da biçim Accept üzerinden belirlendiğinde motordan geçer.
Motor, aşağıdakilerin tümü sağlandığında özgün baytları değiştirmeden döndürür:
- çözümlenen boyut en az kaynak boyutları kadardır (görseller hiçbir zaman büyütülmez),
- çözümlenen biçim kaynak biçimle aynıdır ve
- kaynak animasyonlu değildir ya da animasyon istenmiştir.
Yalnızca PNG, JPEG, GIF ve WebP kaynaklar dönüştürülür. Motor hiçbir şeyi kanonik hâle getirmez ve yönlendirme yapmaz; bu nedenle aynı seçimin iki yazımı (?size=60 ve ?size=64), aynı görseli üretseler bile iki ayrı HTTP önbellek girdisidir.
Gösterim parametreleri¶
| Alan | Yollar | Açıklama |
|---|---|---|
| size? | Görsel varlık, depolanmış nesne | İstenen kare kenar uzunluğu, bkz. Varlık boyutu seçimi |
| width? | Depolanmış nesne | En büyük çıktı genişliği |
| height? | Depolanmış nesne | En büyük çıktı yüksekliği |
| format? | Depolanmış nesne | Çıktı biçimi: webp, png, jpg, jpeg veya gif. Görsel varlık yollarında biçim bunun yerine yol uzantısından gelir |
| animated? | Görsel varlık, depolanmış nesne | true veya 1 animasyonu korur, false veya 0 ilk kareyi döndürür. Büyük/küçük harf duyarsız eşleşir |
Depolanmış nesne yolunda size önceliklidir: bulunduğunda width ve height yok sayılır.
TEBHOS'ta desteklenmez
quality, effort, download veya fmt parametresi, AVIF çıktısı ve kaplayacak şekilde kırpma yoktur. Bilinmeyen parametreler yok sayılır.
İzin verilen boyutlar¶
İstenen her boyut, sabit bir basamak dizisinde en az onun kadar büyük olan ilk basamağa yukarı yuvarlanır:
16, 20, 22, 24, 28, 32, 40, 44, 48, 56, 60, 64, 80, 96, 100, 128, 160, 240, 256, 300, 320, 480, 512, 600, 640, 1024, 1280, 1536, 2048, 3072, 4096, 8192, 16384
Dolayısıyla size=641 1024'ü seçer, 16384'ün üzerindeki bir istek ise 16384'ü seçer. Sonuç daha sonra Varlık boyutu seçimi bölümündeki boyut sınıfına göre sıkıştırılır. Görüntülediğiniz boyutu cihaz piksel oranıyla çarparak isteyin; yuvarlama size hiçbir zaman istediğinizden daha az piksel vermez.
Geometri¶
Dönüşümler bir görseli hiçbir zaman büyütmez ve en-boy oranını her zaman korur. Çıktı, istenen kutuya sığan en büyük görseldir:
- Görsel varlık isteği görseli
size×sizebir kareye sığdırır. - Depolanmış nesne isteği onu
size×sizeiçine ya da yalnızca bunlar verildiğindewidth×heightiçine sığdırır. Yalnızcawidth(veya yalnızcaheight) verildiğinde diğer boyut sınırlanmaz.
Kırpma yapılmaz. Durağan görseller Catmull-Rom filtresiyle, animasyon kareleri üçgen filtresiyle yeniden boyutlandırılır.
Durağan çıktıda kaynağın EXIF yönlendirmesi yeniden boyutlandırmadan önce piksellere uygulanır; böylece yeniden kodlanan görsel hiçbir EXIF verisi taşımasa da telefonlarla çekilen fotoğraflar dik görünür.
Varlık boyutu seçimi¶
İstenen değer basamak dizisine yuvarlanır ve ardından varlığın boyut sınıfının aralığına sıkıştırılır.
| Boyut sınıfı | Uygulandığı yer | Aralık |
|---|---|---|
| Simge | avatars, server-icons ve avatars/, server-icons/ ya da group-dm-icons/ ile başlayan /files/ anahtarları |
128 ile 1024 arası |
| Afiş | banners, server-banners, server-invite-bg, server-embed-bg, live-room-banners ve bu adlarla başlayan /files/ anahtarları |
480 ile 2400 arası |
| Emoji | emojis/ ile başlayan /files/ anahtarları |
32 ile 512 arası |
| Çıkartma | stickers/ ile başlayan /files/ anahtarları |
128 ile 512 arası |
| Diğer | Ekler dahil diğer tüm /files/ anahtarları |
En fazla 4096, alt sınır yok |
size içermeyen bir görsel varlık isteği sıkıştırmadan önce 128'e çözümlenir; bu nedenle bir avatar veya sunucu simgesi varsayılan olarak 128, bir afiş ise 480 olur. Bir sınıfın alt sınırının altındaki her basamak değeri o alt sınıra, üst sınırının üzerindeki her değer o üst sınıra indirgenir; 2400'lük afiş üst sınırı bir basamak değeri değildir ve yalnızca sıkıştırmayla elde edilebilir.
Küçük simgeler 128 olarak sunulur
Simge sınıfı 128'den başladığından, bir avatarda size=32 yine 128 px'lik bir görsel (ya da daha küçükse özgün görseli) döndürür. İstemcide küçültün.
Biçimler¶
| Çıktı | Kodlama |
|---|---|
| WebP | Kayıplı, kalite 85. Animasyonlu WebP kalite 80 kullanır ve sonsuz döngüde oynar |
| PNG | Kayıpsız; kaynağın renk türü korunur |
| JPEG | Kalite 88. JPEG'de alfa kanalı olmadığından saydam pikseller beyaz üzerine birleştirilir |
| GIF | Paletli GIF; animasyonlu GIF sonsuz döngüde oynar |
Görsel varlık yollarında çıktıyı yol uzantısı seçer: webp, png, jpg/jpeg veya gif. Uzantısı olmayan bir URL depolanmış biçimi korur. Depolanmış nesne yolunda çıktı sırasıyla format parametresi, ardından Accept belirlemesi, ardından depolanmış biçimdir.
Animasyon¶
GIF, animasyonlu WebP ve animasyonlu PNG (APNG) kaynaklar animasyonlu olarak tanınır. Animasyonlu yüklemelerin varlık karmaları a_ önekini taşır.
| Durum | Sonuç |
|---|---|
| Animasyon istendi ve çıktı WebP veya GIF | Her kare yeniden boyutlandırılır ve yeniden kodlanır; kare gecikmeleri korunur, alt sınır 20 ms'dir |
| Animasyon istendi ve çıktı PNG veya JPEG | Durağan görsel olarak ilk kare |
animated=false |
Durağan görsel olarak ilk kare |
Varsayılan: görsel varlık yollarında yalnızca karma a_ ile başlıyorsa animasyonlu; depolanmış nesne yolunda animasyonlu.
Özgün gösterimler¶
Aşağıdaki durumlarda özgün depolanmış baytlar kendi içerik türleriyle döndürülür:
- doğrudan geçiş koşulları sağlandığında veya
- kaynak bir dönüşüm sınırını aştığında, yani kodunun çözülmesi güvenli olmayacağında.
İkinci durumda yanıt, ne istenmiş olursa olsun kaynağın boyutunda ve biçimindedir.
Dönüşüm sınırları¶
| Sınır | Değer | Aşıldığında etkisi |
|---|---|---|
| Tek bir karedeki piksel sayısı | 64,000,000 | Özgün baytlar döndürülür |
| Bir animasyonun tüm karelerindeki toplam piksel | 50,000,000 | Özgün baytlar döndürülür |
| Bir animasyondaki kare sayısı | 1000 | Özgün baytlar döndürülür |
| Adlandırılmış boyut sınıfları dışındaki anahtarlar için en büyük kenar | 4096 | İstenen boyut sıkıştırılır |
Görsel olarak tanınan ancak kodu çözülemeyen veya kodlanamayan bir kaynak 422 döndürür, bkz. Yanıtlar ve sınırlar.
İmzalı harici dönüşümler¶
Medya vekilindeki imzalı harici medya yolu yalnızca format=webp verildiğinde dönüşüm yapar. Bu durumda kaynağın içerik türüne göre davranır:
| Kaynak içerik | Koşul | Sonuç |
|---|---|---|
| Durağan görsel (GIF değil, SVG değil) | width veya height verilmiş |
width × height içine sığan en büyük boyuta ölçeklenir (her biri 4096 ile sınırlı, eksik olan 4096 kabul edilir), en-boy oranı korunur ve WebP olarak kodlanır. Medya yollarından farklı olarak bu, daha küçük bir kaynağı büyütebilir |
| Durağan görsel | Ne width ne height |
Değiştirilmeden geçirilir |
| GIF | Her zaman | Animasyonlu WebP'ye (kalite 60) dönüştürülür. Genişlik, verildiyse width olur; hiçbir zaman kaynaktan büyük ve 1024'ün üzerinde değildir; yükseklik en-boy oranını izler |
| Video | Her zaman | İlk karenin WebP biçiminde durağan bir kapak görseli, width piksel genişliğinde (varsayılan 480, 16–1280 aralığına sıkıştırılır) |
| SVG, ses, diğer her şey | Her zaman | Değiştirilmeden geçirilir |
format=webp olmadan width ve height yok sayılır ve kaynak baytları doğrudan akıtılır. Dönüştürülebilmesi için kaynak gövdesinin tamamı boyut sınırına sığmalıdır.