Рейтинг:0

Есть ли простой способ получить ссылки на производные изображения?

флаг by

Я работаю со сложными стилями изображений и хотел бы иметь возможность быстро загружать все различные производные, чтобы проверить, правильно ли они обрабатываются.

Но я не вижу, как легко получить ссылки. Лучшее, что я могу придумать, это открыть узел в JSONAPI и с патчем от https://www.drupal.org/project/drupal/issues/2825812, получая URL-адреса производных от него.

Это там что-то проще?

Еще во времена Drupal 6 модуль Image показывал ссылки на все размеры на самом узле изображения.

Рейтинг:1
флаг cn

Вы можете получить эту информацию с помощью следующего кода:

$original_uri = 'public://images/image.jpg';

$styles = \Drupal::entityTypeManager()->getStorage('image_style')->loadMultiple();

$urls = array_map (функция ($ стиль) использовать ($ original_uri) {
  вернуть $style->buildUri($original_uri);
}, $стили);

$urls теперь должен содержать список URL-адресов на основе оригинала, по одному для каждого стиля изображения в системе.

Рейтинг:1
флаг us

Чтобы получить производный URI изображения для изображения, к которому применяется определенный стиль изображения, вы можете использовать следующий код.

// Загрузите экземпляр ImageStyle в $image_style, например, с помощью
// $image_style = ImageStyle::load($id).
// $image_uri — это путь/URI изображения, к которому применяется стиль. 
если ($image_style->supportsUri($image_uri)) {
  $derivative_uri = $style->buildUri($image_uri);
}

Имейте в виду, что производные изображения создаются только тогда, когда URL возвращается из $image_style->сборкаURL($image_uri) запрашивается (из браузера). Создание URI (или URL) не создает производное изображение; он возвращает URI (URL) для изображения, которое еще не может существовать.

Чтобы проверить производное изображение, можно создать код, аналогичный тому, который использовался из ImageStyleDownloadController::доставить() должен быть использован.

если ($image_style->supportsUri($image_uri)) {
  $derivative_uri = $style->buildUri($image_uri);

  если (!file_exists($image_uri)) {
    $path_info = pathinfo($image_uri);
    $converted_image_uri = $path_info['имя_каталога'] . DIRECTORY_SEPARATOR . $path_info['имя файла'];
    если (file_exists($converted_image_uri)) {
      $image_uri = $converted_image_uri;
    }
  }

  $success = file_exists($derivative_uri) || $image_style->createDerivative($image_uri, $derivative_uri);

  если ($ успех) {
    $image = Drupal::service('image.factory')->get($derivative_uri);
    $uri = $image->getSource();
  }
}
флаг by
Спасибо! Однако я имел в виду, есть ли способ вывести их в пользовательском интерфейсе. Редакторы контента, например, могут захотеть быстро проверить производные изображения.
apaderno avatar
флаг us
Я не знаю ни одного модуля, который делает это. Пользовательский модуль, использующий предложенный мной код, может отображать URI на странице.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.