function GDToolkit::load

Same name and namespace in other branches
  1. 9 core/modules/system/src/Plugin/ImageToolkit/GDToolkit.php \Drupal\system\Plugin\ImageToolkit\GDToolkit::load()
  2. 8.9.x core/modules/system/src/Plugin/ImageToolkit/GDToolkit.php \Drupal\system\Plugin\ImageToolkit\GDToolkit::load()
  3. 11.x core/modules/system/src/Plugin/ImageToolkit/GDToolkit.php \Drupal\system\Plugin\ImageToolkit\GDToolkit::load()

Loads an image from a file.

Return value

bool TRUE or FALSE, based on success.

1 call to GDToolkit::load()
GDToolkit::getImage in core/modules/system/src/Plugin/ImageToolkit/GDToolkit.php
Retrieves the image.

File

core/modules/system/src/Plugin/ImageToolkit/GDToolkit.php, line 252

Class

GDToolkit
Defines the GD2 toolkit for image manipulation within Drupal.

Namespace

Drupal\system\Plugin\ImageToolkit

Code

protected function load() {
    // Return immediately if the image file is not valid.
    if (!$this->isValid()) {
        return FALSE;
    }
    // Invalidate the image object and return if there's no function to load the
    // image file.
    $function = 'imagecreatefrom' . image_type_to_extension($this->getType(), FALSE);
    if (!function_exists($function)) {
        $this->logger
            ->error("The image toolkit '@toolkit' can not process image '@image'.", [
            '@toolkit' => $this->getPluginId(),
            '@image' => $this->getSource(),
        ]);
        $this->preLoadInfo = NULL;
        return FALSE;
    }
    // Invalidate the image object and return if the load fails.
    try {
        $image = $function($this->getSource());
    } catch (\Throwable $t) {
        $this->logger
            ->error("The image toolkit '@toolkit' failed loading image '@image'. Reported error: @class - @message", [
            '@toolkit' => $this->getPluginId(),
            '@image' => $this->getSource(),
            '@class' => get_class($t),
            '@message' => $t->getMessage(),
        ]);
        $this->preLoadInfo = NULL;
        return FALSE;
    }
    $this->setImage($image);
    if (imageistruecolor($image)) {
        return TRUE;
    }
    else {
        // Convert indexed images to truecolor, copying the image to a new
        // truecolor image, so that filters work correctly and don't result
        // in unnecessary dither.
        $data = [
            'width' => imagesx($image),
            'height' => imagesy($image),
            'extension' => image_type_to_extension($this->getType(), FALSE),
            'transparent_color' => $this->getTransparentColor(),
            'is_temp' => TRUE,
        ];
        if ($this->apply('create_new', $data)) {
            imagecopy($this->getImage(), $image, 0, 0, 0, 0, imagesx($image), imagesy($image));
        }
    }
    return (bool) $this->getImage();
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.