Как вы знаете в опенкарте есть система вывода миниатюр изображений. Указываешь длину и ширину и получаешь миниатюру. Типа такого вызова в контроллере:
$thumb = $this->model_tool_image->resize('image.jpg', 200,200);
Но сделано так, что если у тебя исходная картинка широкая, а надо получить узкую, или наоборот, то делаются поля (белые или прозрачные, в зав. от типа картинки, jpg или png)
Для сравнения, в WP, где также есть подобная система, картинка масштабируется и урезается под нужные размеры. Поля не делаются.Вот иногда в опенкарте требуется именно чтобы не создавались поля.
Миниатюры делаются в файле /system/library/image.php
Там есть публичная функция resize, ее надо чуть подправить:
public function resize($width = 0, $height = 0, $default = '', $fit = false) {
if (!$this->width || !$this->height) {
return;
}
$xpos = 0;
$ypos = 0;
$scale = 1;
$scale_w = $width / $this->width;
$scale_h = $height / $this->height;
if ($default == 'w') {
$scale = $scale_w;
} elseif ($default == 'h') {
$scale = $scale_h;
} else {
if ($fit) {
$scale = max($scale_w, $scale_h);
} else {
$scale = min($scale_w, $scale_h);
}
}
if ($scale == 1 && $scale_h == $scale_w && $this->mime != 'image/png') {
return;
}
...
я добавил новый параметр fit, который по умолчанию false и все работает, как обычно. Если он true - поля не создаются, а просто обрезается лишнее.Также надо добавить этот параметр в файл /catalog/model/tool/image.php
public function resize($filename, $width, $height, $fit = false) {
И там внутри этой функции найти вызов
$image->resize($width, $height, '' , $fit);
и тоже добавить fit
Таким образом, вызов в контроллере будет выглядеть так:
$thumb = $this->model_tool_image->resize('image.jpg', 200,200, true); // если надо не создавать полей