false, 'error' => 'invalid payload']);
exit;
}
$name = preg_replace('/[^a-zA-Z0-9_\-\.]/', '_', ($inp['name'] ?? 'skin.png'));
$data = $inp['data'];
if (preg_match('#^data:image/[^;]+;base64,#', $data)) {
$data = preg_replace('#^data:image/[^;]+;base64,#', '', $data);
}
$bin = base64_decode($data);
if ($bin === false) {
http_response_code(400);
echo json_encode(['ok' => false, 'error' => 'base64 decode fail']);
exit;
}
if (!is_dir(__DIR__ . '/skins')) @mkdir(__DIR__ . '/skins', 0755, true);
$path = __DIR__ . '/skins/' . $name;
$w = file_put_contents($path, $bin);
if ($w === false) {
http_response_code(500);
echo json_encode(['ok' => false, 'error' => 'write fail']);
} else {
echo json_encode(['ok' => true, 'path' => 'skins/' . $name]);
}
exit;
}
if ($action === 'load') {
$file = __DIR__ . '/skins/skin.png';
if (!file_exists($file)) {
header('Content-Type: application/json; charset=utf-8');
echo json_encode(['ok' => false, 'error' => 'no skin file']);
exit;
}
$b = base64_encode(file_get_contents($file));
header('Content-Type: application/json; charset=utf-8');
echo json_encode(['ok' => true, 'data' => 'data:image/png;base64,' . $b]);
exit;
}
// Else — render page with embedded web component
?>
Minecraft Skin Editor — Widget
Демонстрация виджета (вставляется в блок — стили не влияют на сайт)
- Опубликовано
- 23 Янв 2024
- Просмотров
- 14,615