small(320), 6 -> medium(600) * @return string */ public static function url(?string $filePath, ?int $id = null, ?string $ext = null, int $size = 6): string { return ThumbnailService::url($filePath, $id, $ext, $size); } /** * Build a new-style thumbnail URL using hash and extension. * Example: http://files.skinbase.org/md/43/f8/43f87a...360.webp * * @param string|null $hash * @param string|null $ext * @param string $sizeKey One of sm, md, lg, xl * @return string|null */ public static function fromHash(?string $hash, ?string $ext, string $sizeKey = 'md'): ?string { return ThumbnailService::fromHash($hash, $ext, $sizeKey); } /** * Build a simple srcset for responsive thumbnails. * Uses sm (320w) and md (600w) by default to match legacy sizes. * * @param string|null $hash * @param string|null $ext * @return string|null */ public static function srcsetFromHash(?string $hash, ?string $ext): ?string { return ThumbnailService::srcsetFromHash($hash, $ext); } /** * Return encoded id string using legacy algorithm or fallback base62. */ public static function encodeId(int $id): string { if (class_exists('\App\Services\LegacyService') && method_exists('\App\Services\LegacyService', 'encode')) { return \App\Services\LegacyService::encode($id); } return self::base62encode($id); } private static function base62encode(int $val, int $base = 62, string $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'): string { $str = ''; if ($val < 0) return $str; do { $i = $val % $base; $str = $chars[$i] . $str; $val = intdiv($val - $i, $base); } while ($val > 0); return $str; } }