Как ограничить загруженные изображения определенным соотношением сторон?
Что я хотел бы сделать, так это, используя поле изображения в ядре, ограничить загружаемые изображения не только по разрешению, но и по соотношению сторон.
Другими словами, изображение должно быть шириной 2:3 по высоте и размером не менее 200 на 300 пикселей.
Я знаю, что стили изображений могут изменять способ просмотра изображения. Меня это не интересует. Скорее, я хочу ограничить загрузку так же, как вы в настоящее время можете установить минимальные/максимальные настройки разрешения, я хочу добавить соотношение сторон.
Я предполагаю, что мне нужно будет написать свой собственный модуль, чтобы добавить новую проверку к проверкам изображения, но, возможно, вы знаете более простой способ.
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;
}