Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

изменение алгоритма создания картинок (миниатюр и т. п.)


 Поделиться

Рекомендованные сообщения

Есть потребность и желание изменить алгоритм генерирования изображений.

версия магазина ocStore1.5.4.1

Для меня не вполне прозрачен алгоритм и логика создания миниатюр изображений.

поясните, знатоки, пожалуйста.

Итак, в настройках задан размер изображения (для товаров в списке, например) 500 на 220.

исходное изображение имеет размер 500х99. В списке товаров вижу, что данное изображение не масштабируется и белые поля сверху и снизу не добавляются.

но стоит только в настройках поставить 499х220 или 501х220 как сразу же генерируется картинка с белыми полями сверху и снизу.

Почему сделано именно так? Меня такой алгоритм никак не устраивает.

Где можно отменить добавление этих белых полей? image.php?

И возможно ли вместо белых полей для файлов GIF и PNG добавлять прозрачные поля?

спасибо.

post-7087-0-98868300-1356173387_thumb.png

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

В версии 1.5.4.1, вероятно, имеется ошибка в алгоритме.

для файлов GIF изменения происходят так как написано в начале темы.

а вот для файлов PNG (с прозрачным фоном) происходит добавление сверху и снизу пустых полей (прозрачных) в любом случае, даже если ширина исходника = заданной ширине для отображения, но высота исходной картинки ниже требуемой в настройках (в админке).

убрал для своих нужд добавление пустых полей по краям картинки, например, сверху и снизу.

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

сделал правки в коде 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;
}

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

  • 1 месяц спустя...

Не подскажете, как это реализовать, для пропорции с одинаковой высотой, а шириной разной, под ос_1.5.2.1 ?

Вы сделали под ширину, а мне нужно под высоту.

Ссылка на комментарий
Поделиться на других сайтах


Не подскажете, как это реализовать, для пропорции с одинаковой высотой, а шириной разной, под ос_1.5.2.1 ?

Вы сделали под ширину, а мне нужно под высоту.

я делал под 1.5.4.1 версию. на предыдущих версиях несколько отличается код, но суть остается прежней.

вам в админке нужно задать ограничение по высоте, т. е. задать ту высоту, которую желаете видеть, а ограничение по ширине сделать побольше, например, 500 или 800. соответственно у вас будет срабатывать только ограничение по высоте. поля не будут добавляться. для того чтобы они не добавлялись сделайте изменение кода, приведенное мною выше.

Ссылка на комментарий
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.