Giriş

1
2

Günümüzde yüksek kaliteli görüntüler satın aldığımız fotoğraf makineleri veya en basitinden cebimizdeki telefonlar aracılığı ile çok kolay ulaşılabilir hale geldi. Mesela son 4-5 sene içerisinde aldığımız bir telefon ile yüksek çözünürlüklü (50-100MP) fotoğraf çekebiliyor veya yüksek çözünürlüklü olmasa dahi RAW formatında daha fazla veri içeren fotoğraflar elde edebiliyoruz. Yani eskiden dert yakındığımız birçok konu (çözünürlük, kalite vb.) günümüzdeki teknolojiler tarafından sorun olmaktan çıkarıldı. Fakat bununla birlikte beraberlerinde yeni sorunları da getirmeyi ihmal etmediler. Bunun en bilinen örneği ise yüksek dosya boyutları nedeniyle kısa sürede dosyaları depolayamaz hale gelmek. Örnek vermek gerekirse eğer yakın zamanda bir arkadaşımın yaşadığı bir durumdan bahsetmek isterim. Kendisi bir iPhone kullanıcısı olarak telefonunu aldığı günden beridir aralıksız her etkinliğimizde grup fotoğraflarımızı çeker ve kendisi de bunun haricinde fotoğraf çekmeyi sever. Sonuç olarak kısa bir süre içerisinde telefonunun tüm hafızasını (çoğunluğu fotoğraf olmak üzere) doldurdu. Çektiği fotoğrafları çok sevdiğinden ve hiçbirini silmek istemediğinden dolayı bana bir çözüm bulmam için geldi. Ben de bu süreçte kendisine önerdiğim çözümleri ve bu süreçte yaptığım açıklamaları bir rehber haline getirip size sunmak istedim.

Bu yazıda, modern görüntü sıkıştırma araçlarından ikisi olan avifenc ve cwebp’yi ele alacağız. Özellikle web geliştiricileri (benim tanışma şeklimde de böyle oldu) ve tasarımcılar için değerli olan bu araçlar, AVIF ve WebP formatlarında yüksek verimli sıkıştırma sunar. Her iki araç da ücretsiz ve açık kaynaklı olup, geniş bir kullanıcı topluluğu tarafından desteklenmektedir. WebP formatı Google tarafından geliştirilmekte olup Open Media Alliance tarafından geliştirilmektedir.

Fotoğraf Sıkıştırma Teknikleri: Detaylı Bir İnceleme

BU yazıda fotoğraf sıkıştırma tekniklerinin temellerini ve bu tekniklerin nasıl çalıştığını inceleyeceğiz. Öncelikle kayıplı ve kayıpsız sıkıştırma arasındaki farkları, ardından her iki tür sıkıştırmada kullanılan yöntemleri ele alacağız. Ardında da avifenc ve cwebp araçlarının nasıl kullanılacağını, avantajlarını ve en iyi uygulama yöntemlerini inceleyeceğiz. Bu kısım biraz teknik ilerleyecek olup yazının sonraki kısmında ise her zaman olduğu gibi bu sürecin başkaca bir yazılım ile hızlı ve çok teknik detaya girmeden uygulanmasından da bahsedeceğim. Bu kısmı isterseniz atlayıp direkt yandan “Imagemagick Yazılımı” ile ilgili başlığa tıklayabilirsiniz.

Kayıplı ve Kayıpsız Sıkıştırma Arasındaki Fark

Kayıpsız Sıkıştırma

Kayıpsız sıkıştırma, görüntü kalitesini hiç değiştirmeden veri boyutunu azaltmayı amaçlar. Bu yöntemde, orijinal veri sıkıştırıldıktan sonra tam olarak geri dönüştürülebilir. Kayıpsız sıkıştırma özellikle yüksek kaliteden az da olsa ödün vermek istemeyen aynı zamanda da mümkün olan bir miktarda yer kazanmayı isteyen kişiler için uygundur. Ayrıca kayıpsız sıkıştırma genellikle pikseller arası korelasyonun düşük olduğu şekil gibi görüntülerde kullanıma daha müsaittir.

Kayıplı Sıkıştırma

Kayıplı sıkıştırma dosya boyutunu daha fazla küçültmek için bir miktar veri kaybına izin verir. Bu yöntemde sıkıştırma sonrası görüntü orijinaline çok benzerdir fakat birebir aynı değildir. Mesela renk uzayı, bazı renklerin kodlanması ve bir takım detaylarda değişmeler/azalmalar olması muhtemeldir. Kayıplı sıkıştırma genel olarak webde paylaşılacak görüntülerde, sosyal medya ve genel fotoğraf depolama çözümleri için yaygın olarak kullanılır. Kayıplı sıkıştırma ile dosya boyutunu önemli ölçüde düşürme karmaşık ve yüksek korelasyona sahip görüntülerde daha çok kullanılmaktadır.

Kayıpsız Sıkıştırmada Kullanılan Yöntemler

Run-Length Encoding (RLE)

Run-Length Encoding, veri dizilerinde tekrarlanan öğeleri sıkıştırmak için kullanılır. Örneğin, bir görüntüde ardışık olarak gelen aynı renkteki pikseller, tek bir veri değeri ve bu değerin tekrar sayısı ile temsil edilir. Bu yöntem, uzun tekrarlanan piksellerin olduğu görüntülerde oldukça etkilidir. Sıralı renk tekrarlarının olduğu homojen renk dağılımlı görüntülerde RLE algoritması başarılı bir sıkıştırma yapabilmektedir. Diğer taraftan tekrarların az olduğu veya renklerin homojen bir dağılım göstermediği görüntülerde algoritmanın başarısı düşük kalabilmektedir. Örneğin aynı meyve/sebzelerden oluşan bir tabağın çekilen fotoğrafı bu yöntem için oldukça uygun bir seçimdir.

Huffman Coding

Zamanında MIT’de öğrenci olan David Huffman tarafından hocasının verdiği bir ödev üzerine geliştirilmiştir. Yaygın olarak kullanılan sıkıştırma yöntemlerinde son işlem olarak kullanılır ve muhtemelen sıkıştırma algoritmalarında en yaygın olarak kullanılan bileşendir. Huffman kodlamanın temel amacı, verideki frekanslarına göre veri parçalarının her birine değişken uzunluklarda kodlar atayarak verinin toplam kod uzunluğunu en aza indirmektir. Yüksek frekanslı parçalara daha kısa kodlar, düşük frekanslı parçalara ise nispeten daha uzun kodlar atanarak dosya boyutu düşürülmüş olur. Örneğin 0001 olarak kodlanan bir parçanın karşımıza çıkma olasılığı (mesela) 00000001 olarak kodlanmış bir parçadan daha yüksektir. Buna göre ilk parçaya daha kısa bir kod atanırken diğer parçaya daha uzun bir kod atanacaktır.

