Signature redo.

This commit is contained in:
flash 2023-06-17 01:14:28 +00:00
parent 9f51cd23c3
commit 1ff5051398
3 changed files with 56 additions and 30 deletions

View file

@ -10,3 +10,4 @@ Backgrounds images:
- bg3.png - イッポンシメジ [pixiv](https://www.pixiv.net/en/artworks/32809110) - bg3.png - イッポンシメジ [pixiv](https://www.pixiv.net/en/artworks/32809110)
- bg4.png - [Minitokyo](http://gallery.minitokyo.net/view/630668) - bg4.png - [Minitokyo](http://gallery.minitokyo.net/view/630668)
- bg5.png - K3rd [Twitter](https://twitter.com/ryousangataK/status/1209809508156837891) [Danbooru](https://danbooru.donmai.us/posts/4379783) - bg5.png - K3rd [Twitter](https://twitter.com/ryousangataK/status/1209809508156837891) [Danbooru](https://danbooru.donmai.us/posts/4379783)
- bg6.png - karory [Danbooru](https://danbooru.donmai.us/posts/900741)

BIN
public/bg/bg6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

View file

@ -1,22 +1,29 @@
<?php <?php
define('SIG_WIDTH', 600); define('SIG_DEBUG', is_file(__DIR__ . '/../.debug'));
define('SIG_WIDTH', 400);
define('SIG_HEIGHT', 100); define('SIG_HEIGHT', 100);
define('SIG_STATIC', '/tmp/sig-img-1HxTH4MQ.png'); define('SIG_STATIC', '/tmp/sig-img-1HxTH4MQ.png');
define('SIG_AGE', 60); define('SIG_AGE', 60);
define('SIG_FOOTER', __DIR__ . '/ex/footer.png'); define('SIG_FOOTER', __DIR__ . '/ex/footer.png');
define('FW_FONT_FAM', __DIR__ . '/ex/Electrolize-Regular.ttf'); define('FW_FONT_FAM', __DIR__ . '/ex/Electrolize-Regular.ttf');
define('FW_FONT_SIZE', 30); define('FW_FONT_SIZE', 26);
define('FW_TEXT', 'flashwave'); define('FW_TEXT', 'flashwave');
define('FA_FONT_FAM', __DIR__ . '/ex/fa-solid-900.ttf'); define('FA_FONT_FAM', __DIR__ . '/ex/fa-solid-900.ttf');
define('NP_FONT_FAM', __DIR__ . '/ex/NotoSansJP-Regular.otf'); define('NP_FONT_FAM', __DIR__ . '/ex/NotoSansJP-Regular.otf');
define('NP_FONT_SIZE', 16); define('NP_FONT_SIZE', 13);
define('NP_FONT_SIZE_SMALL', 9.5);
define('NP_FONT_SIZE_ICON', 17);
define('NP_FILE', '/tmp/sig-np-NGowpEMJ.json'); define('NP_FILE', '/tmp/sig-np-NGowpEMJ.json');
define('NP_URL', 'https://now.flash.moe/get.php?u=flashwave_'); define('NP_URL', 'https://now.flash.moe/get.php?u=flashwave_');
define('NP_COVER', '/tmp/sig-cover-h1coc2SW.png'); define('NP_COVER', '/tmp/sig-cover-h1coc2SW.png');
define('NP_COVER_URL', '/tmp/sig-cover-url-9vXPUgCi.txt'); define('NP_COVER_URL', '/tmp/sig-cover-url-9vXPUgCi.txt');
define('NP_COVER_URL_DEFAULT', 'https://lastfm.freetls.fastly.net/i/u/174s/2a96cbd8b46e442fc41c2b86b821562f.png'); define('NP_COVER_URL_DEFAULT', 'https://lastfm.freetls.fastly.net/i/u/174s/2a96cbd8b46e442fc41c2b86b821562f.png');
define('NP_COVER_DEFAULT', __DIR__ . '/ex/no-cover.png'); define('NP_COVER_DEFAULT', __DIR__ . '/ex/no-cover.png');
define('NP_COVER_PAD', 5);
define('NP_COVER_FRAME', 1);
define('NP_COVER_RES', SIG_HEIGHT - (NP_COVER_PAD * 2));
define('BG_PATH', __DIR__ . '/bg'); define('BG_PATH', __DIR__ . '/bg');
define('BG_IMAGE', 'bg6.png');
$reqMethod = $_SERVER['REQUEST_METHOD']; $reqMethod = $_SERVER['REQUEST_METHOD'];
$reqPath = '/' . trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/'); $reqPath = '/' . trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
@ -49,20 +56,13 @@ if(in_array($reqPath, [
'/album.png', '/album1.png', '/album2.png', '/album.png', '/album1.png', '/album2.png',
'/body.png', '/body1.png', '/body2.png', '/body.png', '/body1.png', '/body2.png',
])) { ])) {
$currentDate = (int)ltrim(date('md'), '0'); if(!SIG_DEBUG && is_file(SIG_STATIC) && time() - filemtime(SIG_STATIC) < SIG_AGE) {
if($currentDate > 1205 && $currentDate < 1227) {
define('BG_IMAGE', 'bg5.png');
} else {
define('BG_IMAGE', 'bg4.png');
}
if(!isset($_GET['_force']) && is_file(SIG_STATIC) && time() - filemtime(SIG_STATIC) < SIG_AGE) {
header('X-Sig-State: cache'); header('X-Sig-State: cache');
$imagick = new Imagick(SIG_STATIC); $imagick = new Imagick(SIG_STATIC);
} else { } else {
header('X-Sig-State: fresh'); header('X-Sig-State: fresh');
$ip_000 = new ImagickPixel('#000'); $ip_000 = new ImagickPixel('#000');
$ip_444 = new ImagickPixel('#444');
$ip_fff = new ImagickPixel('#fff'); $ip_fff = new ImagickPixel('#fff');
$npRaw = file_get_contents(NP_URL); $npRaw = file_get_contents(NP_URL);
@ -94,29 +94,47 @@ if(in_array($reqPath, [
$background->destroy(); $background->destroy();
$footer = new Imagick(SIG_FOOTER); $footer = new Imagick(SIG_FOOTER);
$imagick->compositeImage($footer, Imagick::COMPOSITE_MATHEMATICS, 0, SIG_HEIGHT - $footer->getImageHeight()); $footerHeight = $footer->getImageHeight() - ($nowPlaying ? 0 : 10);
$imagick->compositeImage($footer, Imagick::COMPOSITE_MATHEMATICS, 0, SIG_HEIGHT - $footerHeight);
$footer->destroy(); $footer->destroy();
$imagickDraw = new ImagickDraw;
$imagickDraw->setFillColor($ip_444);
$imagickDraw->setFont(FW_FONT_FAM);
$imagickDraw->setFontSize(FW_FONT_SIZE);
$hasCover = $nowPlaying && is_file(NP_COVER); $hasCover = $nowPlaying && is_file(NP_COVER);
if($hasCover) { if($hasCover) {
$npCover = new Imagick(/*is_file(NP_COVER) ?*/ NP_COVER /*: NP_COVER_DEFAULT*/); $imagickDraw->rectangle(
$npCover->resizeImage(80, 80, Imagick::FILTER_CATROM, 0.9, true); SIG_WIDTH - (NP_COVER_RES + NP_COVER_PAD) - NP_COVER_FRAME,
$imagick->compositeImage($npCover, Imagick::COMPOSITE_COPY, SIG_WIDTH - 90, 10); NP_COVER_PAD - NP_COVER_FRAME,
SIG_WIDTH - (NP_COVER_RES + NP_COVER_PAD) + NP_COVER_RES,
NP_COVER_PAD + NP_COVER_RES,
);
$imagick->drawImage($imagickDraw);
$npCover = new Imagick(NP_COVER);
$npCover->resizeImage(NP_COVER_RES, NP_COVER_RES, Imagick::FILTER_CATROM, 0.9, true);
$imagick->compositeImage($npCover, Imagick::COMPOSITE_COPY, SIG_WIDTH - (NP_COVER_RES + NP_COVER_PAD), NP_COVER_PAD);
$npCover->destroy(); $npCover->destroy();
} }
$imagickDraw = new ImagickDraw;
$imagickDraw->setFillColor(BG_IMAGE === 'bg4.png' ? $ip_000 : $ip_fff); $imagickDraw->setFillColor(BG_IMAGE === 'bg4.png' ? $ip_000 : $ip_fff);
$imagickDraw->setFont(FW_FONT_FAM);
$imagickDraw->setFontSize(FW_FONT_SIZE);
$imagickLogo = new Imagick(); $imagickLogo = new Imagick();
$imagickLogo->newImage($imagick->getImageWidth(), $imagick->getImageHeight(), new ImagickPixel('none'), 'png'); $imagickLogo->newImage($imagick->getImageWidth(), $imagick->getImageHeight(), new ImagickPixel('none'), 'png');
$imagickLogo->annotateImage($imagickDraw, $hasCover ? 367 : 457, 60, 0, FW_TEXT); $imagickLogo->annotateImage(
$imagickDraw,
SIG_WIDTH - (4.8 * FW_FONT_SIZE) - ($hasCover ? (NP_COVER_RES + NP_COVER_PAD + NP_COVER_FRAME) : 0),
SIG_HEIGHT - ($nowPlaying ? 37 : 27),
0,
FW_TEXT
);
$imagickShadow = clone $imagickLogo; $imagickShadow = clone $imagickLogo;
$imagickShadow->shadowImage(80, 5, 0, 0); $imagickShadow->shadowImage(.8, 5, 0, 0);
$imagickShadow->compositeImage($imagickLogo, Imagick::COMPOSITE_OVER, 4, 2); $imagickShadow->compositeImage($imagickLogo, Imagick::COMPOSITE_OVER, 4, 2);
$imagickLogo->destroy(); $imagickLogo->destroy();
@ -124,15 +142,22 @@ if(in_array($reqPath, [
$imagickShadow->destroy(); $imagickShadow->destroy();
$imagickDraw->setFillColor($ip_fff); $imagickDraw->setFillColor($ip_fff);
$imagickDraw->setFont(NP_FONT_FAM);
$imagickDraw->setFontSize(NP_FONT_SIZE);
if($nowPlaying) { if($nowPlaying) {
$imagick->annotateImage($imagickDraw, 40, 91, 0, sprintf('%s - %s', $np[0]->artist->name ?? '', $np[0]->name ?? ''));
$imagickDraw->setFont(FA_FONT_FAM); $imagickDraw->setFont(FA_FONT_FAM);
$imagick->annotateImage($imagickDraw, 10, 91, 0, "\u{f001}"); $imagickDraw->setFontSize(NP_FONT_SIZE_ICON);
$imagick->annotateImage($imagickDraw, 8, SIG_HEIGHT - 9, 0, "\u{f001}");
$imagickDraw->setFont(NP_FONT_FAM);
$imagickDraw->setFontSize(NP_FONT_SIZE);
$imagick->annotateImage($imagickDraw, 32, SIG_HEIGHT - 5, 0, $np[0]->name ?? '');
$imagickDraw->setFontSize(NP_FONT_SIZE_SMALL);
$imagick->annotateImage($imagickDraw, 32, SIG_HEIGHT - 20, 0, $np[0]->artist->name ?? '');
} else { } else {
$imagick->annotateImage($imagickDraw, 10, 91, 0, "If it ain't broke, I'll break it"); $imagickDraw->setFont(NP_FONT_FAM);
$imagickDraw->setFontSize(NP_FONT_SIZE);
$imagick->annotateImage($imagickDraw, 10, SIG_HEIGHT - 5, 0, "If it ain't broke, I'll break it");
} }
file_put_contents(SIG_STATIC, $imagick->getImageBlob()); file_put_contents(SIG_STATIC, $imagick->getImageBlob());
@ -146,11 +171,11 @@ if(in_array($reqPath, [
break; break;
case 'album1': case 'album1':
$imagick->cropImage(SIG_HEIGHT, SIG_HEIGHT - 33, SIG_WIDTH - SIG_HEIGHT, 0); $imagick->cropImage(SIG_HEIGHT, SIG_HEIGHT - $footerHeight, SIG_WIDTH - SIG_HEIGHT, 0);
break; break;
case 'album2': case 'album2':
$imagick->cropImage(SIG_HEIGHT, 33, SIG_WIDTH - SIG_HEIGHT, SIG_HEIGHT - 33); $imagick->cropImage(SIG_HEIGHT, $footerHeight, SIG_WIDTH - SIG_HEIGHT, SIG_HEIGHT - $footerHeight);
break; break;
case 'body': case 'body':
@ -158,11 +183,11 @@ if(in_array($reqPath, [
break; break;
case 'body1': case 'body1':
$imagick->cropImage(SIG_WIDTH - SIG_HEIGHT, SIG_HEIGHT - 33, 0, 0); $imagick->cropImage(SIG_WIDTH - SIG_HEIGHT, SIG_HEIGHT - $footerHeight, 0, 0);
break; break;
case 'body2': case 'body2':
$imagick->cropImage(SIG_WIDTH - SIG_HEIGHT, 33, 0, SIG_HEIGHT - 33); $imagick->cropImage(SIG_WIDTH - SIG_HEIGHT, $footerHeight, 0, SIG_HEIGHT - $footerHeight);
break; break;
default: default: