6

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 ?

4

1 に答える 1

19

まず、状況によっては便利な場合があるため、デフォルトのサイズ変更ツールをそのままにしておきます。私がしたことは、画像のサイズを変更するための関数をさらに 2 つ追加することでした。

管理者が設定したサイズに合うように画像をトリミングする 1 つの関数。空の白い領域が追加されました。これは製品リストに最適です。2 番目に追加したのは、画像のサイズを変更する機能で、最大サイズが管理者で設定された最大サイズに設定されます。比例してスケーリングされます。

新しいファイルはOpenCart フォーラム スレッド に投稿されます

この 2 つの追加関数には、cropsizeonesizeという名前を付けました。コントローラーで使用されているサイズ変更関数を見つけて、これを調整するだけです。

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

に:

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

onesize 関数は 1 つのパラメーターしか必要としないため、それはあなた次第ですが、次のようなものを使用できます。

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

これがより良い画像を得るのに役立つことを願っています。

于 2011-08-16T17:59:41.153 に答える