LZW (Lempel-Ziv-Welch)

LZW, veri dizilerindeki tekrarları tespit eder ve bu tekrarları sıkıştırılmış bir kod olarak saklar. Daha kısa kod yerine geçtiği dizeden daha az yer kaplar ve daha küçük bir dosya elde edilir. Girdi verilerinde uzun veya tekrarlayan kelimelerin sayısı arttıkça algoritmanın verimliliği de artar. Grafik dosya formatları (GIF) ve çeşitli arşiv formatları (ZIP) gibi birçok uygulamada kullanılır. Bunu LZ77/78 olarak biliyor veya duymuş da olabilirsiniz. Daha önce 7zip kullanmış iseniz bununla karşılaşmış olmanız pek muhtemel.

Flate/Deflate

Flate/Deflate Phil Katz tarafından 90’lı yılların ortalarında geliştirilmiş kayıpsız veri sıkıştırma formatıdır. Huffman Kodlaması ve LZ77 algoritmasının bir bileşimidir. PNG kayıpsız görüntü sıkıştırma standardı Deflate algoritmasını kullanmaktadır. Sıkıştırılacak olan veri birbirini takip eden bloklar kümesi olarak düşünülür. Her blok LZ77 algoritması ve Huffman kodlamasının birlikte kullanılması ile sıkıştırılır. Her blok için oluşturulan Huffman ağacı bir önceki ve bir sonraki bloktan bağımsızdır. Sıkıştırılabilen blokların büyüklüğü değişkendir. Deflate algoritması Huffman ağacının etkili kodlama yapamayacak kadar büyüdüğünü gördüğünde, yeni bir Huffman ağacı oluşturmak için o bloğu sonlandırarak yeni bir blok başlatır. Böylece daha verimli bir sıkıştırma yapmayı amaçlar.

Color Quantization (Kısmen)

Renk sayısının veya derinliğinin azaltılmasıyla ya da renk uzayında yapılan değişikliklerle sıkıştırma sağlanır. Örneğin, bir görüntüde kullanılan renk sayısını 256 ile sınırlayarak dosya boyutu düşürülebilir. Bu teknik, genellikle GIF formatında kullanılır. Kayıpsız sıkıştırma yöntemlerinin sonuna bunu da eklememin sebebi kısmi bir bakış açısına göre kayıpsız sayılabileceği yönünde. Burada K-Means denilen bir terim devreye giriyor ve düzgün uyarlandığında tek başına dosya boyutunu 100’de 1 oranına kadar (aşırı ve bence gerçek dışı bir oran) düşürebildiğinden bahsediliyor.

Kayıplı Sıkıştırmada Kullanılan Yöntemler

Transform Kodlama (DCT)

Transform kodlama, görüntü verilerini frekans bileşenlerine dönüştürerek sıkıştırma sağlar. JPEG sıkıştırmasında yaygın olarak kullanılan Discrete Cosine Transform (DCT) buna bir örnektir.Sıkıştırma aşamalarında ilk olarak görsele RGB-YUV renk uzayı dönüşümü uygulanır. Sonrasında görsel 8×8 bloklara ayrılır ve her bloğa DCT uygulanır. DCT uygulanmış blok, 1-100 arasında, 1 en düşük kalite ve 100 en yüksek kalite olmak üzere kullanıcı tarafından seçilebilen bir kalite parametresine karşılık gelen kuantizasyon matrisi kullanılarak kuantalanır.

Bununla ilgili Computerphile videosu: https://www.youtube.com/watch?v=Q2aEzeMDHMA

Chroma Subsampling

Chroma subsampling, insan gözünün renk değişikliklerine duyarlılığının düşük olmasını kullanarak renk bilgilerini azaltır. YCbCr renk modelinde renk bileşenlerinin (Chroma) yatay ve/veya dikey çözünürlüğünü düşürerek sıkıştırma yapar. İlerleyen adımlarda size göstereceğim örnek görsellerden .yuv uzantılı olan 4:2:0 olarak sample edilmişken .y4m ve .ycbcr 4:4:4 olarak kabul edilebilir. Bu da herhangi başka bir işlem yapmandan 4:4:4 –> 4:2:0 veya 4:1:1 dönüşümünde %50 4:4:4: –> 4:2:2 dönüşümünde %33 civarında bir dosya boyut azalması sağlıyor. Bu bildiğimiz anlamda bir sıkıştırma yapmadan elde edilen ve gerçekten çok yüksek bir oran olan bir kazanç.

Fraktal Sıkıştırma

Fraktal sıkıştırma, görüntüdeki tekrarlayan desenleri matematiksel fraktal algoritmalarla sıkıştırır. Fraktal sıkıştırmanın tekrarlanan fonksiyonlar ile gerçeklenebileceği fikri ilk defa Michael Barnsley ve Alan Sloan tarafından ortaya atılmıştır. Fraktal tekniğinin en önemli avantajı, açma işleminin basit ve hızlı olmasıdır. Fakat sıkıştırma işlemi, açmanın tam tersine çok karmaşıktır. Bir resimdeki tekrar eden fraktalları bulmak milyonlarca, milyarlarca karşılaştırma işleminin yapılmasını gerektirebilir. Sıkıştırma işleminin çok zaman alması nedeniyle fraktal tekniği henüz yeterince yaygınlaşamamıştır. Bu yöntem, yüksek sıkıştırma oranları sağlar ancak bahsedildiği gibi hesaplama süreci genellikle daha uzundur.

Kayıpsız (veya kısmen kayıpsız) Görüntü Çözümleri

YCBCR

YCBCR, bir renk kodlama şemasıdır ve tek başına bir görüntü formatı değildir. Genellikle dijital video ve fotoğrafçılıkta kullanılır. Kayıpsız veya kayıplı sıkıştırma ile kullanılabilir. JPEG gibi kayıplı formatlarda da (çok mantıklı olmasa da) YCBCR renk alanını kullanabilir.

YUV

YUV (ycbcr de olduğu gibi) bir renk alanı ve aynı zamanda video verilerini saklamak için kullanılan bir format olabilir. Veriler sıkıştırılmamış veya kayıplı/kayıpsız sıkıştırma ile saklanabilir. YUV dosyalarının kayıpsız olup olmadığı kullanılan sıkıştırma yöntemine bağlıdır. Bugün biz sıkıştırılmamış olan halinden faydalanacağız.

