Удалить коэффициент изменения размера изображения в OpenCart

Я везде искал, как я могу удалить изменение размера изображения в OpenCart, но ничего не нашел об этом.

Мне нужно, чтобы он изменил размер, но не сохранял соотношение. Я хочу, чтобы изображение было таким, как я его установил.

Вот код изменения размера в 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) {
            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);

        $image_old = $this->image;
        $this->image = imagecreatetruecolor($width, $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;
    }

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


person Warface    schedule 16.08.2011    source источник


Ответы (1)


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

Одна функция, которая обрезает изображение, чтобы оно соответствовало размеру, установленному в админке. Теперь добавляются пустые белые области. Это отлично подходит для списков продуктов. Второе, что я добавил, — это функция, которая изменяет размер изображения, поэтому для самого большого размера будет установлен максимальный размер, установленный в админке. Он будет масштабироваться пропорционально.

Новые файлы опубликованы в теме форума OpenCart.

Я назвал две дополнительные функции cropsize и onesize. Все, что вам нужно сделать, это найти используемые функции изменения размера в контроллере и настроить это:

'thumb' => $this->model_tool_image
                ->resize($image, 
                         $this->config->get('config_image_category_width'), 
                         $this->config->get('config_image_category_height')));

to:

'thumb' => $this->model_tool_image
                ->cropsize($image, 
                           $this->config->get('config_image_category_width'), 
                           $this->config->get('config_image_category_height')));

Для функции onesize требуется только один параметр, так что это зависит от вас, но вы можете использовать что-то вроде этого:

'popup' => $this->model_tool_image
                ->onesize($result['image'], 
                          $this->config->get('config_image_popup_width'))

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

person Jerome Bohg    schedule 16.08.2011
comment
У меня это отлично работает (OpenCart 1.5.2.1). Спасибо за публикацию этого кода. - person andrew; 22.03.2012
comment
Спасибо, это работает, просто я изменил последний оператор if else в model/tool/image.php, потому что я думаю, что новая версия OpenCart требует этого. Вместо возврата HTTPS_IMAGE . $ новое_изображение; Я использовал return $this-›config-›get('config_ssl') . 'изображение/' . $ новое_изображение; и это сработало. - person nikoloza; 10.07.2014