# image-optimization/1.0.1/modules/optimization/components/single-optimization.php

Image Optimizer – Compress Images and Convert to WebP or AVIF, version 1.0.1. 78 lines.

- Page: https://pluginprobe.com/plugins/image-optimization/1.0.1/code/modules/optimization/components/single-optimization.php
- Raw: https://pluginprobe.com/plugins/image-optimization/1.0.1/raw/modules/optimization/components/single-optimization.php
- Modified: 2024-01-10T12:38:22+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/image-optimization/1.0.1/code/modules/optimization/components/single-optimization.php#L10-L20`.

```php
<?php

namespace ImageOptimizer\Modules\Optimization\Components;

use ImageOptimizer\Classes\Async_Operation\Async_Operation_Hook;
use ImageOptimizer\Classes\Image\{
	Image,
	Image_Meta,
	Image_Optimization_Error_Type,
	Image_Restore,
	Image_Status
};
use ImageOptimizer\Classes\Logger;
use ImageOptimizer\Modules\Oauth\Classes\Exceptions\Quota_Exceeded_Error;
use ImageOptimizer\Modules\Optimization\Classes\Optimize_Image;
use Throwable;

class Single_Optimization {
	/** @async */
	public function optimize_single_image( int $image_id ) {
		try {
			$oi = new Optimize_Image(
				$image_id,
				'manual',
			);

			$oi->optimize();
		} catch ( Quota_Exceeded_Error $qe ) {
			( new Image_Meta( $image_id ) )
				->set_status( Image_Status::OPTIMIZATION_FAILED )
				->set_error_type( Image_Optimization_Error_Type::QUOTA_EXCEEDED )
				->save();
		} catch ( Throwable $t ) {
			Logger::log( Logger::LEVEL_ERROR, 'Optimization error. Reason: ' . $t->getMessage() );

			( new Image_Meta( $image_id ) )
				->set_status( Image_Status::OPTIMIZATION_FAILED )
				->set_error_type( Image_Optimization_Error_Type::GENERIC )
				->save();
		}
	}

	/** @async */
	public function reoptimize_single_image( int $image_id ) {
		try {
			$image = new Image( $image_id );

			if ( $image->can_be_restored() ) {
				Image_Restore::restore( $image_id, true );
			}

			$oi = new Optimize_Image(
				$image_id,
				'manual',
			);

			$oi->optimize();
		} catch ( Quota_Exceeded_Error $qe ) {
			( new Image_Meta( $image_id ) )
				->set_status( Image_Status::REOPTIMIZING_FAILED )
				->set_error_type( Image_Optimization_Error_Type::QUOTA_EXCEEDED )
				->save();
		} catch ( Throwable $t ) {
			Logger::log( Logger::LEVEL_ERROR, 'Reoptimizing error. Reason: ' . $t->getMessage() );

			( new Image_Meta( $image_id ) )
				->set_status( Image_Status::REOPTIMIZING_FAILED )
				->set_error_type( Image_Optimization_Error_Type::GENERIC )
				->save();
		}
	}

	public function __construct() {
		add_action( Async_Operation_Hook::OPTIMIZE_SINGLE, [ $this, 'optimize_single_image' ] );
		add_action( Async_Operation_Hook::REOPTIMIZE_SINGLE, [ $this, 'reoptimize_single_image' ] );
	}
}

```