Y4M

Y4M, YUV4MPEG2 video formatının bir dosya uzantısıdır. Bu format sıkıştırılmamış YUV video verilerini içerir ve bundan dolayı kayıpsızdır. Y4M genellikle video/fotoğraf işleme ve düzenleme yazılımlarında ara format olarak kullanılır. Biz de bugün bu amaçla kullanacağız.

PPM

PPM sıkıştırılmamış (dolayısıyla kayıpsız) bir görüntü formatıdır. PPM’de her pikselin kırmızı, yeşil ve mavi (RGB) bileşenlerini ASCII veya ikili formda saklanır. Kanaviçe yapar gibi düşünebilirsiniz. Sıkıştırılmamış olduğu için dosya boyutları oldukça büyük olabilir. Konumuzda kullanılacak ana giriş formatı bu olacaktır. Diğer üç format ise ara format veya kontrol formatı olarak kullanılacaktır.

Kayıplı Sıkıştırma Kullanan Görüntü Formatları

WebP

Google tarafından geliştirilen WebP, hem kayıplı hem de kayıpsız sıkıştırma destekleyen modern bir görüntü formatıdır. JPEG’e kıyasla daha yüksek sıkıştırma oranları ve daha düşük dosya boyutları sunar. Modern tarayıcıların büyük kısmı tarafından hali hazırda kullanılan ve ek bir bileşene gerek bırakmayan bir formattır.

HEIC (High Efficiency Image Coding)

HEIC/HEIF özellikle Apple cihazlarda yaygın olarak kullanılan bir görüntü formatıdır. Yüksek verimlilikte sıkıştırma sağlamak için HEVC (High Efficiency Video Coding) teknolojisini kullanır. Fakat Apple burada farklı bir bakış açısı ile şöyle bir amaç gütmüştür. Normalde (örneğin) 5 MB olacak görüntü dosya boyutunu 1 MB’a indirmek yerine görüntü dosya boyutunu gene 5 MB olarak hedefleyip içine sıkıştırılmadan önceki hali 25 MB olan bir görüntü sıkıştırmayı hedeflemişlerdir. Dolayısıyla siz dosya boyutu açısından net bir fark göremesenizde sanki fotoğraflarınız daha kaliteli çıkıyormuş izlenimine kapılıyorsunuz. Bu nedenle bu formatı rehberin ilerleyen kısımlarında kullanmayacağız.

AVIF (AV1 Image File Format)

AVIF AV1 video codec’inin (önceki rehberimizde bajsettiğimiz) sıkıştırma tekniklerini kullanan modern bir görüntü formatıdır. Hem kayıplı hem de kayıpsız sıkıştırma seçenekleri sunar ve yüksek sıkıştırma oranları ile dikkat çeker. Modern tarayıcılar tarafından destekleniyor olsa da işletim sistemi ve dağıtıma göre bazen bir paket/eklenti yüklemek gerekebiliyor. Örneğin Windows’da Store üzerinden bir eklenti yüklenmesinden sonra bu formatla üretilmiş görüntüleri açabiliyorsunuz.

Sıkıştırma Tekniklerinin Kullanımı

Testlerde Kullanılacak Görüntüler

Testlerde kullanılacak görüntüler için https://imagecompression.info/ adlı websitesini tercih ettim. Kalite farkının ve dosya boyutundaki olabilecek maksimum durumun net belirli olması açısından çok yüksek kaliteli ve hiç sıkıştırılmamış görüntüler seçtim. Kullandığım görüntü grubu RGB-8Bit olarak belirtilmiş 14 adet renkli görüntüden ibaret. Bu görüntüler ayrıca aklımdaki çeşitli test koşullarının hepsine de uygun olduğu için ayrıca kendim görüntü üretmek zorunda kalmadım. Bu görseller websayfasında da belirtildiği üzere herhangi bir engelleyici telif hakkı kısıtlaması olmaksızın kullanılabilir.

These Images are available without any prohibitive copyright restrictions. These images are (c) there respective owners. You are granted full redistribution and publication rights on these images provided

Görüntülerin bilgileri aşağıdaki gibidir:

NoDosya AdıDosya Boyutu (Uzun)Dosya Boyutu (Kısa)
1artificial.ppm1887438519M
2big_building.ppm117158993112M
3big_tree.ppm8310121780M
4bridge.ppm3339212032M
5cathedral.ppm1804801718M
6deer.ppm3203270631M
7fireworks.ppm2212763322M
8flower_foveon.ppm102876659.9M
9hdr.ppm1887438519M
10leaves_iso_1600.ppm1804801718M
11leaves_iso_200.ppm1804801718M
12nightshot_iso_100.ppm2212763322M
13nightshot_iso_1600.ppm2212763322M
14spider_web.ppm3636328135M
\\//
Toplam470611702471M

WebP Formatı (cwebp aracı)

Bu formatta bir görüntü üretmek için önce gerekli olan cwebp aracını kurmamız gerekiyor. Kullandığınız dağıtıma göre değişmekle beraber Ubuntu/Fedora/Arch gibi ana dağıtımların repolarında direkt mevcut olup Windows kullanıcıları ise ilgili websitesinden indirebileceklerdir.

Kurulum adımları

  1. Ubuntu
sudo apt-get install libwebp
  1. Fedora
sudo dnf install libwebp-tools
  1. Arch
sudo pacman -S libwebp

Kullanılacak parametreler

Cwebp aracının manual sayfasına baktığınızda çok fazla bir parametresi olmadığını göreceksiniz. Standart kullanım girdisi şu şekildedir:

cwebp input_file -o output_file.webp [options]

Bu hem son kullanıcı açısından oluşacak kafa karışıklığını ortadan kaldırıyor hem de araç ne vaadediyorsa sadece onu yapıyor. Bizim için gerekli olabilecek parametreler ise aşağıdaki gibidir:

-q sayı: Çıktı olarak verilecek görüntünün kalite değerini ayarlamanızı sağlıyor. Değer olarak float girişi yapabilirsiniz fakat o kadar virgüllü sayılarla uğraşmaya değeceğini zannetmiyorum. Default olarak gelen değer değiştirmezseniz 75. Yani normal görüntüdeki detayların %75’i korunuyor.

