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' ]) ); } }