Kısa Cevap: php tabanlı web sitelerinde görselleri otomatik olarak WebP formatına dönüştürmek için GD veya Imagick kütüphanelerini kullanabilirsiniz. Bu işlem, görsel yüklendiğinde bir olay dinleyicisi veya manuel bir tetikleyici ile otomatikleştirilebilir. Kalite kaybını önlemek için dönüştürme sırasında uygun sıkıştırma seviyeleri ayarlanmalı ve sunucu tarafında gerekli PHP eklentilerinin kurulu olduğundan emin olunmalıdır.
PHP ile yüklenen görselleri kalite kaybı olmadan otomatik olarak WebP formatına dönüştürmek için en güvenilir yöntemlerden biri, sunucunuzda kurulu olan GD veya Imagick kütüphanelerini kullanmaktır. Bu kütüphaneler, PHP'nin görsel işleme yeteneklerini genişletir.
Genellikle bir görsel yüklendiğinde bu işlemi tetikleyebilirsiniz. Örneğin, bir kullanıcı bir görsel yüklediğinde, PHP betiğiniz bu görseli algılar ve ardından WebP'ye dönüştürme işlemini başlatır. Bu süreçte kaliteyi korumak için WebP sıkıştırma seviyesini ayarlamak kritiktir. Genellikle 80-90 arası bir kalite seviyesi, görsel bütünlüğünü bozmadan iyi bir sıkıştırma oranı sunar.
Eğer sunucunuzda Imagick kuruluysa, bu kütüphane genellikle daha fazla kontrol ve daha iyi performans sunar. İşte temel bir Imagick örneği:
If (extension_loaded('imagick')) {
try {
$imagePath = 'yuklenen_gorsel.jpg'; // Kullanıcının yüklediği görselin yolu
$webpPath = 'yuklenen_gorsel.webp';
$imagick = new Imagick(realpath($imagePath));
$imagick->SetImageFormat('webp');
// Kalite seviyesini ayarlayın (0-100 arası, 100 en yüksek kalite)
$imagick->SetImageCompressionQuality(85);
$imagick->WriteImage($webpPath);
$imagick->Clear();
$imagick->Destroy();
// Orijinal görseli silip yeni WebP görselini kullanabilirsiniz
// unlink($imagePath);
// rename($webpPath, $imagePath); // Eğer orijinal dosya adıyla kullanmak isterseniz
} catch (ImagickException $e) {
// Hata yönetimi
error_log('WebP dönüşümü sırasında hata: ' . $e->GetMessage());
}
} else {
// GD kütüphanesini kullanma veya hata mesajı verme
error_log('Imagick kütüphanesi sunucuda kurulu değil.');
}
Eğer Imagick mevcut değilse, GD kütüphanesi de benzer bir işlevi yerine getirebilir:
If (function_exists('imagecreatefromjpeg') && function_exists('imagewebp')) {
$imagePath = 'yuklenen_gorsel.jpg';
$webpPath = 'yuklenen_gorsel.webp';
$sourceImage = imagecreatefromjpeg($imagePath); // Dosya türüne göre imagecreatefrompng, imagecreatefromgif vb. kullanın
// Kaliteyi ayarlayın (0-9 arası, 9 en yüksek kalite)
$success = imagewebp($sourceImage, $webpPath, 8);
if ($success) {
// Başarılı dönüşüm sonrası işlemler
// imagedestroy($sourceImage);
// unlink($imagePath);
// rename($webpPath, $imagePath);
} else {
error_log('GD ile WebP dönüşümü başarısız oldu.');
}
imagedestroy($sourceImage);
} else {
error_log('GD kütüphanesi veya imagewebp fonksiyonu mevcut değil.');
}
Bu dönüşümü otomatik hale getirmek için, görselin sunucuya yüklendiği $_FILES verisini işleyen PHP betiğinizin sonuna ekleyebilirsiniz. Benzer bir yapıyı kurarken, dosya türü kontrollerini (JPEG, PNG, GIF vb.) doğru yaptığınızdan emin olun. Bir keresinde PNG bir görseli JPEG olarak algılayıp dönüştürmeye çalıştığımda beklenmedik sonuçlar almıştım, bu yüzden dosya uzantısı ve MIME tipi kontrolleri oldukça önemli.
Performans açısından, özellikle çok sayıda görsel işleniyorsa, bu işlemleri arka planda çalışan bir görev (cron job) veya bir kuyruk sistemi (queue system) ile yönetmeyi düşünebilirsiniz. Ancak standart bir yükleme işlemi için yukarıdaki kod parçacıkları yeterli olacaktır.