AVIF (AV1 Image File) adalah format gambar yang relatif baru yang mendukung berbagai fitur seperti transparansi dan HDR. Ini adalah format gambar bebas royalti berdasarkan format video AV1, dan memberikan kompresi lebih tinggi dengan ukuran file lebih rendah.

Format gambar AVIF telah terstandarisasi baru-baru ini, dan browser seperti Chrome 85+ dan Firefox 86+ sudah mendukung gambar AVIF secara default.

Ekstensi GDLib di PHP 8.1 dan yang lebih baru mendukung format gambar AVIF, sehingga memungkinkan untuk mengonversi gambar dari dan ke AVIF.

Namun perlu diperhatikan bahwa ekstensi GD harus dikompilasi dengan dukungan AVIF.

Dan dukungan itu tergantung pada paket libavif, yang kemungkinan nggak tersedia di repositori default versi sistem operasi yang lawas (kayak CentOS 7).

Bagi yang memiliki server dengan sistem operasi yang sudah mendukung paket libavif bisa mengikuti cara berikut untuk aktifin avif di GDnya. Bagi yang belum, mungkin kamu mau pertimbangkan untuk upgrade sistem operasinya jika memungkinkan.

Compile GDLib dengan Dukungan AVIF

Ekstensi GD bergantung pada paket libavif untuk menyediakan codec AVIF yang menjadi dasarnya. Ekstensi GD membutuhkan libavif versi 0.8.2 atau lebih tinggi.

1. Install Libavif

untuk Ubuntu/Debian:

apt install libavif-dev

untuk RHEL/Fedora:

dnf install libavif-devel

2. Build PHP

Setelah dependensinya terisntall, kita bisa lanjut untuk compile php 8.1 atau lebih baru dengan dukungan AVIF dengan flag –with-avif baru di skrip ./configure.

./buildconf --force
./configure --enable-gd --with-avif

Perhatikan juga kalau script ./configure di atas hanya contoh, kalau mau compile php, kamu juga harus nambahin extensi atau flag lain yang kamu butuhin.

Cek Apakah AVIF sudah didukung

untuk mencoba apakah AVIF sudah didukung, kalian bisa mencoba hal berikut:

lewat terminal:

php -i | grep AVIF

jika terinstall seharusnya muncul hal ini:

AVIF Support => enabled

lewat phpinfo() atau fungsi gd_info(), untuk gd_info seharusnya kamu akan lihat yang mirip seperti ini:

[
     "GD Version" => "bundled (2.1.0 compatible)",
     "FreeType Support" => false,
     // ...
     "AVIF Support" => true,
]

Selain itu, ada dua fungsi baru, imagecreatefromavif dan imageavif yang hanya tersedia jika ekstensi GD dikompilasi dengan dukungan AVIF.

if (function_exists('imageavif')) {
    // AVIF sudah didukung.
}

Fungsi-fungsi baru dari dukungan AVIF

Ekstensi GD di PHP 8.1 menambahkan dua fungsi baru jika ekstensi tersebut dikompilasi dengan dukungan AVIF. Mereka mengikuti konvensi yang sama dari fungsi GD lainnya, seperti imagecreatefromjpeg/imagejpeg, imagecreatefrompng/imagepng, dll.

Fungsi imagecreatefromavif

function imagecreatefromavif(string $filename): GdImage|false {}

Fungsi imagecreatefromavif akan mengembalikan instance GdImage dari gambar AVIF yang diberikan. Dengan instance GdImage ini, kamu bisa memanipulasi atau mengubah gambarnya.

Fungsi imagecreatefromavif mirip dengan fungsi yang sudah ada seperti imagecreatefromjpeg dan imagecreatefrompng yang semuanya mengembalikan instance GdImage, atau false jika gagal.

Fungsi imageavif

/**
 * @param resource|string|null $file
 */
function imageavif(GdImage $image, $file = null, int $quality = -1, int $speed = -1): bool {}

fungsi imageavif akan menyimpan (mengembalikan) file berformat AVIF.

Jika parameter $file tidak di isi, fungsi imageavif akan mencetak data biner. Jika nama file diberikan (string), gambar AVIF akan disimpan dengan nama tersebut, atau jika sumber file diberikan, gambar akan ditulis dan ditutup ke sumber tersebut.

Parameter opsional int $quality dan int $speed digunakan untuk mengonfigurasi nilai kualitas dan kecepatan.

  • int $quality: Nilai default -1 atau akan menggunakan nilai default libavif. Nilainya bisa kalian pilih adalah dari 0 (kualitas terburuk) hingga 100 (kualitas tertinggi). Jika kalian kasih nilai lebih dari 100, maka akan dikembalikan ke 0-100.
  • int $speed: Nilai default -1 atau menggunakan nilai default libavif, yang setara dengan 6. Nilai yang diterima adalah kisaran 0 (paling lambat) hingga 10 (tercepat).

Nilai default memberikan kecepatan dan kualitas yang seimbang. Coba gunakan nilai default $speed dan $quality kecuali ada alasan khusus.

Konversi JPEG ke AVIF

$image = imagecreatefromjpeg('image.jpeg');
imageavif($image, 'image.avif');

Konversi AVIF ke PNG

$image = imagecreatefromavif('image.avif');
imagepng($image, 'image.png');

Crop dan simpan gambar dalam berbagai format

$image = imagecreatefromjpeg('image.jpg');

$cropped_image = imagecrop($image, ['x' => 0, 'y' => 0, 'width' => 200, 'height' => 200]);

imagewebp($cropped_image, 'cropped.jpg');
imageavif($cropped_image, 'cropped.avif');

Kompatibilitas dengan versi sebelumnya

Fungsi imagecreatefromavif dan imageavif baru tersedia di PHP 8.1+, dan jika ekstensi GD di compile dengan dukungan AVIF. Ini membutuhkan libavif versi 0.8.2 atau lebih tinggi.

Ubuntu 21.04 atau yang lebih baru, Debian 11 atau yang lebih baru, Alpine 3.13 atau yang lebih baru, Fedora 34 adalah beberapa distribusi Linux yang menyediakan paket libavif-dev/libavif-devel dalam repositori perangkat lunak default mereka.

Atau kalian bisa ambil langsung dari sumber repositori AOMediaCodec/libavif.

Pada aplikasi yang tidak bisa menggunakan ekstensi GD atau mendukung PHP 8.1, ekstensi Image Magick PECL, yang juga mendukung AVIF, mungkin merupakan opsi yang lebih baik dengan pengaturan yang lebih lengkap.

$imagick = new Imagick();
$imagick->readImage('image.jpg');
$imagick->setImageFormat('avif');
$imagick->writeImage('image.avif');

Penutup

AVIF memang format yang masih baru dan belum sepenuhnya didukung. Namun, dengan teknologi ini, bisa membuat situs terasa lebih kencang karena tidak perlu mengunduh gambar yang besar.

Jika ada yang ingin ditanyakan, silahkan kirim di kolom komentar.

About the Author

Dzul Qurnain

Suka nonton Anime, ngoding dan bagi-bagi tips kalau tahu.. Oh iya, suka baca ( tapi yang menarik menurutku aja)...

View All Articles