public function GDToolkit::save in Drupal 9
Same name and namespace in other branches
- 8 core/modules/system/src/Plugin/ImageToolkit/GDToolkit.php \Drupal\system\Plugin\ImageToolkit\GDToolkit::save()
Writes an image resource to a destination file.
Parameters
string $destination: A string file URI or path where the image should be saved.
Return value
bool TRUE on success, FALSE on failure.
Overrides ImageToolkitInterface::save
File
- core/
modules/ system/ src/ Plugin/ ImageToolkit/ GDToolkit.php, line 237
Class
- GDToolkit
- Defines the GD2 toolkit for image manipulation within Drupal.
Namespace
Drupal\system\Plugin\ImageToolkitCode
public function save($destination) {
$scheme = StreamWrapperManager::getScheme($destination);
// Work around lack of stream wrapper support in imagejpeg() and imagepng().
if ($scheme && $this->streamWrapperManager
->isValidScheme($scheme)) {
// If destination is not local, save image to temporary local file.
$local_wrappers = $this->streamWrapperManager
->getWrappers(StreamWrapperInterface::LOCAL);
if (!isset($local_wrappers[$scheme])) {
$permanent_destination = $destination;
$destination = $this->fileSystem
->tempnam('temporary://', 'gd_');
}
// Convert stream wrapper URI to normal path.
$destination = $this->fileSystem
->realpath($destination);
}
$function = 'image' . image_type_to_extension($this
->getType(), FALSE);
if (!function_exists($function)) {
return FALSE;
}
if ($this
->getType() == IMAGETYPE_JPEG) {
$success = $function($this
->getResource(), $destination, $this->configFactory
->get('system.image.gd')
->get('jpeg_quality'));
}
else {
// Image types that support alpha need to be saved accordingly.
if (in_array($this
->getType(), [
IMAGETYPE_PNG,
IMAGETYPE_WEBP,
], TRUE)) {
imagealphablending($this
->getResource(), FALSE);
imagesavealpha($this
->getResource(), TRUE);
}
$success = $function($this
->getResource(), $destination);
}
// Move temporary local file to remote destination.
if (isset($permanent_destination) && $success) {
try {
$this->fileSystem
->move($destination, $permanent_destination, FileSystemInterface::EXISTS_REPLACE);
return TRUE;
} catch (FileException $e) {
return FALSE;
}
}
return $success;
}