Modx. phpThumbOn / phpThumbOf режет в квадрат при указании только ширины или высоты
написал сниппет, который собирает фото из указанной папки, обрезает фото (phpThumbOn) в нужный размер и делает из нее галерею на Fancybox:
<?php
// requires phpThumbOn
// OPTIONS
// &folder
// &justified (default = null)
// &fancybox (default = default)
// &w (default = 200)
// &h (default = 300)
// &W (default = null)
// &H (default = null)
$folder = str_replace("assets/","",$folder);
$path = "assets/$folder";
$flag = false;
$dir_i = (is_dir($path) && is_readable($path)) ? new DirectoryIterator($path) : array();
$fancyboxAttr = "";
if ($justified == 1) echo '<div class="gridzy">';
// On/Off Fancybox
if ($fancybox == 1) {
if (!empty($id)) $fancyboxAttr = "data-fancybox='".$id."'";
else $fancyboxAttr = "data-fancybox='default'";
}
foreach ($dir_i as $f) {
if($f->isFile() && $f->isReadable()){
$flag = true;
$input = $path.'/'.$f->getFilename();
// THUMBNAIL RESIZE
if (empty($w) && empty($h)) {$options = "w=300&h=200&zc=1&q=90";}
else {
if (empty($w) || empty($h)) {
if (empty($w)) {$options = "h=".$h."&zc=1&q=90";}
else if (empty($h)) {$options = "w=".$w."&zc=1&q=90";}
} else $options = "w=".$w."&h=".$h."&zc=1&q=90";
}
$thumbnail = $modx->runSnippet("phpthumbon",array('input' => $input, 'options' => $options));
if ($fancybox == 1) {
// FULL RESIZE
if (!empty($W) || !empty($H)) {
if (empty($W)) {$Options = "h=".$H."&zc=1&q=90";}
else if (empty($H)) {$Options = "w=".$W."&zc=1&q=90";}
else $Options = "w=".$W."&h=".$H."&zc=1&q=90";
$input = $modx->runSnippet("phpthumbon",array('input' => $input, 'options' => $Options));
}
}
if ($fancybox == 1) {echo '<a '.$fancyboxAttr.' href="'.$input.'"><img src="'.$thumbnail.'"> </a>';echo "\n";}
else {echo '<img src="'.$thumbnail.'">';echo "\n";}
}
}
if ($justified == 1) echo '</div>';
if(!$flag) {
echo '<img src="assets/images/no_image.jpg">';
}
На локалке (OpenServer / php 7.4) работает идеально. На хостинге (пробовал nic.ru и fozzy.com) проблема в том, что если указать для изменения размера только ширину или высоту, то phpThumbOn режет по обеим сторонам, т.е. в квадрат, в то время, как должен обрезать только одну сторону и сохранять пропорции исходного изображения.
imagick и GD включены, пробовал на всех версиях пхп от 5.6 до 7.4.