Делать будем простые авы 100×100 выкачивая готовые файлы картинок при помощи curl на php
Вся работа уже выполнена за нас вот этими ребятами https://thispersondoesnotexist.com/
Каждый вызов данного скрипта будет сохранять в папочку img новую аватарку с названием в виде md5 хеша содержимого скачанного оригинала файла. Таким образом файлы мы получим уникальные, вот в таком виде:

<?php
// for((i=1;i<=5000;i++)); do echo -n "$i - "; wget -qO- http://localhost/ava_generator/generator.php ; echo ; done;
$file = getCURL('https://thispersondoesnotexist.com/image');
if (!$file) {
exit;
}
if (preg_match('#^HTTP/1\.1 403 Forbidden#', $file))
exit('403');
$ex = explode("\r\n\r\n", $file);
$img_data = '';
foreach ($ex as $k => $data) {
unset($ex[$k]);
if (stripos($data, 'content-type: image/') !== false) {
$img_data = implode("\r\n\r\n", $ex);
break;
} else if (preg_match('#^HTTP/(2|1\.1) (404|410)#', $data)) {
$img_data = 404;
break;
} else if (preg_match('#^HTTP/(2|1\.1) 403#', $data)) {
$img_data = 403;
break;
} else if (preg_match('#^HTTP/(2|1\.1) 500#', $data)) {
$img_data = 500;
break;
}
}
if ($img_data == 403) {
exit('403');
}
if ($img_data == 404) {
exit('404');
}
if ($img_data == 500) {
exit('500');
}
if (!$img_data) {
exit('empty img');
}
$im = imagecreatefromstring($img_data);
$im_width = imagesx($im);
$im_height = imagesy($im);
$im_copy = imagecreatetruecolor(100, 100);
imagecopyresampled($im_copy, $im, 0, 0, 0, 0, 100, 100, $im_width, $im_height);
file_exists('img') or mkdir('img', 0755, true);
imagejpeg($im_copy, 'img/'.md5($img_data).'.jpg', 70);
imagedestroy($im_copy);
imagedestroy($im);
echo 'OK';
function getCURL(
$url,
$t = 60,
$header = true
) {
$url = trim($url);
$headers = [
'GET ' . parse_url($url, PHP_URL_PATH) . ' HTTP/1.1',
'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1',
'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8',
'Connection: Keep-Alive'
];
$ua = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 OPR/64.0.3417.92',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36'
];
shuffle($ua);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, $header);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, $ua[0]);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $t);
$file = curl_exec($ch);
curl_close($ch);
return $file;
}
Ну и чтобы не вызывать каждый раз вручную, запилим в командную строку такой код, который сделает нам 5000 вызовов и отчитается по ходу дела.
for((i=1;i<=5000;i++)); do echo -n "$i - "; wget -qO- http://localhost/ava_generator/generator.php ; echo ; done;