-pass sayı: Görüntünün yeniden oluşturulması sırasında yapılacak olan geçiş sayısını belirtiyor. Değer 0 ile 10 arasında bir tam sayı olarak belirtilmeli. Default değer 6. Dosya boyutuna ve kaliteye bir miktar etki ediyor. Değer ne kadar yüksek ise o kadar küçük dosya boyutunda o kadar yüksek kalite elde edilecektir. Sonuç olarak da maalesef dosya başına ayrılan işleme zamanı artacaktır.

-metadata metin: (isteğe bağlı) Forumda sorulduğu için ekstra yer veriyorum. Metadata verilerinin ne kadarının tutulup tutulmayacağı konusunda karar vermenize yarayan parametre. Mümkün olan değerler all, none, exif, icc, xmp. Default değer ise none. Yani özellikle gerekmediği sürece değiştirmenizi önermemem.

Sonuç olarak benim kullandığım komut mevcut parametreler dahil olmak üzere:

cwebp input_file -o output_file.webp -q 75 -pass 10

Avif (avifenc aracı)

Bu formatta bir görüntü üretmek için de bir önceki formatımızda olduğu gibi bir araç gerektiriyor. Gerekli olan aracımızın adı avifenc. Gene kullandığınız dağıtıma göre değişmekle beraber Ubuntu/Fedora/Arch gibi ana dağıtımların repolarında direkt mevcut. Windows kullanıcıları bu sefer projenin Github sayfasından son sunulmuş release’i indirmesi gerekecektir.

Kurulum adımları

  1. Ubuntu
sudo apt-get install libavif-bin
  1. Fedora
sudo dnf install libavif-tools
  1. Arch
sudo pacman -S libavif

Kullanılacak parametreler

Avifenc aracının manual sayfası önceki araca göre biraz daha uzun ve bence kafa karıştırabilecek olmasına rağmen ihtiyacımız olacak parametreler gene çok fazla değil. Örneğin standart kullanımı gene benzer şekilde:

avifenc input_file output.avif [options]

Bu bize her iki araç açısından bir benzerlik sunup nispeten işimizi kolaylaştırıyor. Bu sefer ihtiyacımız olabilecek parametreler ise aşağıdaki gibi:

--min sayı: Renk için minimum quantizer değerini (niceleyiciyi) belirlememize yarayan değer. Sayı büyüdükçe kalite azalmakta dosya boyutu ise küçülmektedir. Kabul edilen değer aralığı 0 ile 63 arasıdır. 0 girilmesi durumunda kayıpsız çeviri yapılmaya çalışılır. Default değer 10’dur.

--max sayı: Renk için minimum quantizer değerini (niceleyiciyi) belirlememize yarayan değer. Sayı büyüdükçe diğer parametre ile aynı etkiyi yapar. Kabul edilen değer aralığı yine 0 ile 63 arasıdır. 0 girilmesi durumunda kayıpsız çeviri yapılmaya çalışılır. Default değer 40’dur.

Bir önceki aracımızın aksine avifenc tekil bir kalite değeri yerine bir kalite aralığını girdi olarak kabul ediyor. Bu şekilde de bazı yerlerde daha fazla sıkıştırma yaparken diğer yerlerde durumun özelliğine göre daha az sıkıştırma yaparak optimal dosya boyutu/kalite oranına ulaşmayı hedefler. Yaptığım testlere göre ama (net bilgi olmamakla birlikte) yaklaşık %60-65 civarına tekabül edecek bir kaliteden bahsedebiliriz.

--speed sayı: Dosya değerlendirilirken kodlayıcının ne kadar hızlı hareket etmesi gerektiğini belirten değer. Ne kadar yavaş hareket ederse o kadar kaliteli yeniden kodlama ve düşük dosya boyutuna ulaşabilecekken tam tersi şekilde daha uzun bir süre (gerçekten uzun oluyor bazen) sonucunu doğuracaktır. Kabul edilen değer aralığı 0 ile 10 arasındadır. 0 en yavaş 10 en hızlıdır. Default değer 6’dır.

--jobs sayı: Bu görev için oluşturulacak iş sayısını veya kullanılacak core/thread sayısını belirten değer. Linux kullanıcıları bu parametre ile aşinadır diye düşünüyorum. Girilebilecek değer aralığı CPU’nuza göre değişecek olup minimum değer 1 olup maksimum ve aynı zamanda da Default değer de all dır

Sonuç olarak benim kullandığım komut mevcut parametreler dahil olmak üzere:

avifenc input_file output.avif --jobs all --speed 0 --min 10 --max 40

Çeviri Sonuçları

Çeviri sırasında girdi olarak .ppm uzantılı ana test dosyalarımızın aynı zamanda .ycbcr, .y4m, .tiff, .yuv ve .png uzantılı kopyaları üretilmiştir. Bu kopyalar hem farklı formatlardan çeviri kalitesinin test edilmesi hem de ara formatların kullanılmasını gerektiren durumlar için hazırlanmıştır. Dosyaların hepsini websitesinde yer kaplamaması adına bir Github Reposu’na yükledim. ORadan direkt ulaşabilir ve isterseniz indirebilirisiniz.

Avif açısından farklı --speed değerlerinin etkisinin de anlaşılması için 0, 6 ve 10 değerleri için ayrı ayrı çeviriler yapılmıştır.

Webp açısından ise speed parametresi olmadığı ve pass parametresi hızı çok etkilemediği için tüm çevirilerde pass değeri 10 olarak alınmıştır.

Aşağıda her bir örnek fotoğraf açısından çeviri sonuçlarını bulabilirsiniz. Çok yer kaplaması için ilk fotoğraftan sonrasını görmek için genişlet butonuna tıklamanız gerekmektedir.

