Уже не помню какой час бьюсь над глупой задачей: как отучить opencart добавлять белые поля, если загружаемой картинке не хватает высоты или ширины. Знаю, что заниматеся этим "вредительством" ф-я resize() из библиотеки, но не хочется ничего в ней менять, потому что потом она перестанет работать так, как работает во всех случаях. А мне нужно, чтобы в том случае, когда загружается фотография для категории или товара, resize не добавлял белых пробелов, где не хватает размерности, а просто обрезал лишнее от фотографии, не влезающей в формат и увеличивал формат, если картинка меньше формата. Буду благодарен за помощь.
Не уверен, что это то, что Вам надо, но есть вот такое решение: В файле system/library/image.php сделаны изменения: Код: public function resize($width = 0, $height = 0) { if (!$this->info['width'] || !$this->info['height']) { return; } $xpos = 0; $ypos = 0; $scale = min($width / $this->info['width'], $height / $this->info['height']); if ($scale == 1 && $this->info['mime'] != 'image/png') { return; } $new_width = (int)($this->info['width'] * $scale); $new_height = (int)($this->info['height'] * $scale); //$xpos = (int)(($width - $new_width) / 2); //$ypos = (int)(($height - $new_height) / 2); $xpos = 0; $ypos = 0; $image_old = $this->image; //$this->image = imagecreatetruecolor($width, $height); // преобразуем, сохранив пропорции $this->image = imagecreatetruecolor($new_width, $new_height); if (isset($this->info['mime']) && $this->info['mime'] == 'image/png') { imagealphablending($this->image, false); imagesavealpha($this->image, true); $background = imagecolorallocatealpha($this->image, 255, 255, 255, 127); imagecolortransparent($this->image, $background); } else { $background = imagecolorallocate($this->image, 255, 255, 255); } // не будем создавать новый прямоугольник //imagefilledrectangle($this->image, 0, 0, $width, $height, $background); imagecopyresampled($this->image, $image_old, $xpos, $ypos, 0, 0, $new_width, $new_height, $this->info['width'], $this->info['height']); imagedestroy($image_old); //$this->info['width'] = $width; // $this->info['height'] = $height; $this->info['width'] = $new_width; $this->info['height'] = $new_height; }
Да, работает. Не обрезает, но сохраняет файл, пропорциональный загружаемому. Все изменения размера на сайте также работают, единственное что слегка неудобно, это то, что в админке и в доп. картинках к товару загруженное выходит с реальными пропорциями. Что, правда, не сильно мешает. В целом, хорошее решение. Спасибо. П. С. Надо учить стандартные ф-ии ПХП. [/quote]