Как ограничить загруженные изображения определенным соотношением сторон?


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

Другими словами, изображение должно быть шириной 2:3 по высоте и размером не менее 200 на 300 пикселей.

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

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

Author: wiifm, 2012-11-14

1 answers

Мой совет состоял бы в том, чтобы внедрить пользовательский валидатор файлов.

Чтобы узнать, как они используются при сохранении файлов, вы можете проверить file_save_upload. Для примера реализации, которая очень близка к тому, чего вы хотите достичь, ознакомьтесь с file_validate_image_resolution.

Моя супер быстрая попытка сделать это

/**
 * Validates an image upload as having a particular aspect ratio
 *
 * @param $file
 *   - the uploaded file
 * @param $aspect_ratio
 *   - the apect ratio in the format [WIDTH]:[HEIGHT]. E.g. '3:2'
 */
function file_validate_image_aspect(stdClass $file, $aspect_ratio = 0) {
  $errors = array();

  // Check first that the file is an image.
  if ($info = image_get_info($file->uri)) {
    if ($aspect_ratio) {
      // Check that it is smaller than the given dimensions.
      list($width, $height) = explode(':', $aspect_ratio);
      if ($width * $info['height'] != $height * $info['width']) {
        $errors[] = t('The image is the wrong aspect ratio; the aspect ratio needed is %ratio.', array('%ratio' => $aspect_ratio));
      }
    }
  }

  return $errors;
}
 7
Author: wiifm, 2014-08-04 19:05:17