Dosya AdıDosya Boyutu (Uzun)Dosya Boyutu (Kısa)Oran %
artificial.ppm1887438519MDosya aslı
artificial.ycbcr1887436819M100,00
artificial.y4m1887444619M100,00
artificial.tiff1887478419M100,00
artificial.yuv1258291212M66,67
artificial.png16565081.6M8,78
artificial_speed0.avif149028146K0,79
artificial_speed10.avif299051293K1,58
artificial_speed6.avif168926165K0,90
artificial.webp229228224K1,21
Dosya AdıDosya Boyutu (Uzun)Dosya Boyutu (Kısa)Oran %
big_building.ppm117158993112MDosya aslı
big_building.ycbcr117158976112M100,00
big_building.y4m117159054112M100,00
big_building.tiff117160144112M100,00
big_building.yuv7810598475M66,67
big_building.png6215028460M53,05
big_building_speed0.avif30141562.9M2,57
big_building_speed10.avif29592552.9M2,53
big_building_speed6.avif29432522.9M2,51
big_building.webp34142403.3M2,91
Dosya AdıDosya Boyutu (Uzun)Dosya Boyutu (Kısa)Oran %
big_tree.ppm8310121780MDosya aslı
big_tree.ycbcr8310120080M100,00
big_tree.y4m8310127880M100,00
big_tree.tiff8310222480M100,00
big_tree.yuv5540080053M66,67
big_tree.png4810089546M57,88
big_tree_speed0.avif32533033.2M3,91
big_tree_speed10.avif29828562.9M3,59
big_tree_speed6.avif30338402.9M3,65
big_tree.webp21678502.1M2,61
Dosya AdıDosya Boyutu (Uzun)Dosya Boyutu (Kısa)Oran %
bridge.ppm3339212032MDosya aslı
bridge.ycbcr3339210332M100,00
bridge.y4m3339218132M100,00
bridge.tiff3339262432M100,00
bridge.yuv2226950022M66,69
bridge.png1974709319M59,14
bridge_speed0.avif14118381.4M4,23
bridge_speed10.avif12626821.3M3,78
bridge_speed6.avif13238021.3M3,96
bridge.webp10838641.1M3,25
Dosya AdıDosya Boyutu (Uzun)Dosya Boyutu (Kısa)Oran %
cathedral.ppm1804801718MDosya aslı
cathedral.ycbcr1804800018M100,00
cathedral.y4m1804807818M100,00
cathedral.tiff1804841618M100,00
cathedral.yuv1203200012M66,67
cathedral.png93527509.0M51,82
cathedral_speed0.avif374017366K2,07
cathedral_speed10.avif349586342K1,94
cathedral_speed6.avif345661338K1,92
cathedral.webp361172353K2,00
Dosya AdıDosya Boyutu (Uzun)Dosya Boyutu (Kısa)Oran %
deer.ppm3203270631MDosya aslı
deer.ycbcr3203268931M100,00
deer.y4m3203276731M100,00
deer.tiff3203322631M100,00
deer.yuv2136040821M66,68
deer.png2119649421M66,17
deer_speed0.avif17300161.7M5,40
deer_speed10.avif17132791.7M5,35
deer_speed6.avif16603261.6M5,18
deer.webp994750972K3,11
Dosya AdıDosya Boyutu (Uzun)Dosya Boyutu (Kısa)Oran %
fireworks.ppm2212763322MDosya aslı
fireworks.ycbcr2212761622M100,00
fireworks.y4m2212769422M100,00
fireworks.tiff2212804822M100,00
fireworks.yuv1475174415M66,67
fireworks.png56428815.4M25,50
fireworks_speed0.avif149166146K0,67
fireworks_speed10.avif187413184K0,85
fireworks_speed6.avif154956152K0,70
fireworks.webp183674180K0,83
Dosya AdıDosya Boyutu (Uzun)Dosya Boyutu (Kısa)Oran %
flower_foveon.ppm102876659.9MDosya aslı
flower_foveon.ycbcr102876489.9M100,00
flower_foveon.y4m102877269.9M100,00
flower_foveon.tiff102880009.9M100,00
flower_foveon.yuv68584326.6M66,67
flower_foveon.png31319703.0M30,44
flower_foveon_speed0.avif5497254K0,53
flower_foveon_speed10.avif6814667K0,66
flower_foveon_speed6.avif5868458K0,57
flower_foveon.webp7038269K0,68
Dosya AdıDosya Boyutu (Uzun)Dosya Boyutu (Kısa)Oran %
hdr.ppm1887438519MDosya aslı
hdr.ycbcr1887436819M100,00
hdr.y4m1887444619M100,00
hdr.tiff1887478419M100,00
hdr.yuv1258291212M66,67
hdr.png69747646.7M36,95
hdr_speed0.avif114743113K0,61
hdr_speed10.avif132916130K0,70
hdr_speed6.avif117136115K0,62
hdr.webp143366141K0,76
Dosya AdıDosya Boyutu (Uzun)Dosya Boyutu (Kısa)Oran %
leaves_iso_1600.ppm1804801718MDosya aslı
leaves_iso_1600.ycbcr1804800018M100,00
leaves_iso_1600.y4m1804807818M100,00
leaves_iso_1600.tiff1804840818M100,00
leaves_iso_1600.yuv1203200012M66,67
leaves_iso_1600.png1132791511M62,77
leaves_iso_1600_speed0.avif11082711.1M6,14
leaves_iso_1600_speed10.avif964810943K5,35
leaves_iso_1600_speed6.avif1013569990K5,62
leaves_iso_1600.webp883776864K4,90
Dosya AdıDosya Boyutu (Uzun)Dosya Boyutu (Kısa)Oran %
leaves_iso_200.ppm1804801718MDosya aslı
leaves_iso_200.ycbcr1804800018M100,00
leaves_iso_200.y4m1804807818M100,00
leaves_iso_200.tiff1804840818M100,00
leaves_iso_200.yuv1203200012M66,67
leaves_iso_200.png101105299.7M56,02
leaves_iso_200_speed0.avif780224762K4,32
leaves_iso_200_speed10.avif757813741K4,20
leaves_iso_200_speed6.avif762472745K4,22
leaves_iso_200.webp720154704K3,99
Dosya AdıDosya Boyutu (Uzun)Dosya Boyutu (Kısa)Oran %
nightshot_iso_100.ppm2212763322MDosya aslı
nightshot_iso_100.ycbcr2212761622M100,00
nightshot_iso_100.y4m2212769422M100,00
nightshot_iso_100.tiff2212804822M100,00
nightshot_iso_100.yuv1475174415M66,67
nightshot_iso_100.png76359537.3M34,51
nightshot_iso_100_speed0.avif157003154K0,71
nightshot_iso_100_speed10.avif213297209K0,96
nightshot_iso_100_speed6.avif161694158K0,73
nightshot_iso_100.webp223064218K1,01
Dosya AdıDosya Boyutu (Uzun)Dosya Boyutu (Kısa)Oran %
nightshot_iso_1600.ppm2212763322MDosya aslı
nightshot_iso_1600.ycbcr2212761622M100,00
nightshot_iso_1600.y4m2212769422M100,00
nightshot_iso_1600.tiff2212804822M100,00
nightshot_iso_1600.yuv1475174415M66,67
nightshot_iso_1600.png1252034512M56,58
nightshot_iso_1600_speed0.avif789712772K3,57
nightshot_iso_1600_speed10.avif686661671K3,10
nightshot_iso_1600_speed6.avif703014687K3,18
nightshot_iso_1600.webp576746564K2,61
Dosya AdıDosya Boyutu (Uzun)Dosya Boyutu (Kısa)Oran %
spider_web.ppm3636328135MDosya aslı
spider_web.ycbcr3636326435M100,00
spider_web.y4m3636334235M100,00
spider_web.tiff3636381635M100,00
spider_web.yuv2424217624M66,67
spider_web.png102723099.8M28,25
spider_web_speed0.avif106255104K0,29
spider_web_speed10.avif126188124K0,35
spider_web_speed6.avif113351111K0,31
spider_web.webp165030162K0,45

