C++ 셸 익스텐션 (src/EverythingToJpeg.Shell/) - WRL RuntimeClass 패턴으로 IExplorerCommand 두 핸들러 구현 - Quick(빠른 변환) / Dialog(설정 창) verb를 다른 CLSID로 분리 - Invoke()에서 EverythingToJpeg.exe로 verb + 파일 경로 전달 - VS 2026 빌드 검증, /utf-8 한글 라벨 지원 MSIX 패키징 (packaging/) - Package.appxmanifest: com:SurrogateServer + desktop4:FileExplorerContextMenus - 26개 확장자 × 2 verb 자동 노출 - BuildMsix.ps1: dotnet publish + msbuild + makeappx 일관 파이프라인 - CreateDevCert.ps1 / Install-EverythingToJpeg.ps1: 자체 서명 인증서 워크플로 - GenerateAssets.ps1: placeholder 로고 자동 생성 CI/CD - .github/workflows/release.yml: 태그 푸시 시 미서명 MSIX 자동 빌드 + 첨부 검증 - 50MB MSIX 산출 확인 (packaging/dist/EverythingToJpeg-x64.msix) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
56 lines
2.4 KiB
PowerShell
56 lines
2.4 KiB
PowerShell
#Requires -Version 5.1
|
|
# packaging/Assets/ 의 placeholder 아이콘들을 생성한다.
|
|
# 추후 진짜 로고로 교체.
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
Add-Type -AssemblyName System.Drawing
|
|
|
|
$assetsDir = Join-Path $PSScriptRoot 'Assets'
|
|
if (-not (Test-Path $assetsDir)) { New-Item -ItemType Directory -Path $assetsDir | Out-Null }
|
|
|
|
function New-LogoPng {
|
|
param(
|
|
[int]$Width,
|
|
[int]$Height,
|
|
[string]$Path,
|
|
[string]$Label = ''
|
|
)
|
|
$bmp = New-Object System.Drawing.Bitmap($Width, $Height, [System.Drawing.Imaging.PixelFormat]::Format32bppArgb)
|
|
$g = [System.Drawing.Graphics]::FromImage($bmp)
|
|
$g.SmoothingMode = [System.Drawing.Drawing2D.SmoothingMode]::AntiAlias
|
|
$g.TextRenderingHint = [System.Drawing.Text.TextRenderingHint]::ClearTypeGridFit
|
|
|
|
$rect = New-Object System.Drawing.Rectangle(0, 0, $Width, $Height)
|
|
$brush = New-Object System.Drawing.Drawing2D.LinearGradientBrush(
|
|
$rect,
|
|
[System.Drawing.Color]::FromArgb(0xFF, 0x3B, 0x82, 0xF6),
|
|
[System.Drawing.Color]::FromArgb(0xFF, 0x1E, 0x40, 0xAF),
|
|
[System.Drawing.Drawing2D.LinearGradientMode]::Diagonal)
|
|
$g.FillRectangle($brush, $rect)
|
|
|
|
if ($Label) {
|
|
$fontSize = [Math]::Max(8, [Math]::Min($Width, $Height) / 5)
|
|
$font = New-Object System.Drawing.Font('Segoe UI', $fontSize, [System.Drawing.FontStyle]::Bold)
|
|
$textBrush = [System.Drawing.Brushes]::White
|
|
$sf = New-Object System.Drawing.StringFormat
|
|
$sf.Alignment = [System.Drawing.StringAlignment]::Center
|
|
$sf.LineAlignment = [System.Drawing.StringAlignment]::Center
|
|
$rectF = New-Object System.Drawing.RectangleF(0, 0, [float]$Width, [float]$Height)
|
|
$g.DrawString($Label, $font, $textBrush, $rectF, $sf)
|
|
$font.Dispose()
|
|
$sf.Dispose()
|
|
}
|
|
|
|
$g.Dispose()
|
|
$bmp.Save($Path, [System.Drawing.Imaging.ImageFormat]::Png)
|
|
$bmp.Dispose()
|
|
$brush.Dispose()
|
|
Write-Host " [+] $Path ($Width x $Height)"
|
|
}
|
|
|
|
Write-Host 'Generating placeholder logos…'
|
|
New-LogoPng -Width 50 -Height 50 -Path (Join-Path $assetsDir 'StoreLogo.png') -Label 'E2J'
|
|
New-LogoPng -Width 44 -Height 44 -Path (Join-Path $assetsDir 'Square44x44Logo.png') -Label 'E2J'
|
|
New-LogoPng -Width 150 -Height 150 -Path (Join-Path $assetsDir 'Square150x150Logo.png')-Label 'E2J'
|
|
New-LogoPng -Width 310 -Height 150 -Path (Join-Path $assetsDir 'Wide310x150Logo.png') -Label 'EverythingToJpeg'
|
|
Write-Host 'Done.'
|