PK
œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Notice: ob_end_clean(): Failed to delete buffer. No buffer to delete in /home/telusvwg/public_html/da754d/index.php on line 8
| Dir : /home/telusvwg/techinnovo.co/wp-content/plugins/max-image-performance/includes/ |
| Server: Linux premium279.web-hosting.com 4.18.0-553.45.1.lve.el8.x86_64 #1 SMP Wed Mar 26 12:08:09 UTC 2025 x86_64 IP: 66.29.132.192 |
| Dir : /home/telusvwg/techinnovo.co/wp-content/plugins/max-image-performance/includes/class-aiwo-webp.php |
<?php
if (!defined('ABSPATH')) {
exit;
}
if (!class_exists('AIWO_WebP')) {
class AIWO_WebP {
public static function init() {
add_filter('wp_generate_attachment_metadata', array(__CLASS__, 'generate_webp'), 10, 2);
add_filter('wp_get_attachment_image_src', array(__CLASS__, 'filter_image_src'), 10, 4);
add_filter('wp_calculate_image_srcset', array(__CLASS__, 'filter_srcset'), 10, 5);
add_filter('wp_get_attachment_image', array(__CLASS__, 'filter_attachment_image'), 10, 5);
add_action('delete_attachment', array(__CLASS__, 'delete_webp_files'));
}
public static function generate_webp($metadata, $attachment_id) {
$settings = AIWO_Settings::get_settings();
if (empty($settings['enable_webp'])) {
// Still allow AVIF generation when WebP is disabled.
}
$file = get_attached_file($attachment_id);
if (!$file || !file_exists($file)) {
return $metadata;
}
$mime = get_post_mime_type($attachment_id);
if (!in_array($mime, array('image/jpeg', 'image/png', 'image/webp'), true)) {
return $metadata;
}
$quality = intval($settings['quality']);
$avif_quality = intval($settings['avif_quality']);
if (!empty($settings['optimize_originals'])) {
self::optimize_image($file, $mime, $quality);
}
if (!empty($settings['optimize_sizes']) && !empty($metadata['sizes']) && is_array($metadata['sizes'])) {
foreach ($metadata['sizes'] as $size_data) {
if (empty($size_data['file'])) {
continue;
}
$size_file = wp_normalize_path(path_join(dirname($file), $size_data['file']));
if (file_exists($size_file)) {
self::optimize_image($size_file, $mime, $quality);
}
}
}
$webp_meta = array();
$avif_meta = array();
if (!empty($settings['enable_webp']) && $mime !== 'image/webp') {
$full_webp = self::create_webp($file, $quality);
if ($full_webp) {
$webp_meta['full'] = self::relative_upload_path($full_webp);
}
}
if (!empty($settings['enable_avif'])) {
$full_avif = self::create_avif($file, $avif_quality);
if ($full_avif) {
$avif_meta['full'] = self::relative_upload_path($full_avif);
}
}
if (!empty($metadata['sizes']) && is_array($metadata['sizes'])) {
$upload_dir = wp_get_upload_dir();
$basedir = wp_normalize_path($upload_dir['basedir']);
foreach ($metadata['sizes'] as $size_key => $size_data) {
if (empty($size_data['file'])) {
continue;
}
$size_file = wp_normalize_path(path_join(dirname($file), $size_data['file']));
if (file_exists($size_file)) {
if (!empty($settings['enable_webp']) && $mime !== 'image/webp') {
$webp_file = self::create_webp($size_file, $quality);
if ($webp_file) {
$webp_meta[$size_key] = self::relative_upload_path($webp_file);
}
}
if (!empty($settings['enable_avif'])) {
$avif_file = self::create_avif($size_file, $avif_quality);
if ($avif_file) {
$avif_meta[$size_key] = self::relative_upload_path($avif_file);
}
}
}
}
}
if (!empty($webp_meta)) {
$metadata['aiwo_webp'] = $webp_meta;
}
if (!empty($avif_meta)) {
$metadata['aiwo_avif'] = $avif_meta;
}
return $metadata;
}
public static function filter_image_src($image, $attachment_id, $size, $icon) {
$settings = AIWO_Settings::get_settings();
$supports_avif = !empty($settings['serve_avif']) && self::client_supports_avif();
$supports_webp = !empty($settings['serve_webp']) && self::client_supports_webp();
if (!$supports_avif && !$supports_webp) {
return $image;
}
if (empty($image[0])) {
return $image;
}
$file = get_attached_file($attachment_id);
if (!$file) {
return $image;
}
if ($supports_avif) {
$avif_url = self::get_avif_url_for_size($attachment_id, $size, $file);
if ($avif_url) {
$image[0] = $avif_url;
return $image;
}
}
if ($supports_webp) {
$webp_url = self::get_webp_url_for_size($attachment_id, $size, $file);
if ($webp_url) {
$image[0] = $webp_url;
}
}
return $image;
}
public static function filter_srcset($sources, $size_array, $image_src, $image_meta, $attachment_id) {
$settings = AIWO_Settings::get_settings();
$supports_avif = !empty($settings['serve_avif']) && self::client_supports_avif();
$supports_webp = !empty($settings['serve_webp']) && self::client_supports_webp();
if (!$supports_avif && !$supports_webp) {
return $sources;
}
if (empty($sources) || !is_array($sources)) {
return $sources;
}
$file = get_attached_file($attachment_id);
if (!$file) {
return $sources;
}
foreach ($sources as $width => $source) {
if (empty($source['url'])) {
continue;
}
if ($supports_avif) {
$candidate = self::replace_ext_with_avif($source['url']);
if ($candidate && self::url_has_avif($candidate)) {
$sources[$width]['url'] = $candidate;
continue;
}
}
if ($supports_webp) {
$candidate = self::replace_ext_with_webp($source['url']);
if ($candidate && self::url_has_webp($candidate)) {
$sources[$width]['url'] = $candidate;
}
}
}
return $sources;
}
public static function filter_attachment_image($html, $attachment_id, $size, $icon, $attr) {
$settings = AIWO_Settings::get_settings();
$supports_avif = !empty($settings['serve_avif']) && self::client_supports_avif();
$supports_webp = !empty($settings['serve_webp']) && self::client_supports_webp();
if (empty($settings['use_picture_tag']) || (!$supports_avif && !$supports_webp)) {
return $html;
}
if (empty($html)) {
return $html;
}
$file = get_attached_file($attachment_id);
if (!$file) {
return $html;
}
$avif_url = $supports_avif ? self::get_avif_url_for_size($attachment_id, $size, $file) : false;
$webp_url = $supports_webp ? self::get_webp_url_for_size($attachment_id, $size, $file) : false;
if (!$avif_url && !$webp_url) {
return $html;
}
$sizes_attr = '';
if (is_array($attr) && !empty($attr['sizes'])) {
$sizes_attr = ' sizes="' . esc_attr($attr['sizes']) . '"';
}
$picture = '<picture>';
if ($avif_url) {
$picture .= '<source type="image/avif" srcset="' . esc_url($avif_url) . '"' . $sizes_attr . '>';
}
if ($webp_url) {
$picture .= '<source type="image/webp" srcset="' . esc_url($webp_url) . '"' . $sizes_attr . '>';
}
$picture .= $html;
$picture .= '</picture>';
return $picture;
}
public static function delete_webp_files($attachment_id) {
$meta = wp_get_attachment_metadata($attachment_id);
if (empty($meta['aiwo_webp']) || !is_array($meta['aiwo_webp'])) {
// Continue to AVIF cleanup.
}
$upload_dir = wp_get_upload_dir();
$basedir = wp_normalize_path($upload_dir['basedir']);
if (!empty($meta['aiwo_webp']) && is_array($meta['aiwo_webp'])) {
foreach ($meta['aiwo_webp'] as $rel_path) {
$file = wp_normalize_path(path_join($basedir, $rel_path));
if (file_exists($file)) {
@unlink($file);
}
}
}
if (!empty($meta['aiwo_avif']) && is_array($meta['aiwo_avif'])) {
foreach ($meta['aiwo_avif'] as $rel_path) {
$file = wp_normalize_path(path_join($basedir, $rel_path));
if (file_exists($file)) {
@unlink($file);
}
}
}
}
private static function create_webp($file, $quality) {
$webp_path = self::replace_ext_with_webp($file);
if (!$webp_path) {
return false;
}
if (file_exists($webp_path)) {
return $webp_path;
}
$editor = wp_get_image_editor($file);
if (!is_wp_error($editor) && $editor->supports_mime_type('image/webp')) {
$editor->set_quality($quality);
$saved = $editor->save($webp_path, 'image/webp');
if (!is_wp_error($saved) && !empty($saved['path'])) {
return $saved['path'];
}
}
if (self::gd_webp_available()) {
$mime = self::detect_mime($file);
if ($mime === 'image/jpeg') {
if (!function_exists('imagecreatefromjpeg')) {
return false;
}
$img = @imagecreatefromjpeg($file);
} elseif ($mime === 'image/png') {
if (!function_exists('imagecreatefrompng')) {
return false;
}
$img = @imagecreatefrompng($file);
} elseif ($mime === 'image/webp') {
if (!function_exists('imagecreatefromwebp')) {
return false;
}
$img = @imagecreatefromwebp($file);
} else {
return false;
}
if (!$img) {
return false;
}
if (function_exists('imagepalettetotruecolor')) {
imagepalettetotruecolor($img);
}
if (function_exists('imagealphablending')) {
imagealphablending($img, true);
}
if (function_exists('imagesavealpha')) {
imagesavealpha($img, true);
}
$ok = imagewebp($img, $webp_path, $quality);
if (function_exists('imagedestroy')) {
imagedestroy($img);
}
if ($ok) {
return $webp_path;
}
}
return false;
}
private static function create_avif($file, $quality) {
$avif_path = self::replace_ext_with_avif($file);
if (!$avif_path) {
return false;
}
if (file_exists($avif_path)) {
return $avif_path;
}
$editor = wp_get_image_editor($file);
if (!is_wp_error($editor) && $editor->supports_mime_type('image/avif')) {
$editor->set_quality($quality);
$saved = $editor->save($avif_path, 'image/avif');
if (!is_wp_error($saved) && !empty($saved['path'])) {
return $saved['path'];
}
}
if (function_exists('imageavif')) {
$mime = self::detect_mime($file);
if ($mime === 'image/jpeg') {
if (!function_exists('imagecreatefromjpeg')) {
return false;
}
$img = @imagecreatefromjpeg($file);
} elseif ($mime === 'image/png') {
if (!function_exists('imagecreatefrompng')) {
return false;
}
$img = @imagecreatefrompng($file);
} elseif ($mime === 'image/webp') {
if (!function_exists('imagecreatefromwebp')) {
return false;
}
$img = @imagecreatefromwebp($file);
} else {
return false;
}
if (!$img) {
return false;
}
if (function_exists('imagepalettetotruecolor')) {
imagepalettetotruecolor($img);
}
if (function_exists('imagealphablending')) {
imagealphablending($img, true);
}
if (function_exists('imagesavealpha')) {
imagesavealpha($img, true);
}
$ok = imageavif($img, $avif_path, $quality);
if (function_exists('imagedestroy')) {
imagedestroy($img);
}
if ($ok) {
return $avif_path;
}
}
return false;
}
public static function regenerate_for_attachment($attachment_id) {
$metadata = wp_get_attachment_metadata($attachment_id);
if (empty($metadata) || !is_array($metadata)) {
return false;
}
$updated = self::generate_webp($metadata, $attachment_id);
wp_update_attachment_metadata($attachment_id, $updated);
return true;
}
private static function client_supports_webp() {
if (!isset($_SERVER['HTTP_ACCEPT'])) {
return false;
}
return strpos($_SERVER['HTTP_ACCEPT'], 'image/webp') !== false;
}
private static function client_supports_avif() {
if (!isset($_SERVER['HTTP_ACCEPT'])) {
return false;
}
return strpos($_SERVER['HTTP_ACCEPT'], 'image/avif') !== false;
}
private static function get_webp_url_for_size($attachment_id, $size, $file) {
$meta = wp_get_attachment_metadata($attachment_id);
if (!empty($meta['aiwo_webp'])) {
if ($size === 'full' && !empty($meta['aiwo_webp']['full'])) {
return self::relative_upload_url($meta['aiwo_webp']['full']);
}
if (is_string($size) && !empty($meta['aiwo_webp'][$size])) {
return self::relative_upload_url($meta['aiwo_webp'][$size]);
}
}
if ($size === 'full') {
$webp_path = self::replace_ext_with_webp($file);
return self::path_to_url_if_exists($webp_path);
}
return false;
}
private static function get_avif_url_for_size($attachment_id, $size, $file) {
$meta = wp_get_attachment_metadata($attachment_id);
if (!empty($meta['aiwo_avif'])) {
if ($size === 'full' && !empty($meta['aiwo_avif']['full'])) {
return self::relative_upload_url($meta['aiwo_avif']['full']);
}
if (is_string($size) && !empty($meta['aiwo_avif'][$size])) {
return self::relative_upload_url($meta['aiwo_avif'][$size]);
}
}
if ($size === 'full') {
$avif_path = self::replace_ext_with_avif($file);
return self::path_to_url_if_exists($avif_path);
}
return false;
}
private static function replace_ext_with_webp($path_or_url) {
return preg_replace('/\.(jpe?g|png)$/i', '.webp', $path_or_url);
}
private static function replace_ext_with_avif($path_or_url) {
return preg_replace('/\.(jpe?g|png|webp)$/i', '.avif', $path_or_url);
}
private static function relative_upload_path($absolute_path) {
$upload_dir = wp_get_upload_dir();
$basedir = wp_normalize_path($upload_dir['basedir']);
$path = wp_normalize_path($absolute_path);
if (strpos($path, $basedir) !== 0) {
return '';
}
return ltrim(str_replace($basedir, '', $path), '/');
}
private static function relative_upload_url($relative_path) {
if (empty($relative_path)) {
return false;
}
$upload_dir = wp_get_upload_dir();
return trailingslashit($upload_dir['baseurl']) . ltrim($relative_path, '/');
}
private static function path_to_url_if_exists($path) {
if (empty($path) || !file_exists($path)) {
return false;
}
$rel = self::relative_upload_path($path);
if (empty($rel)) {
return false;
}
return self::relative_upload_url($rel);
}
private static function url_has_webp($url) {
$upload_dir = wp_get_upload_dir();
$baseurl = $upload_dir['baseurl'];
if (strpos($url, $baseurl) !== 0) {
return false;
}
$relative = ltrim(str_replace($baseurl, '', $url), '/');
$file = wp_normalize_path(path_join($upload_dir['basedir'], $relative));
return file_exists($file);
}
private static function url_has_avif($url) {
$upload_dir = wp_get_upload_dir();
$baseurl = $upload_dir['baseurl'];
if (strpos($url, $baseurl) !== 0) {
return false;
}
$relative = ltrim(str_replace($baseurl, '', $url), '/');
$file = wp_normalize_path(path_join($upload_dir['basedir'], $relative));
return file_exists($file);
}
private static function gd_webp_available() {
return function_exists('imagewebp');
}
private static function detect_mime($file) {
if (function_exists('mime_content_type')) {
return mime_content_type($file);
}
$info = wp_check_filetype($file);
return isset($info['type']) ? $info['type'] : '';
}
private static function optimize_image($file, $mime, $quality) {
if (!file_exists($file)) {
return false;
}
$editor = wp_get_image_editor($file);
if (!is_wp_error($editor)) {
$editor->set_quality($quality);
$saved = $editor->save($file, $mime);
return !is_wp_error($saved);
}
return false;
}
}
}