function simple_image_rotate_rotate_image in Simple Image Rotate 8
Same name and namespace in other branches
- 7.2 simple_image_rotate.module \simple_image_rotate_rotate_image()
- 7 simple_image_rotate.module \simple_image_rotate_rotate_image()
- 2.1.x simple_image_rotate.module \simple_image_rotate_rotate_image()
- 1.0.x simple_image_rotate.module \simple_image_rotate_rotate_image()
- 2.0.x simple_image_rotate.module \simple_image_rotate_rotate_image()
Rotates image.
1 call to simple_image_rotate_rotate_image()
- simple_image_rotate_entity_presave in ./
simple_image_rotate.module - Implements hook_entity_presave().
File
- ./
simple_image_rotate.module, line 146 - This is the Simple Image Rotate module for rotating uploaded image files.
Code
function simple_image_rotate_rotate_image(EntityInterface &$entity) {
$type = $entity
->getEntityType()
->id();
$bundle = $entity
->bundle();
$entityManager = \Drupal::service('entity_field.manager');
$fields = $entityManager
->getFieldDefinitions($type, $bundle);
foreach ($fields as $field_name => $field) {
if ($field
->getType() == "image") {
if (!$field instanceof ThirdPartySettingsInterface) {
continue;
}
if ($field
->getThirdPartySetting('simple_image_rotate', 'enable_rotate') == 1) {
$instances = $entity
->get($field_name);
foreach ($instances as $delta => $instance) {
// If rotate angle is indicated.
$values = $instance
->getValue();
if (isset($values["rotate"]) && $values["rotate"]) {
// Load image file.
$fid = $values["target_id"];
$file = File::load($fid);
// Get a new filename with '_r[counter]' suffix.
if (preg_match('#_r([\\d]+)\\.[^.]+$#i', $file
->getFileUri(), $matches)) {
$file_counter = $matches[1];
$new_uri = $file
->getFileUri();
}
else {
$file_counter = 1;
$pos = strrpos($file
->getFileUri(), '.');
$new_uri = substr_replace($file
->getFileUri(), '_r' . $file_counter, $pos, 0);
}
// Increment filename counter if filename is occupied.
while (file_exists($new_uri)) {
$find = '_r' . $file_counter;
$file_counter++;
$replace = '_r' . $file_counter;
$new_uri = str_replace($find, $replace, $new_uri);
}
// Move image file to a new location.
if (file_move($file, $new_uri, 'FILE_EXIST_ERROR')) {
// Update file object after moving file.
$file = File::load($fid);
// Rotate image and save image object.
$image = \Drupal::service('image.factory')
->get($file
->getFileUri());
try {
$image
->rotate($values['rotate']);
if ($image
->save()) {
// Reload image to get new width, height and filesize.
$image = \Drupal::service('image.factory')
->get($file
->getFileUri());
// Update image width and height in entity.
$instance
->set("width", $image
->getWidth());
$instance
->set("height", $image
->getHeight());
// Update file.
$file
->setSize($image
->getFileSize());
$file
->save();
}
} catch (Exception $ex) {
\Drupal::logger('simple_image_rotate')
->notice(t('Problem rotating image: @message', array(
'@message' => $ex
->getMessage(),
)));
}
}
}
}
}
}
}
}