开发者

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 ?


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