Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove the image resize ratio in OpenCart

I've look everywhere on how I could remove the image resizing in OpenCart but haven't find nothing about that.

I need that it resize but don't keep the ratio. I want the image to be just like I set it.

Here's the resize code in the 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;
    }

What in that code could I remove so the image don't keep it's ratio on resize ?

like image 507
Warface Avatar asked Aug 16 '11 16:08

Warface


1 Answers

First of all I would leave the default resizing tool as in some circumstances it might come in handy. What I did was add two more functions to resize images.

One function that crops an image so it fits the size set in the admin. Now empty white areas are added. This one is great for product lists. The second I added is a function that resizes an image so the biggest dimension will be set to the max size set in the admin. It will be scaled proportionally.

The new files are posted in an OpenCart forum thread.

I named the two extra functions cropsize and onesize. All you have to do is find the used resize functions in the controller and adjust this:

'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')));

The onesize function only needs one parameter so it's up to you but you could use something like this:

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

I hope this will help you getting better images.

like image 72
Jerome Bohg Avatar answered Sep 30 '22 20:09

Jerome Bohg