78 lines
2.6 KiB
PowerShell
78 lines
2.6 KiB
PowerShell
param(
|
|
[string]$ImportSource
|
|
)
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
Set-StrictMode -Version Latest
|
|
|
|
$projectRoot = (Resolve-Path -LiteralPath (Join-Path $PSScriptRoot '..')).Path
|
|
$sourceDirectory = Join-Path $projectRoot 'src\assets'
|
|
$sourcePath = Join-Path $sourceDirectory 'pwa-icon-source.png'
|
|
$iconDirectory = Join-Path $projectRoot 'public\icons'
|
|
|
|
New-Item -ItemType Directory -Path $sourceDirectory -Force | Out-Null
|
|
New-Item -ItemType Directory -Path $iconDirectory -Force | Out-Null
|
|
|
|
if ($ImportSource) {
|
|
$resolvedImportSource = (Resolve-Path -LiteralPath $ImportSource).Path
|
|
Copy-Item -LiteralPath $resolvedImportSource -Destination $sourcePath -Force
|
|
}
|
|
|
|
if (-not (Test-Path -LiteralPath $sourcePath -PathType Leaf)) {
|
|
throw "找不到图标源文件:$sourcePath"
|
|
}
|
|
|
|
Add-Type -AssemblyName System.Drawing
|
|
|
|
function Export-SquareIcon {
|
|
param(
|
|
[Parameter(Mandatory)]
|
|
[System.Drawing.Image]$SourceImage,
|
|
[Parameter(Mandatory)]
|
|
[int]$Size,
|
|
[Parameter(Mandatory)]
|
|
[string]$OutputPath
|
|
)
|
|
|
|
$side = [Math]::Min($SourceImage.Width, $SourceImage.Height)
|
|
$sourceX = [Math]::Floor(($SourceImage.Width - $side) / 2)
|
|
$sourceY = [Math]::Floor(($SourceImage.Height - $side) / 2)
|
|
$sourceRectangle = [System.Drawing.Rectangle]::new($sourceX, $sourceY, $side, $side)
|
|
$targetRectangle = [System.Drawing.Rectangle]::new(0, 0, $Size, $Size)
|
|
$bitmap = [System.Drawing.Bitmap]::new($Size, $Size)
|
|
$graphics = [System.Drawing.Graphics]::FromImage($bitmap)
|
|
|
|
try {
|
|
$graphics.CompositingMode = [System.Drawing.Drawing2D.CompositingMode]::SourceCopy
|
|
$graphics.CompositingQuality = [System.Drawing.Drawing2D.CompositingQuality]::HighQuality
|
|
$graphics.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic
|
|
$graphics.PixelOffsetMode = [System.Drawing.Drawing2D.PixelOffsetMode]::HighQuality
|
|
$graphics.SmoothingMode = [System.Drawing.Drawing2D.SmoothingMode]::HighQuality
|
|
$graphics.DrawImage($SourceImage, $targetRectangle, $sourceRectangle, [System.Drawing.GraphicsUnit]::Pixel)
|
|
$bitmap.Save($OutputPath, [System.Drawing.Imaging.ImageFormat]::Png)
|
|
}
|
|
finally {
|
|
$graphics.Dispose()
|
|
$bitmap.Dispose()
|
|
}
|
|
}
|
|
|
|
$sourceImage = [System.Drawing.Image]::FromFile($sourcePath)
|
|
|
|
try {
|
|
$targets = @(
|
|
@{ Size = 180; FileName = 'apple-touch-icon.png' }
|
|
@{ Size = 192; FileName = 'pwa-192.png' }
|
|
@{ Size = 512; FileName = 'pwa-512.png' }
|
|
)
|
|
|
|
foreach ($target in $targets) {
|
|
$outputPath = Join-Path $iconDirectory $target.FileName
|
|
Export-SquareIcon -SourceImage $sourceImage -Size $target.Size -OutputPath $outputPath
|
|
Write-Host "已生成 $outputPath"
|
|
}
|
|
}
|
|
finally {
|
|
$sourceImage.Dispose()
|
|
}
|