Sonuçlara bakıldığında dosya boyutunu (en büyük dosyaya göre) %1-5’ine kadar azaltabildiğini görüyoruz. Fakat gerçek dünyada bu tip RAW dosya formatları veya hiç sıkıştırılmamış dosyalar kullanmaıdğımız için bu derece bir boyut azalmasını görmeniz zor. Fakat png veya jpg uzantıları açısından değerlendirirsek dosya boyutunı %10-33 aralığına kadar düşürebildiğini çok rahat söyleyebiliriz. Gerçek dünya testlerinde de bu sonuçları görmeniz çok muhtemel.

Otomatikleştirilmiş Hali: Imagemagick

1
2

Imagemagick ImageMagick Studio LLC tarafından geliştirilen ve açık kaynaklı bir yazılımdır. Yazılımın lisansı mevcut olarak Github’da kullanılan o veya şu lisans diye net olarak söyleyemiyorum. Bir kısım yerlerde Apache 2.0 Lisansına çok yakın olduğunu söylemiş olsalar da tam bilgi için LICENSE dosyasına göz atmanızı öneririm.

Yazılımın odaklandığı ve çözmek istediği sorun fotoğraf ve benzeri dağıtım formatlarını dönüştürürken ve yukarıda bahsettiğim gibi yazılımları kullanmadan, teknik bilgilerle çok boğuşmadan ve istediğimiz sonuca bizi ulaştıracak bir program üretmek. Yazılımı herhangi bir linux dağıtımında indirmek istediğiniz zaman bağımlılık olarak birçok görüntü formatı/kütüphanesi birlikte iniyor ve sizi ek yazılımları tespit edip indirme gerekliliğinden kurtarıyor. Yazılım rehberin paylaşıldığı tarih itibariyle çalışma mantığı tüm araçlar açısından tekil bir parametre sistemi getirme ve gerekirse sizin verdiğiniz parametreyi gerekli aracın anlayacağı şekle dönüştürmek. Örneğin bir araç kalite için -q diğeri --quality diğeri -Q kullanıyor dahi olsa program bunları ezberlemenizi gerektirmiyor. Siz hangi formattan hangi formata dönüştürecek olursanız olun -quality değer parametresi ile bu sonuca ulaşabiliyorsunuz. İlk ve en önemli özelliği bu.

Bu yazılımı bulmadan önce kendim tüm bu araçlar açısından gerekli kütüphaneleri elle yüklüyor, hangi araç hangi formatları kabul ediyor bunu takip ediyor ve gerekirse ara formatlar üretiyordum. Mesela avif ppm den dönüşüme izin vermezken y4m den izin veriyor. Tam tersine cwebp ppm den dönüşüme izin verirken mesela ycbcr den dönüşüme izin vermiyor gibi. Fakat imagemagick aracını kullanırken bunları düşünmenize gerek yok. Çünkü o sizin için ara formatları kayıpszı bir şekilde oluşturup dosyanızı hedef formata dönüştürüyor ve gereksiz geçici dosyaları siliyor. Tüm bu anlattıklarım ise birkaç saniye içinde oluyor. Bu da sizin işinizi kolaylaştıracak ikinci güzel özelliği.

Bahsetmeyi değer bulduğum üçüncü özelliği ise toplu dosya çevirme veya başka tabirle batch convert. Bahsettiğim diğer araçların ve bahsi geçmeyen birçok aracın en büyük eksikliği toplu olarak dosya seçmenize izin vermemesi. Hepsi kendi için tek tek dosya çevirme üzerine odaklanmışlardır. Aşağıdakine benzer bir komut ile toplu çeviri yapmaları mümkün olmasına rağmen bu hem son kullanıcı açısından anlaması pek kolay olmadığı gibi her zaman için de uygulanması mümkün olmamaktadır.

Örnek komut (jpg –> webp): find ./ -type f -name '*.jpg' -exec sh -c 'cwebp $1 -o "${1%.jpg}.webp" [options]' _ {} \;

Fakat imagemagick aracımızda ise bu süreç çok daha kolay. Örnek komut (jpg –> webp): magick mogrify -format webp -quality 90 *.jpg ne kadar anlaşılır ve kolay değil mi gerçekten. Giriş verisi olarak birden fazla dosya seçilebildiği gibi çıkış formatı olarak da birden fazla dosya formatı seçilebilir. Örneğin bir klasördeki tüm JPG/PNG uzantılı fotoğraflarınızı webp ve avif uzantısına tek komut ile çevirebiliyorsunuz. Bu gerçekten süper bir imkan.

Yazılımın indirilmesi ve/veya kurulması

Yazılım Linux, Mac, iOS ve Windows’u desteklemektedir. Windows için exe uzantılı dosyayı indirip kullanabilirsiniz.

Arch kullanıyorsanız:

sudo pacman -S imagemagick

Ubuntu kullanıyorsanız:

sudo apt-get install imagemagick

Fedora kullanıyorsanız:

sudo dnf install ImageMagick

Diğer linux dağıtımı kullanıcıları ise binary dosyası olarak indirebilir veya kendisi derleyebilir. Yükleme ile ilgili talimatlara Web sayfasından ulaşabilirsiniz.

Yazılımın ayarları

Yazılımı kurduktan sonra man magick komutu ile yardım kısmına veya ayrıntılı bilgiye ulaşabilirsiniz. Sizi yaklaşık olarak (bir kısmını kırptım) şöyle bir ekran karşılayacaktır:

magick(1)
General Commands Manual
magick(1)

NAME
       magick - convert between image formats as well as resize an image, blur, crop, despeckle, dither, draw on, flip, join, re-sample, and much more.

SYNOPSIS
       magick [input-options] input-file [output-options] output-file
....

DESCRIPTION
....

         -define format:option
....
         -preview type        image preview type
         -quality value       JPEG/MIFF/PNG compression level
....
         -quiet               suppress all warning messages
         -verbose             print detailed information about the image
         -auto-orient         automatically orient image
         -strip               strip image of all profiles and comments
