Image smart crop

Тема в разделе "OpenCart", создана пользователем rem kwadriga, 10 янв 2013.

  1. rem kwadriga

    rem kwadriga

    Регистрация:
    14 дек 2012
    Сообщения:
    43
    Симпатии:
    3
    Задавал я на форуме вопрос по поводу обрезчика фотографий для opencart, но в целом проблема была решена лишь частично.
    Временное решение не подошло, поэтому пришлось таки взяться за мануалы по стандартным ф-ям php.
    Теперь при загрузке картинок в опенкарт он не добавляет к ним белых полей, а просто обрезает лишнее (елси карнитка слишком широкая - бока, если слишком высокая - верх и низ). При этом делает её квадратной. Прошу заметить, что отображаемые при этом картинки на страничках отнюдь не выглядят квадратными: параметры их вида вы настраиваете в админке.
    Так вот, что нужно сделать? Берём файл system/library/image.php, находим в его коде метод public function resize()
    И меняем её код на следющее:
    Код:
    public function resize($width = 0, $height = 0) {
            if (!$this->info['width'] || !$this->info['height']) {
                return;
            }
    
            $scale = max($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);
    
            $new_width=$width;
            $new_height=$height;
    
            $src_width=$new_width/$scale;
            $src_height=$new_height/$scale;
    
            $src_x=($this->info['width']-$src_width)/2;
            $src_y=($this->info['height']-$src_height)/2;
    
            $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, 0, 0, $src_x, $src_y, $new_width, $new_height, $src_width, $src_height);
            //imagecopyresampled($this->image, $image_old, $xpos, $ypos, 0, 0, $new_width, $new_height, $new_width, $new_height);
            imagedestroy($image_old);
    
            //$this->info['width']  = $width;
            // $this->info['height'] = $height;
            $this->info['width']  = $new_width;
            $this->info['height'] = $new_height;
        }
     
  2. non@me

    non@me

    Регистрация:
    21 ноя 2012
    Сообщения:
    77
    Симпатии:
    109
    А для чего это пример можно посмотреть?
     
  3. alexsofdev

    alexsofdev

    Регистрация:
    13 янв 2013
    Сообщения:
    239
    Симпатии:
    46
    а почему не заменить инструкцию xml-файликом для vqMod?
     
  4. aliwya

    aliwya

    Регистрация:
    5 июл 2013
    Сообщения:
    70
    Симпатии:
    70
    как сделать что бы некоторые папки нересайзило а показывало как есть?