June 15, 2021

Генератор уникальных изображений

Нужно написать скрипт который сгенерирует уникальные изображения из набора картинок. Скрипт нужен для генерации персонажей.

Есть 4 папки с картинками:
Фон (5 шт)
Одежда (4 шт)
Головной убор (3 шт)
Штаны (2 шт)

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

Что означает уникальность? Это означает то, что к примеру только у 10% от общего количества должна быть красная футболка. У 10% будет панама и т.д.

Лимит создания картинок ограничен Одеждой. Т.е к примеру по черной футболке будут созданы следующие персонажи:

Черная футболка (только)

Черная футболка + шапка
Черная футболка + кепка
Черная футболка + панама

Черная футболка + шапка + черные джинсы
Черная футболка + кепка + черные джинсы
Черная футболка + панама + черные джинсы

Черная футболка + шапка + белые джинсы
Черная футболка + кепка + белые джинсы
Черная футболка + панама + белые джинсы

Черная футболка + черные джинсы
Черная футболка + белые джинсы

При генерации рандомно берем Фон из соответствующей папки. Все комбинации также должны быть уникальными и генерироваться рандомно чтобы не получилось так чтобы все 50 шапок сгенерированы с черной футболкой.

Накладывается сначала Фон -> Одежда -> Головной убор -> Штаны.

После генерации вывести сгенерированное количество изображений по каждому предмету, например:
Черная футболка 12 шт.
Красная футболка 10 шт. и т.д

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

<?php
$backgrounds = array_diff(scandir('./backgrounds/'), array('.','..','.DS_Store'));
$texts = array_diff(scandir('./texts/'), array('.','..','.DS_Store'));
$filters = array_diff(scandir('./filters/'), array('.','..','.DS_Store'));

function nameGenerator($length) {
    return substr(str_shuffle("_0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length);
}

// 
foreach ($backgrounds as $background) {
    // 
    foreach ($texts as $text) {
        // 
        foreach ($filters as $filter) {
            // 
            $layer1 = imagecreatefrompng("./backgrounds/{$background}");
            $layer2 = imagecreatefrompng("./texts/{$text}");
            $layer3 = imagecreatefrompng("./filters/{$filter}");

            // 
            imagealphablending($layer1, true);
            imagesavealpha($layer1, true);

            // 
            imagecopy($layer1, $layer2, 0, 0, 0, 0, 900, 900);
            imagecopy($layer1, $layer3, 0, 0, 0, 0, 900, 900);

            // 
            imagejpeg($layer1, "./results/".nameGenerator(10).".jpg");

            // 
            imagedestroy($layer1);
            imagedestroy($layer2);
            imagedestroy($layer3);
        }
    }
}
?>

комментарий

через терминал php script.php и все. Но надо убедиться сперва что на сервере установлен gd. все фото должны быть в формате пнг