Создаём уникальные аватарки из нейронной сети

Делать будем простые авы 100×100 выкачивая готовые файлы картинок при помощи curl на php

Вся работа уже выполнена за нас вот этими ребятами https://thispersondoesnotexist.com/

Каждый вызов данного скрипта будет сохранять в папочку img новую аватарку с названием в виде md5 хеша содержимого скачанного оригинала файла. Таким образом файлы мы получим уникальные, вот в таком виде:

Уникальные аватарки 100x100
Уникальные аватарки 100×100
<?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;

 

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *