# jch-optimize/trunk/lib/src/Service/Provider/OptimizeImages.php

JCH Optimize, version trunk. 94 lines.

- Page: https://pluginprobe.com/plugins/jch-optimize/trunk/code/lib/src/Service/Provider/OptimizeImages.php
- Raw: https://pluginprobe.com/plugins/jch-optimize/trunk/raw/lib/src/Service/Provider/OptimizeImages.php
- Modified: 2026-07-04T02:31:50+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/jch-optimize/trunk/code/lib/src/Service/Provider/OptimizeImages.php#L10-L20`.

```php
<?php

/**
 * JCH Optimize - Performs several front-end optimizations for fast downloads
 *
 * @package   jchoptimize/core
 * @author    Samuel Marshall <samuel@jch-optimize.net>
 * @copyright Copyright (c) 2026 Samuel Marshall / JCH Optimize
 * @license   GNU/GPLv3, or later. See LICENSE file
 *
 *  If LICENSE file missing, see <http://www.gnu.org/licenses/>.
 */

namespace JchOptimize\Core\Service\Provider;

use _JchOptimizeVendor\V91\Joomla\DI\Container;
use _JchOptimizeVendor\V91\Joomla\DI\ServiceProviderInterface;
use _JchOptimizeVendor\V91\Psr\Log\LoggerInterface;
use JchOptimize\Container\ContainerFactory;
use JchOptimize\Core\Admin\AdminHelper;
use JchOptimize\Core\Admin\API\OptimizeImages\ClockInterface;
use JchOptimize\Core\Admin\API\OptimizeImages\HtmlCrawlerInterface as OptimizeImagesHtmlCrawlerInterface;
use JchOptimize\Core\Admin\API\OptimizeImages\ImageOptimizationBatchBuilder;
use JchOptimize\Core\Admin\API\OptimizeImages\ImageOptimizationBatchConfig;
use JchOptimize\Core\Admin\API\OptimizeImages\ImageOptimizationRequestFactory;
use JchOptimize\Core\Admin\API\OptimizeImages\ImagesFromHtml;
use JchOptimize\Core\Admin\API\OptimizeImages\ImagesFromHtmlInterface;
use JchOptimize\Core\Admin\API\OptimizeImages\ProcessImagesQueueFactory;
use JchOptimize\Core\Admin\API\OptimizeImages\SpatieHtmlCrawler;
use JchOptimize\Core\Admin\API\OptimizeImages\SystemClock;
use JchOptimize\Core\Platform\PathsInterface;
use JchOptimize\Core\Registry;

class OptimizeImages implements ServiceProviderInterface
{
    /**
     * @inheritDoc
     */
    public function register(Container $container): void
    {
        $container->share(OptimizeImagesHtmlCrawlerInterface::class, [$this, 'getOptimizeImagesHtmlCrawlerService']);
        $container->share(ImagesFromHtmlInterface::class, [$this, 'getImagesFromHtmlService']);
        $container->share(ProcessImagesQueueFactory::class, [$this, 'getProcessImagesQueueFactoryService']);
        $container->share(ImageOptimizationRequestFactory::class, [$this, 'getImageOptimizationRequestFactoryService']);
        $container->share(ClockInterface::class, fn(): ClockInterface => new SystemClock());
        $container->share(
            ImageOptimizationBatchConfig::class,
            fn(): ImageOptimizationBatchConfig => new ImageOptimizationBatchConfig()
        );
        $container->share(ImageOptimizationBatchBuilder::class, [$this, 'getImageOptimizationBatchBuilderService']);
    }

    public function getOptimizeImagesHtmlCrawlerService(Container $container): OptimizeImagesHtmlCrawlerInterface
    {
        return new SpatieHtmlCrawler(
            $container->get(LoggerInterface::class)
        );
    }

    public function getImagesFromHtmlService(Container $container): ImagesFromHtmlInterface
    {
        return new ImagesFromHtml(
            fn(): Container => ContainerFactory::create(),
            $container->get(Registry::class),
            $container->get(AdminHelper::class)
        );
    }

    public function getProcessImagesQueueFactoryService(Container $container): ProcessImagesQueueFactory
    {
        return new ProcessImagesQueueFactory($container);
    }

    public function getImageOptimizationRequestFactoryService(Container $container): ImageOptimizationRequestFactory
    {
        return new ImageOptimizationRequestFactory(
            $container->get(AdminHelper::class)
        );
    }

    public function getImageOptimizationBatchBuilderService(Container $container): ImageOptimizationBatchBuilder
    {
        return new ImageOptimizationBatchBuilder(
            $container->get(ProcessImagesQueueFactory::class),
            $container->get(ImageOptimizationRequestFactory::class),
            $container->get(ClockInterface::class),
            $container->get(ImageOptimizationBatchConfig::class),
            $container->get(AdminHelper::class),
            $container->get(PathsInterface::class),
            $container->get(LoggerInterface::class)
        );
    }
}

```