....
       Miscellaneous Options:
         -debug events        display copious debugging information
         -help                print program options
         -log format          format of debugging information
         -list type           print a list of supported option arguments
         -version             print version information

       Use any setting or operator as an output-option.  Only a limited number of setting are  input-option. They include: -antialias, -caption, -density, -define, -encoding, -font, -pointsize, -size, and -texture as well as any of the
       miscellaneous options.

       By  default,  the image format of ‘file' is determined by its magic number.  To specify a particular image format, precede the filename with an image format name and a colon (i.e. ps:image) or specify the image type as the file‐
       name suffix (i.e. image.ps).  Specify 'file' as '-' for standard input or output.

SEE ALSO
       ImageMagick(1)

COPYRIGHT
       Copyright (C) 1999 ImageMagick Studio LLC. Additional copyrights and licenses apply to this software, see file:///usr/share/doc/ImageMagick-7/www/license.html or https://imagemagick.org/script/license.php                                                                             

Tekil dosya çevirme

En basit kullanım senaryosunda tek dosya çevirmek isterseniz aşağıdaki gibi kullanabilirsiniz.

JPG/JPEG’den WebP’ye dönüştürme

magick input.jpg -quality 75 output.webp

JPG/JPEG’den Avif’e dönüştürme

magick input.jpg -quality 75 output.avif

Gördüğünüz üzere komut çok az değişti. Quality değerini örnek olarak o şekilde belirledim. Siz birkaç fotoğraf üzerinden deneme yapıp sizin için en uygun değeri rahatlıkla bulabilirsiniz. Peki ben nasıl kullanıyorum veya hangi parametreleri kullanıyorum diye soracak olursanız eğer:

WebP için:

magick input.jpg -define webp:pass=10 -quality 75 output.webp

Avif için:

magick input.jpg -define avif:speed=0 -quality 75 output.avif

Buradaki -define format:parametre girdisi ilgili araç için ek bir özel parametre girmek istiyorsanız kullanılıyor. Bu iki araç açısından gerekli parametreleri daha iyi bildiğim için halen eski düzen böyle devam ediyorum.

Çoklu dosya çevirme

Çoklu dosya çevirmek istediğiniz senaryoda gerekli en basit komutlar aşağıdaki gibidir:

JPG/JPEG’den WebP’ye dönüştürme

magick mogrify -format webp -quality 75 *.jpg

JPG/JPEG’den Avif’e dönüştürme

magick mogrify -format avif -quality 75 *.jpg

Komut gene çok az değişti ve okunabilirlik açısından da halen çok iyi bir durumda. Benim kullandığım tam komut ne diye soracak olursanız gene aynı parametreleri eklemiş olacağım ve şöyle görünecek:

WebP için:

magick mogrify -format webp -define webp:pass=10 -quality 75 *.jpg

Avif için:

magick mogrify -format avif -define avif:speed=0 -quality 75 *.jpg

Gerçek dünya testleri

Imagemagick aracı kağıt üstünde diğer araçların yaptığı şeyin aynısını yapıyor görünüyor. Fakat akıldaki hesap her zaman gerçekle uyuşmadığı için ve bunca yazının da gerçekten işe yarayıp yaramadığından emin olmak için test etmek iyi olacaktır. Bu nedenle bir haftasonu gezisi sırasında çekmiş olduğum boyutları 1.6M ile 4.4M arasında değişen 8-Bit/RGB/JPG/4096x2304 özelliklerine sahip 36 adet fotoğrafı bu araç ile sıkıştıracağım.

Dosya AdıDosya Boyutu (Uzun)Dosya Boyutu (Kısa)Oran %
IMG-1.jpg31235353.0MDosya Aslı
IMG-1.avif15040641.5M48,15
IMG-1.webp10769581.1M34,48
IMG-2.jpg27906042.7MDosya Aslı
IMG-2.avif550187538K19,72
IMG-2.webp391096382K14,01
IMG-3.jpg31504473.1MDosya Aslı
IMG-3.avif766041749K24,32
IMG-3.webp546460534K17,35
IMG-4.jpg45264814.4MDosya Aslı
IMG-4.avif17435511.7M38,52
IMG-4.webp12181401.2M26,91
Dosya AdıDosya Boyutu (Uzun)Dosya Boyutu (Kısa)Oran %
IMG-5.jpg42290664.1MDosya Aslı
IMG-5.avif15190811.5M35,92
IMG-5.webp10630141.1M25,14
IMG-6.jpg31596893.1MDosya Aslı
IMG-6.avif15007181.5M47,50
IMG-6.webp10772741.1M34,09
IMG-7.jpg31734513.1MDosya Aslı
IMG-7.avif15033581.5M47,37
IMG-7.webp10695661.1M33,70
IMG-8.jpg37576243.6MDosya Aslı
IMG-8.avif19869121.9M52,88
IMG-8.webp14651481.4M38,99
IMG-9.jpg30399282.9MDosya Aslı
IMG-9.avif14240211.4M46,84
IMG-9.webp10283361005K33,83
IMG-10.jpg24410912.4MDosya Aslı
IMG-10.avif902915882K36,99
IMG-10.webp611696598K25,06
IMG-11.jpg25262402.5MDosya Aslı
IMG-11.avif971978950K38,48
IMG-11.webp672250657K26,61
IMG-12.jpg30108682.9MDosya Aslı
IMG-12.avif13633421.4M45,28
IMG-12.webp1003464980K33,33
IMG-13.jpg28941662.8MDosya Aslı
IMG-13.avif12622221.3M43,61
IMG-13.webp903482883K31,22
IMG-14.jpg27942112.7MDosya Aslı
IMG-14.avif11806281.2M42,25
IMG-14.webp845948827K30,28
IMG-15.jpg26987512.6MDosya Aslı
IMG-15.avif16252811.6M60,22
IMG-15.webp11474321.1M42,52
IMG-16.jpg28588642.8MDosya Aslı
IMG-16.avif17789621.7M62,23
IMG-16.webp12692621.3M44,40
IMG-17.jpg26795972.6MDosya Aslı
IMG-17.avif16040761.6M59,86
IMG-17.webp11279141.1M42,09
IMG-18.jpg16643101.6MDosya Aslı
IMG-18.avif305830299K18,38
IMG-18.webp211652207K12,72
IMG-19.jpg30075662.9MDosya Aslı
IMG-19.avif13935001.4M46,33
IMG-19.webp941406920K31,30
IMG-20.jpg20974442.1MDosya Aslı
IMG-20.avif582060569K27,75
IMG-20.webp456522446K21,77
IMG-21.jpg28522712.8MDosya Aslı
IMG-21.avif12755931.3M44,72
IMG-21.webp887504867K31,12
IMG-22.jpg27573592.7MDosya Aslı
IMG-22.avif11818071.2M42,86
IMG-22.webp847800828K30,75
IMG-23.jpg23120962.3MDosya Aslı
IMG-23.avif817076798K35,34
IMG-23.webp579860567K25,08
IMG-24.jpg35507953.4MDosya Aslı
IMG-24.avif18714011.8M52,70
IMG-24.webp14042981.4M39,55
IMG-25.jpg32037333.1MDosya Aslı
IMG-25.avif13816991.4M43,13
IMG-25.webp11849841.2M36,99
IMG-26.jpg31744713.1MDosya Aslı
IMG-26.avif13549471.3M42,68
IMG-26.webp11484381.1M36,18
IMG-27.jpg33412533.2MDosya Aslı
IMG-27.avif15110431.5M45,22
IMG-27.webp12366581.2M37,01
IMG-28.jpg35886283.5MDosya Aslı
IMG-28.avif19165041.9M53,40
IMG-28.webp14548321.4M40,54
IMG-29.jpg23567132.3MDosya Aslı
IMG-29.avif14317771.4M60,75
IMG-29.webp10306101007K43,73
IMG-30.jpg30755933.0MDosya Aslı
IMG-30.avif14875991.5M48,37
IMG-30.webp10694461.1M34,77
IMG-31.jpg26201412.5MDosya Aslı
IMG-31.avif10535611.1M40,21
IMG-31.webp788630771K30,10
IMG-32.jpg27930812.7MDosya Aslı
IMG-32.avif12341831.2M44,19
IMG-32.webp903448883K32,35
IMG-33.jpg26484782.6MDosya Aslı
IMG-33.avif11006541.1M41,56
IMG-33.webp826504808K31,21
IMG-34.jpg31819833.1MDosya Aslı
IMG-34.avif14977551.5M47,07
IMG-34.webp11300161.1M35,51
IMG-35.jpg25801062.5MDosya Aslı
IMG-35.avif10500441.1M40,70
IMG-35.webp790866773K30,65
IMG-36.jpg29222062.8MDosya Aslı
IMG-36.avif13385021.3M45,80
IMG-36.webp980454958K33,55

