Обрезание фотографий

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

  1. rem kwadriga

    rem kwadriga

    Регистрация:
    14 дек 2012
    Сообщения:
    43
    Симпатии:
    3
    Уже не помню какой час бьюсь над глупой задачей: как отучить opencart добавлять белые поля, если загружаемой картинке не хватает высоты или ширины.
    Знаю, что заниматеся этим "вредительством" ф-я resize() из библиотеки, но не хочется ничего в ней менять, потому что потом она перестанет работать так, как работает во всех случаях. А мне нужно, чтобы в том случае, когда загружается фотография для категории или товара, resize не добавлял белых пробелов, где не хватает размерности, а просто обрезал лишнее от фотографии, не влезающей в формат и увеличивал формат, если картинка меньше формата.

    Буду благодарен за помощь.
     
  2. cobalt

    cobalt Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    278
    Симпатии:
    127
    Не уверен, что это то, что Вам надо, но есть вот такое решение:
    В файле 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 && $this->info['mime'] != 'image/png') {
    						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);
    				$xpos = 0;
    				$ypos = 0;
    									 
    				  $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, $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;
    				$this->info['width']  = $new_width;
    				$this->info['height'] = $new_height;
    		}
     
    rem kwadriga нравится это.
  3. rem kwadriga

    rem kwadriga

    Регистрация:
    14 дек 2012
    Сообщения:
    43
    Симпатии:
    3
    Да, работает. Не обрезает, но сохраняет файл, пропорциональный загружаемому. Все изменения размера на сайте также работают, единственное что слегка неудобно, это то, что в админке и в доп. картинках к товару загруженное выходит с реальными пропорциями. Что, правда, не сильно мешает.
    В целом, хорошее решение. Спасибо.

    П. С. Надо учить стандартные ф-ии ПХП. :smile:[/quote]