# quickwebp/1.0.0/admin/class-image-optimizer.php

QuickWebP – WebP &amp; AVIF Image Optimizer, Compression &amp; SEO for WordPress, version 1.0.0. 214 lines.

- Page: https://pluginprobe.com/plugins/quickwebp/1.0.0/code/admin/class-image-optimizer.php
- Raw: https://pluginprobe.com/plugins/quickwebp/1.0.0/raw/admin/class-image-optimizer.php
- Modified: 2023-02-09T08:58:38+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/quickwebp/1.0.0/code/admin/class-image-optimizer.php#L10-L20`.

```php
<?php

use Intervention\Image\ImageManager;

/**
 * The core functionality for image optimizing.
 *
 * @link       http://webdeclic.com
 * @since      1.0.0
 *
 * @package    Quickwebp
 * @subpackage Quickwebp/admin
 */
class Quickwebp_Image_Optimizer {

	/**
	 * The ID of this plugin.
	 *
	 * @since    1.0.0
	 * @access   private
	 * @var      string    $plugin_name    The ID of this plugin.
	 */
	private $plugin_name;

	/**
	 * The version of this plugin.
	 *
	 * @since    1.0.0
	 * @access   private
	 * @var      string    $version    The current version of this plugin.
	 */
	private $version;

	/**
	 * Initialize the class and set its properties.
	 *
	 * @since    1.0.0
	 * @param      string    $plugin_name       The name of this plugin.
	 * @param      string    $version    The version of this plugin.
	 */
	public function __construct( $plugin_name, $version ) {

		$this->plugin_name = $plugin_name;
		$this->version = $version;

	}

	/**
	 * Optimize an image added in wp_media
	 */
	public function image_optimizition( $file ) {

		$settings	= $this->get_settings();

		$image_file = $this->file_is_image( $file, $settings );
		if ( ! $image_file ) {
			return $file;
		}

		if ( $settings['quickwebp_settings_conversion'] != '1' ) {
			return $image_file;
		}

		$extension_to_use = $this->image_extension_loaded();
		if ( ! $extension_to_use ) {
			return $image_file;
		}

		$manager	= new ImageManager(array('driver'=>$extension_to_use));
		$image		= $manager->make($image_file['tmp_name']);
		$height		= $image->height();
		$width		= $image->width();

		if ( $width > $settings['quickwebp_settings_conversion_max_width'] ) {
			$image->widen( $settings['quickwebp_settings_conversion_max_width'] );
		}
		
		if ( $height > $settings['quickwebp_settings_conversion_max_height'] ) {
			$image->heighten( $settings['quickwebp_settings_conversion_max_height'] );
		}

		$image->sharpen($settings['quickwebp_settings_conversion_sharpen']);
		$image->save( $image_file['tmp_name'], $settings['quickwebp_settings_conversion_quality'], 'webp' );

		$size_before	= $image_file['size'];
		$size_after 	= $image->filesize();
		$mime 			= $image->mime();

		$image_file['size'] = $size_after;
		$image_file['type'] = $mime;
		
		return $image_file;
	}

	/**
	 * Get the package used by the server
	 * 
	 */
	public function image_extension_loaded() {

		if ( extension_loaded('imagick') ) {
			return 'imagick';
		}

		if ( extension_loaded('gd') ) {
			return 'gd';
		}

		return false;
	}

	/**
	 * Check if the file is an image
	 * 
	 */
	public function file_is_image( $file, $settings ) {

		$file_name		= isset($file['name']) 		? $file['name'] 	: '';
		$file_type		= isset($file['type']) 		? $file['type'] 	: '';
		$file_tmp_name	= isset($file['tmp_name'])	? $file['tmp_name']	: '';
		$file_error		= isset($file['error']) 	? $file['error'] 	: '';
		$file_size		= isset($file['size']) 		? $file['size'] 	: '';

		if ( empty($file_tmp_name) ) {
			return false;
		}

		$is_image	= wp_getimagesize($file_tmp_name);
		if ( ! $is_image ) {
			return false;
		}

		$name = $file_name;

		if ( $settings['quickwebp_settings_cleanup'] ) {
			$name =  quickwebp_sanitize_name($file_name);
		}

		return array(
			'original_name'	=> $file_name,
			'name'			=> $name,
			'type'			=> $file_type,
			'tmp_name'		=> $file_tmp_name,
			'error'			=> $file_error,
			'size'			=> $file_size
		);
	}

	/**
	 * Get the optimization settings
	 */
	public function get_settings() {

		return array(
			'quickwebp_settings_conversion'				=> get_option('quickwebp_settings_conversion', quickwebp_settings_default('quickwebp_settings_conversion') ),
			'quickwebp_settings_conversion_max_width'	=> get_option('quickwebp_settings_conversion_max_width', quickwebp_settings_default('quickwebp_settings_conversion_max_width') ),
			'quickwebp_settings_conversion_max_height'	=> get_option('quickwebp_settings_conversion_max_height', quickwebp_settings_default('quickwebp_settings_conversion_max_height') ),
			'quickwebp_settings_conversion_quality'		=> get_option('quickwebp_settings_conversion_quality', quickwebp_settings_default('quickwebp_settings_conversion_quality') ),
			'quickwebp_settings_conversion_sharpen'		=> get_option('quickwebp_settings_conversion_sharpen', quickwebp_settings_default('quickwebp_settings_conversion_sharpen') ),
			'quickwebp_settings_completion'				=> get_option('quickwebp_settings_completion', quickwebp_settings_default('quickwebp_settings_completion') ),
			'quickwebp_settings_completion_options'		=> get_option('quickwebp_settings_completion_options', quickwebp_settings_default('quickwebp_settings_completion_options') ),
			'quickwebp_settings_cleanup'				=> get_option('quickwebp_settings_cleanup', quickwebp_settings_default('quickwebp_settings_cleanup') )
		);
	}

	/**
	 * Add data to the attachment
	 */
	public function add_data_to_attachment( $metadata, $attachment_id, $context ) {

		$settings = $this->get_settings();
		if ( $settings['quickwebp_settings_completion'] != '1' ) {
			return $metadata;
		}

		if ( $context != 'create' ) {
			return $metadata;
		}

		if ( isset($_FILES['async-upload']['original_name']) ) {

			$original_name = sanitize_text_field( $_FILES['async-upload']['original_name'] );
			$original_name = pathinfo( $original_name, PATHINFO_FILENAME );

			$post_arr = array(
				'ID'			=> $attachment_id,
				'meta_input'	=> array()
			);

			$completion_options = is_array($settings['quickwebp_settings_completion_options']) ? $settings['quickwebp_settings_completion_options'] : array();

			if ( in_array( 'title', $completion_options ) ) {
				$post_arr['post_title'] = $original_name;
			}
			
			if ( in_array( 'caption', $completion_options ) ) {
				$post_arr['post_excerpt'] = $original_name;
			}

			if ( in_array( 'alt', $completion_options ) ) {
				$post_arr['meta_input']['_wp_attachment_image_alt'] = $original_name;
			}
			
			if ( in_array( 'description', $completion_options ) ) {
				$post_arr['post_content'] = $original_name;
			}

			wp_update_post( $post_arr );
		}

		return $metadata;
	}

}
```
