You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

134 lines
4.0 KiB

<?php
/**
* Created by Error202
* Date: 03.10.2017
*/
namespace core\components\favicon;
use Yii;
use yii\imagine\Image;
use yii\web\View;
class FaviconGenerator
{
public string $originPath;
public string $cachePath;
public function __construct()
{
$this->originPath = Yii::getAlias('@staticRoot') . '/origin/favicon';
$this->cachePath = Yii::getAlias('@staticRoot') . '/cache/favicon';
}
public function generateIcons()
{
if (!file_exists($this->originPath)) {
mkdir($this->originPath, 0777, true);
}
if (!file_exists($this->cachePath)) {
mkdir($this->cachePath, 0777, true);
}
if (file_exists($this->originPath . '/favicon.png')) {
$this->generateFavicons();
$this->generateAndroid();
$this->generateApple();
$this->generateMicrosoft();
$this->generateManifestJson();
$this->generateBrowserConfigXml();
}
}
protected function generateFavicons()
{
foreach ([16, 32, 96, 194] as $s) {
$filename = sprintf('favicon-%sx%s.png', $s, $s);
Image::thumbnail($this->originPath . '/favicon.png', $s, $s)
->save($this->cachePath . '/' . $filename);
}
}
protected function generateAndroid()
{
foreach ([36, 48, 72, 96, 144, 192] as $s) {
$filename = sprintf('android-chrome-%sx%s.png', $s, $s);
Image::thumbnail($this->originPath . '/favicon.png', $s, $s)
->save($this->cachePath . '/' . $filename);
}
}
protected function generateApple()
{
foreach ([57, 60, 72, 76, 114, 120, 144, 152, 180] as $s) {
$filename = sprintf('apple-touch-icon-%sx%s.png', $s, $s);
Image::thumbnail($this->originPath . '/favicon.png', $s, $s)
->save($this->cachePath . '/' . $filename);
if ($s == 180) {
$filename = sprintf('apple-touch-icon.png', $s, $s);
Image::thumbnail($this->originPath . '/favicon.png', $s, $s)
->save($this->cachePath . '/' . $filename);
}
}
}
protected function generateMicrosoft()
{
foreach ([70, 150, 270, 310] as $s) {
$filename = sprintf('mstile-%sx%s.png', $s, $s);
Image::thumbnail($this->originPath . '/favicon.png', $s, $s)
->save($this->cachePath . '/' . $filename);
}
}
protected function generateManifestJson()
{
$cacheUrl = Yii::getAlias('@static') . '/cache';
// frontend
file_put_contents(
Yii::getAlias('@frontend/web') . '/' . 'manifest.json',
(new View())->render('@core/components/favicon/manifest.php', [
'appName' => Yii::$app->params['settings']['site']['name'] ?? Yii::$app->name,
'iconPath' => $cacheUrl . '/favicon'
])
);
// backend
file_put_contents(
Yii::getAlias('@backend/web') . '/' . 'manifest.json',
(new View())->render('@core/components/favicon/manifest.php', [
'appName' => Yii::$app->params['settings']['site']['name'] ?? Yii::$app->name,
'iconPath' => $cacheUrl . '/favicon'
])
);
}
protected function generateBrowserConfigXml()
{
$cacheUrl = Yii::getAlias('@static') . '/cache';
// frontend
file_put_contents(
Yii::getAlias('@frontend/web') . '/' . 'browserconfig.xml',
(new View())->render('@core/components/favicon/browserconfig.php', [
'iconPath' => $cacheUrl . '/favicon'
])
);
// backend
file_put_contents(
Yii::getAlias('@backend/web') . '/' . 'browserconfig.xml',
(new View())->render('@core/components/favicon/browserconfig.php', [
'iconPath' => $cacheUrl . '/favicon'
])
);
}
}