Sonuç olarak:

  • JPG’de toplam dosya boyutu: 106582840 yani 107M
  • WebP ile toplam dosya boyutu: 34391368 yani 35M (%32,26)
  • Avif ile toplam dosya boyutu: 46972872 yani 47M (%44,07)

Kısa bir değerlendirme ile orijinal araçların yaptığı kadar yüksek verimliliğe ulaşamasa da dikkate ve uygulamaya değer bir kazanım elde edebiliyoruz.

Anlatım dışı bırakılan kısımlar

Bu rehberde elde edilen verim yeterli görüldüğü için Color Space, Chroma Subsampling, Sampling Factor Geometry, Posterize, Iteration, Transparent Color ve Solorize kavramları ile çalışılmamış default olan değerler kullanılmıştır. Bu kavramlara biraz daha aşina olup isteğe göre daha iyi sonuçlar elde etmek mümkün olup tek başına Posterize değerini değiştirerek bile çok güzel sonuçlar elde ettim. Fakat anlatması ve uygun değerin tespit edilmesi çok kolay olmadığı için bu rehber kapsamı dışında bırakılmıştır.

Fotoğraf sıkıştırma ile ilgili forumda açılmış konular

Bu rehberin haricinde spesifik olarak (diğer rehberlerde de olduğu üzere) fotoğraf çevirme konuları ve imagemagick ilgili yaşanan sorunları veya ek rehberleri bu konu açısından fayda göstermesi durumunda atıf yapacağım. Ayrıca benim eklediğim konular dışındaki imagemagick ile ilgili tüm konulara #imagemagick veya #magick etiketine tıklayarak ulaşabilirsiniz.

Son Söz ve Kaynakça

Artık elimdeki bu fotoğrafları ne yapacağım acaba bir hard disk mi alsam gibi soruları kendinize sormanıza gerek kalmadı. Bu rehber sonucunda sizi bir süre daha götürecek kadar yer kazanmış oldunuz. Ayrıca sadece jpg değil kullanamadığınız tüm formatlar özelinde istediğiniz formata kolayca çevirmeyi de öğrenmiş oldunuz. Umarım keyifli bir rehber olmuştur. Rehberin teknik açıklaması veya içeriği ile ilgili bir eksiklik/hata görmeniz durumunda bana bildirebilir veya düzeltilmesi için cevap olarak yazabilirsiniz. Bir sonraki rehbere kadar iyi seyirler ve esenlikler dileğiyle.

Kaynaklar:

  1. https://tez.yok.gov.tr/UlusalTezMerkezi/ Tez No: 183894 (Veri sıkıştırmada yeni yöntemler, ALTAN MESUT, 2006)
  2. https://tez.yok.gov.tr/UlusalTezMerkezi/ Tez No: 565227 (Tekrarlı uzunluk kodlaması (RLE) ve ayrıştırma esaslı görüntü sıkıştırma, MUSTAFA BURAK KALKAN, 2019)
  3. https://pnrsolution.org/Datacenter/Vol3/Issue2/129.pdf (Image Compression Techniques: Lossy and Lossless, ROJATKAR/BORKAR/NAIK/PEDDIWAR, 2015)
  4. https://arxiv.org/pdf/1101.0395 (Improving the Performance of K-Means for Color Quantization, M. Emre CELEBİ, 2011)
  5. https://scikit-learn.org/stable/auto_examples/cluster/plot_color_quantization.html
  6. https://developers.google.com/speed/webp/docs/cwebp
  7. https://github.com/AOMediaCodec/libavif/blob/main/doc/avifenc.1.md
  8. https://imagemagick.org/script/magick.php
  9. https://imagemagick.org/script/convert.php
  10. https://www.youtube.com/watch?v=Q2aEzeMDHMA (JPEG DCT, Discrete Cosine Transform (JPEG Pt2) | Computerphile)
  11. https://www.youtube.com/watch?v=F1kYBnY6mwg (Image compression deep-dive | Chrome for Developers)
  12. https://www.youtube.com/watch?v=_ciMMmxNIGw (Image Compression - EE 274, Data Compression, L15 | Stanford Research Talks)
  13. İlk Yayım: BTT