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

Масштабирование миниатюр изображений

У вас есть идея для расширения функциональности phpBB 3.0.x? Расскажите о ней здесь!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
iphobos
phpBB 1.0.0
Сообщения: 1
Стаж: 13 лет 5 месяцев
Благодарил (а): 2 раза

Масштабирование миниатюр изображений

Сообщение iphobos »

Всем привет! Гуру, наткнулся на статейку в интернетах, описывающую создание скрипта "сложного масштабирования изображений". Возможно ли данный способ применить к phpbb3 для масштабирования миниатюр изображений?

Было бы не плохо сделать такой мод для форума. Чля чего? На своем форуме я по инструкции nekstati сделал расположение превьюшек по горизонтали, задал размер миниатюры 200px, получилось что при добавлении к примеру шести изображений, в сообщении миниатюры отображаются по три в ряд. В случае если высота картинок разная, нарушается расположение миниатюр, т.е. они будут располагаться в допистим, три ряда, 1 - 3 картинки, 2 - две, 3 - одна. В принципе то мелочь, но не приятно. Да и вообще одинаковые, не зависимые от оригинала миниатюры смотрелись бы более аккуратно. Что скажете, может есть уже готовые решения?

Вот собственно, что у меня получается:
Без имени-1.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 13177
Стаж: 15 лет 2 месяца
Благодарил (а): 236 раз
Поблагодарили: 3754 раза

Re: Масштабирование миниатюр изображений

Сообщение Татьяна5 »

Вырезает квадраты по размеру, указанному в админке
Работает только для GD

includes/functions_posting.php
Найти

Код: Выделить всё

if ($width > $height)
	{
		return array(
			round($width * ($max_width / $width)),
			round($height * ($max_width / $width))
		);
	}
	else
	{
		return array(
			round($width * ($max_width / $height)),
			round($height * ($max_width / $height))
		);
	}
Заменить на

Код: Выделить всё

if ($width > $height)
	{
		return array(
			//round($width * ($max_width / $width)),
			//round($height * ($max_width / $width))
			round($width * ($max_width / $height)),
			round($max_width)
		);
	}
	else
	{
		return array(
			//round($width * ($max_width / $height)),
			//round($height * ($max_width / $height))
			round($max_width),
			round($height * ($max_width / $width))
		);
	}
Найти

Код: Выделить всё

			if ($type['version'] == 1)
			{
				$new_image = imagecreate($new_width, $new_height);

				if ($new_image === false)
				{
					return false;
				}

				imagecopyresized($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
			}
			else
			{
				$new_image = imagecreatetruecolor($new_width, $new_height);

				if ($new_image === false)
				{
					return false;
				}

				// Preserve alpha transparency (png for example)
				@imagealphablending($new_image, false);
				@imagesavealpha($new_image, true);

				imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
			}
Заменить на

Код: Выделить всё

			if ($type['version'] == 1)
			{
				$new_image1 = imagecreate($new_width, $new_height);

				if ($new_image1 === false)
				{
					return false;
				}

				imagecopyresized($new_image1, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
				
				$new_image = imagecreate(min($new_width, $new_height), min($new_width, $new_height));
				imagecopy($new_image, $new_image1, 0, 0, ($new_width > $new_height) ? round((max($new_width,$new_height)-min($new_width,$new_height))/2) : 0, 0, min($new_width, $new_height), min($new_width, $new_height));
			}
			else
			{
				$new_image1 = imagecreatetruecolor($new_width, $new_height);

				if ($new_image1 === false)
				{
					return false;
				}

				// Preserve alpha transparency (png for example)
				@imagealphablending($new_image1, false);
				@imagesavealpha($new_image1, true);

				imagecopyresampled($new_image1, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
				
				$new_image = imagecreatetruecolor(min($new_width, $new_height), min($new_width, $new_height));
		        
				// Preserve alpha transparency (png for example)
				@imagealphablending($new_image, false);
				@imagesavealpha($new_image, true);
				
				imagecopy($new_image, $new_image1, 0, 0, ($new_width > $new_height) ? round((max($new_width,$new_height)-min($new_width,$new_height))/2) : 0, 0, min($new_width, $new_height), min($new_width, $new_height));
			}

Вернуться в «Запросы модов для phpBB 3.0.x»