<?php

use Drupal\file\FileInterface;
use Drupal\media\Entity\Media;

/**
 * Creates a media image entity from a file entity.
 *
 * @param \Drupal\file\FileInterface $file
 *   The existing file object.
 * @param string $alt
 *   The image alt text.
 *
 * @return \Drupal\media\Entity\Media
 *   The media entity.
 */
function MODULENAME_create_media_image_entity_from_file(FileInterface $file, $alt = NULL) {
  $media_entity = Media::create([
    'bundle' => 'image',
    'uid' => '1',
    'name' => $file->alt,
    'status' => \Drupal\node\NodeInterface::PUBLISHED,
    'field_media_image' => [
      'target_id' => $file->id(),
      'alt' => $alt,
    ],
  ]);
  $media_entity->save();
  return $media_entity;
}

/**
 * Fetch a media image entity id by uri.
 *
 * @param string $uri
 *   Drupal file system uri.
 *
 * @return bool|int
 *   The found entity id, or FALSE.
 */
function MODULENAME_load_media_image_by_file_uri($uri) {
  $ids = \Drupal::entityQuery('media')
    ->condition('status', 1)
    ->condition('field_media_image.entity.uri', $uri)
    ->execute();

  if (!empty($ids)) {
    return reset($ids);
  }

  return FALSE;
}