<MyRusakov.ru />

WordPress 5 с Нуля до Гуру

WordPress 5 с Нуля до Гуру

Этот курс даст Вам всю необходимую теорию по созданию самых разных сайтов на самой популярной в мире CMS - WordPress. Помимо всей необходимой теории, Вы также получите и всю практику, так как прямо в курсе с нуля создаётся полноценный сайт, который затем выкладывается в Интернет. И всё это прямо на Ваших глазах.

Помимо уроков к курсу идут упражнения для закрепления материала.

Сам курс проходится буквально за вечер, а ценнейшие знания остаются с Вами навсегда!

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Форум сайта MyRusakov.ru

Простой коллаж фотографий
07.12.2018 17:05:53 Простой коллаж фотографий Сообщение #1
Sesuriti

Sesuriti

Продвинутый

Продвинутый

Дата регистрации:
24.04.2013 16:20:53

Сообщений: 70

Привет! Помогите доработать скрипт генерации фото коллажа.

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

Но мне нужно, что бы можно было делать примерно так как на скриншоте
Изображение
Профиль Ответить
07.12.2018 17:09:09 Простой коллаж фотографий Сообщение #2
Sesuriti

Sesuriti

Продвинутый

Продвинутый

Дата регистрации:
24.04.2013 16:20:53

Сообщений: 70

$max_size = $this->max_size;
$widths = array();
$heights = array();
foreach ($images as $image) {
$source = $this->createFrom($image);
$heights[] = imagesy($source);
}
$averageRowHeight = array_sum($heights) / count($heights);
foreach ($images as $image) {
$source = $this->createFrom($image);
$width = imagesx($source);
$height = imagesy($source);
$widths[] = round($width / $height * $averageRowHeight);
}
$gap = isset($settings['cover_gap']) ? $settings['cover_gap'] : 50; // Отступы между картинками
$index = 0;
$rowNumber = 0;
$rows = array();
$reduceArraySum = ceil(array_reduce($widths, 'reduceArraySum' / $max_size);
$max_len = (count($widths) > 4) ? 3 : 2;
$rows = array_chunk($widths, $max_len);
$areaWidth = 0;
$areaHeight = 0;
$sizes = array();
for ($i = 0; $i < count($rows); $i++) {
if (empty($rows[$i])) continue;
$rowWidth = 0; $rowHeight = 0;
for ($j = 0; $j < count($rows[$i]); $j++) {
if (empty($rows[$i][$j])) continue;
$k = ($max_size - (count($rows[$i]) - 1)) / array_reduce($rows[$i], 'reduceArraySum';
$width = $rows[$i][$j] * $k;
$height = $k * $averageRowHeight;
$sizes[$i][$j] = array($width, $height);

$rowWidth += $width;
if ($rowHeight < $height) {
$rowHeight = $height;
}
}
if ($areaWidth < $rowWidth) {
$areaWidth = $rowWidth + $gap;
} $areaHeight += $rowHeight + $gap;
}
$areaWidth = floor($areaWidth);
$areaHeight = floor($areaHeight);
$collage = imagecreatetruecolor($areaWidth, $areaHeight);
$r = 255; $g = 255; $b = 255;
if (!empty($settings['background'])) {
list($r, $g, $b) = $this->hex2rgb($settings['background']);
}
$bg = imagecolorallocate($collage, $r, $g, $b);
imagefill($collage, 0, 0, $bg);
$n = 0; $x = $gap / 2; $y = $gap / 2;
foreach ($sizes as $i => $arRowSize) {
foreach ($arRowSize as $j => $arCellSize) {
if (empty($images[$n])) continue;
$filename = $images[$n];
$image = $this->createFrom($filename);
$origWidth = imagesx($image);
$origHeight = imagesy($image);
list($newWidth, $newHeight) = $arCellSize;
imagecopyresampled($collage, $image, $x, $y, 0, 0, $newWidth, $newHeight, $origWidth, $origHeight);
imagedestroy($image);
$n++;
$x += $newWidth;
}
$x = 0;
$y += $newHeight;
}
$collagename = "collage.jpg";
$collagepath = $image_path.$collagename;
imagejpeg($collage, $collagepath, 100);
imagedestroy($collage);
Профиль Ответить