Powershell 随机姓氏(单姓)头像生成
01 前言
2026年第一天,在家写总结,想搞点新花样,要用到A-Z26个大写字母的图,不想网上找了,于是动手搞了一下,然后顺便把姓氏(单姓)的也弄了一下,万一哪天用到。
02 正文
环境
Windows 11 ,64bit
PSVersion 5.1
脚本如下:
<#
随机姓氏(单姓)头像生成
by hokis
on 2026-1-1 11:28:18
#>
param (
# 字体大小
[int]$fontSize = 200,
# 头像宽
[int]$imgWidth = 500,
# 头像高
[int]$imgHeight = 500,
# 无阴影,
[bool]$noShadow = $false,
# 生成数量,-1则生成全部
[int]$count = 1,
# 字体
[string]$fontName = '宋体',
# 自定义输出位置
[string]$savePath = ''
)
Add-Type -AssemblyName System.Drawing;
<#
浅色随机RGB值(192-255范围)
深色系(0-191范围)
这里不想要黑色,所以设置从20开始
#>
function Get-DeepColor {
$r = Get-Random -Minimum 20 -Maximum 191;
$g = Get-Random -Minimum 20 -Maximum 191;
$b = Get-Random -Minimum 20 -Maximum 191;
return [System.Drawing.Color]::FromArgb($r, $g, $b);
}
#桌面路径
[string]$outputFolder = Join-Path -Path (Join-Path -Path $env:USERPROFILE -ChildPath 'Desktop') -ChildPath 'Avatars';
if(-not [string]::IsNullOrEmpty($savePath)){
$outputFolder = $savePath;
}
if (-Not (Test-Path $outputFolder)) {
New-Item -ItemType Directory -Path $outputFolder -ErrorAction Stop | Out-Null;
}
# 单姓
$xs = @('赵', '钱', '孙', '李', '周', '吴', '郑', '王', '冯', '陈', '楮', '卫', '蒋', '沈', '韩', '杨',
'朱', '秦', '尤', '许', '何', '吕', '施', '张', '孔', '曹', '严', '华', '金', '魏', '陶', '姜',
'戚', '谢', '邹', '喻', '柏', '水', '窦', '章', '云', '苏', '潘', '葛', '奚', '范', '彭', '郎',
'鲁', '韦', '昌', '马', '苗', '凤', '花', '方', '俞', '任', '袁', '柳', '酆', '鲍', '史', '唐',
'费', '廉', '岑', '薛', '雷', '贺', '倪', '汤', '滕', '殷', '罗', '毕', '郝', '邬', '安', '常',
'乐', '于', '时', '傅', '皮', '卞', '齐', '康', '伍', '余', '元', '卜', '顾', '孟', '平', '黄',
'和', '穆', '萧', '尹', '姚', '邵', '湛', '汪', '祁', '毛', '禹', '狄', '米', '贝', '明', '臧',
'计', '伏', '成', '戴', '谈', '宋', '茅', '庞', '熊', '纪', '舒', '屈', '项', '祝', '董', '梁',
'杜', '阮', '蓝', '闽', '席', '季', '麻', '强', '贾', '路', '娄', '危', '江', '童', '颜', '郭',
'梅', '盛', '林', '刁', '锺', '徐', '丘', '骆', '高', '夏', '蔡', '田', '樊', '胡', '凌', '霍',
'虞', '万', '支', '柯', '昝', '管', '卢', '莫', '经', '房', '裘', '缪', '干', '解', '应', '宗',
'丁', '宣', '贲', '邓', '郁', '单', '杭', '洪', '包', '诸', '左', '石', '崔', '吉', '钮', '龚',
'程', '嵇', '邢', '滑', '裴', '陆', '荣', '翁', '荀', '羊', '於', '惠', '甄', '麹', '家', '封',
'芮', '羿', '储', '靳', '汲', '邴', '糜', '松', '井', '段', '富', '巫', '乌', '焦', '巴', '弓',
'牧', '隗', '山', '谷', '车', '侯', '宓', '蓬', '全', '郗', '班', '仰', '秋', '仲', '伊', '宫',
'宁', '仇', '栾', '暴', '甘', '斜', '厉', '戎', '祖', '武', '符', '刘', '景', '詹', '束', '龙',
'叶', '幸', '司', '韶', '郜', '黎', '蓟', '薄', '印', '宿', '白', '怀', '蒲', '邰', '从', '鄂',
'索', '咸', '籍', '赖', '卓', '蔺', '屠', '蒙', '池', '乔', '阴', '郁', '胥', '能', '苍', '双',
'闻', '莘', '党', '翟', '谭', '贡', '劳', '逄', '姬', '申', '扶', '堵', '冉', '宰', '郦', '雍',
'郤', '璩', '桑', '桂', '濮', '牛', '寿', '通', '边', '扈', '燕', '冀', '郏', '浦', '尚', '农',
'温', '别', '庄', '晏', '柴', '瞿', '阎', '充', '慕', '连', '茹', '习', '宦', '艾', '鱼', '容',
'向', '古', '易', '慎', '戈', '廖', '庾', '终', '暨', '居', '衡', '步', '都', '耿', '满', '弘',
'匡', '国', '文', '寇', '广', '禄', '阙', '东', '欧', '殳', '沃', '利', '蔚', '越', '夔', '隆',
'师', '巩', '厍', '聂', '晁', '勾', '敖', '融', '冷', '訾', '辛', '阚', '那', '简', '饶', '空',
'曾', '毋', '沙', '乜', '养', '鞠', '须', '丰', '巢', '关', '蒯', '相', '查', '后', '荆', '红',
'游', '竺', '权', '逑', '盖', '益', '桓', '公', '仉', '督', '晋', '楚', '阎', '法', '汝', '鄢',
'涂', '钦', '岳', '帅', '缑', '亢', '况', '后', '有', '琴', '归', '海', '墨', '哈', '谯', '笪',
'年', '爱', '阳', '佟', '商', '牟', '佘', '佴', '伯', '赏');
# 复姓
<#
$xs += @('万俟', '司马', '上官', '欧阳', '夏侯', '诸葛', '闻人', '东方', '赫连', '皇甫', '尉迟', '公羊',
'澹台', '公冶', '宗政', '濮阳', '淳于', '单于', '太叔', '申屠', '公孙', '仲孙', '轩辕', '令狐',
'锺离', '宇文', '长孙', '慕容', '鲜于', '闾丘', '司徒', '司空', '丌官', '司寇', '子车', '微生',
'颛孙', '端木', '巫马', '公西', '漆雕', '乐正', '壤驷', '公良', '拓拔', '夹谷', '宰父', '谷梁',
'段干', '百里', '东郭', '南门', '呼延', '羊舌', '梁丘', '左丘', '东门', '西门', '南宫')
#>
#阴影效果
[int]$shadowOffsetX = 5;
[int]$shadowOffsetY = 5;
[string]$shadowColor = 'Black';
#计数
$curCount = 0;
if($count -lt 1){
$xss = $xs;
}else{
$xss = $xs | Get-Random -Count $count;
}
foreach ($letter in $xss) {
#Write-Host $letter
try {
# 背景色
$bgColor = Get-DeepColor;
$image = New-Object System.Drawing.Bitmap($imgWidth, $imgHeight);
$graphics = [System.Drawing.Graphics]::FromImage($image);
$graphics.Clear($bgColor);
$font = New-Object System.Drawing.Font($fontName, $fontSize, [System.Drawing.FontStyle]::Bold);
#
$textSize = $graphics.MeasureString($letter, $font);
#计算x,y位置
$x = [math]::Round(($imgWidth - $textSize.Width) / 2);
$y = [math]::Round(($imgHeight - $textSize.Height) / 2);
#y轴微调,不同字体可能效果不一样
$y += ($font.Size - $font.Size * 4 / 5);
#增加阴影效果
if(-not $noShadow){
$brush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::$shadowColor);
$shadowTextSize = $graphics.MeasureString($letter, $font);
$shadowX = $x + $shadowOffsetX;
$shadowY = $y + $shadowOffsetY;
$graphics.DrawString($letter, $font, $brush, $shadowX, $shadowY);
$brush.Dispose();
}
#文字
$brush = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::White);
$graphics.DrawString($letter, $font, $brush, $x, $y);
#输出文件
$sf = Join-Path -Path $outputFolder -ChildPath ($letter+'.png');
$image.Save($sf,[System.Drawing.Imaging.ImageFormat]::Png);
#释放资源
$brush.Dispose();
$graphics.Dispose();
$image.Dispose();
$curCount += 1;
}
catch{
Write-Host 'Error: $_';
}
}
Write-Host ('生成{0}个头像' -f $xss.Length);
说明:
1、代码另存为run.ps1,右键,“使用 Powershell 运行”
2、底色是随机的,深色,可以自行修改
当然了,为了方便使用,也提供一个CMD版本。
@echo off
rem created on 2026-01-01 10:50:42
REM chcp 65001
cls
cd /d %~dp0
REM 头像宽
set width=500
REM 头像高
set height=500
REM 字体大小
set fsize=200
REM 字体名称(本机已安装的字体才能使用)
set fname=宋体
REM 无阴影,false则表示有阴影,true则表示无阴影
set noshadow=false
REM 生成数量,如果是-1则生成所有
set cnt=5
REM 输出路径,如果为空,则输出到:桌面\Avatars
set spath=
powershell.exe -command "param([int]$fontSize=%fsize%,[int]$imgWidth=%width%,[int]$imgHeight=%height%,[bool]$noShadow=$%noshadow%,[int]$count=%cnt%,[string]$fontName='%fname%',[string]$savePath='%spath%')Add-Type -AssemblyName System.Drawing;function Get-DeepColor {$r=Get-Random -Minimum 20 -Maximum 191;$g=Get-Random -Minimum 20 -Maximum 191;$b=Get-Random -Minimum 20 -Maximum 191;return [System.Drawing.Color]::FromArgb($r,$g,$b);}[string]$outputFolder=Join-Path -Path (Join-Path -Path $env:USERPROFILE -ChildPath 'Desktop') -ChildPath 'Avatars';if(-not [string]::IsNullOrEmpty($savePath)){$outputFolder=$savePath;};if(-Not (Test-Path $outputFolder)){New-Item -ItemType Directory -Path $outputFolder -ErrorAction Stop | Out-Null;};$xs=@('赵','钱','孙','李','周','吴','郑','王','冯','陈','楮','卫','蒋','沈','韩','杨','朱','秦','尤','许','何','吕','施','张','孔','曹','严','华','金','魏','陶','姜','戚','谢','邹','喻','柏','水','窦','章','云','苏','潘','葛','奚','范','彭','郎','鲁','韦','昌','马','苗','凤','花','方','俞','任','袁','柳','酆','鲍','史','唐','费','廉','岑','薛','雷','贺','倪','汤','滕','殷','罗','毕','郝','邬','安','常','乐','于','时','傅','皮','卞','齐','康','伍','余','元','卜','顾','孟','平','黄','和','穆','萧','尹','姚','邵','湛','汪','祁','毛','禹','狄','米','贝','明','臧','计','伏','成','戴','谈','宋','茅','庞','熊','纪','舒','屈','项','祝','董','梁','杜','阮','蓝','闽','席','季','麻','强','贾','路','娄','危','江','童','颜','郭','梅','盛','林','刁','锺','徐','丘','骆','高','夏','蔡','田','樊','胡','凌','霍','虞','万','支','柯','昝','管','卢','莫','经','房','裘','缪','干','解','应','宗','丁','宣','贲','邓','郁','单','杭','洪','包','诸','左','石','崔','吉','钮','龚','程','嵇','邢','滑','裴','陆','荣','翁','荀','羊','於','惠','甄','麹','家','封','芮','羿','储','靳','汲','邴','糜','松','井','段','富','巫','乌','焦','巴','弓','牧','隗','山','谷','车','侯','宓','蓬','全','郗','班','仰','秋','仲','伊','宫','宁','仇','栾','暴','甘','斜','厉','戎','祖','武','符','刘','景','詹','束','龙','叶','幸','司','韶','郜','黎','蓟','薄','印','宿','白','怀','蒲','邰','从','鄂','索','咸','籍','赖','卓','蔺','屠','蒙','池','乔','阴','郁','胥','能','苍','双','闻','莘','党','翟','谭','贡','劳','逄','姬','申','扶','堵','冉','宰','郦','雍','郤','璩','桑','桂','濮','牛','寿','通','边','扈','燕','冀','郏','浦','尚','农','温','别','庄','晏','柴','瞿','阎','充','慕','连','茹','习','宦','艾','鱼','容','向','古','易','慎','戈','廖','庾','终','暨','居','衡','步','都','耿','满','弘','匡','国','文','寇','广','禄','阙','东','欧','殳','沃','利','蔚','越','夔','隆','师','巩','厍','聂','晁','勾','敖','融','冷','訾','辛','阚','那','简','饶','空','曾','毋','沙','乜','养','鞠','须','丰','巢','关','蒯','相','查','后','荆','红','游','竺','权','逑','盖','益','桓','公','仉','督','晋','楚','阎','法','汝','鄢','涂','钦','岳','帅','缑','亢','况','后','有','琴','归','海','墨','哈','谯','笪','年','爱','阳','佟','商','牟','佘','佴','伯','赏');[int]$shadowOffsetX=5;[int]$shadowOffsetY=5;[string]$shadowColor='Black';$curCount=0;if($count -lt 1){$xss=$xs;}else{$xss=$xs|Get-Random -Count $count;};foreach($letter in $xss){try{$bgColor=Get-DeepColor;$image=New-Object System.Drawing.Bitmap($imgWidth,$imgHeight);$graphics=[System.Drawing.Graphics]::FromImage($image);$graphics.Clear($bgColor);$font=New-Object System.Drawing.Font($fontName,$fontSize,[System.Drawing.FontStyle]::Bold);$textSize=$graphics.MeasureString($letter,$font);$x=[math]::Round(($imgWidth - $textSize.Width)/2);$y=[math]::Round(($imgHeight - $textSize.Height)/2);$y+=($font.Size-$font.Size*5/6);if(-not $noShadow){$brush=New-Object System.Drawing.SolidBrush([System.Drawing.Color]::$shadowColor);$shadowTextSize=$graphics.MeasureString($letter,$font);$shadowX=$x+$shadowOffsetX;$shadowY=$y+$shadowOffsetY;$graphics.DrawString($letter,$font,$brush,$shadowX,$shadowY);$brush.Dispose();};$brush=New-Object System.Drawing.SolidBrush([System.Drawing.Color]::White);$graphics.DrawString($letter,$font,$brush,$x,$y);$sf=Join-Path -Path $outputFolder -ChildPath ($letter+'.png');$image.Save($sf,[System.Drawing.Imaging.ImageFormat]::Png);$brush.Dispose();$graphics.Dispose();$image.Dispose();$curCount+=1;}catch{Write-Host 'Error: Write-Host ('生成{0}个头像' -f $xss.Length);';}}Write-Host ('生成{0}个头像' -f $xss.Length);"
pause
说明:
另存为run.bat文件,设置好参数,双击运行即可
效果如下:
1、Powershell 运行:

2、CMD运行:

03 后记
生成文字的时候,可能居中的效果不是很好,跟字体有关,可以自行调整这行:$y += ($font.Size - $font.Size * 4 / 5);,就没有深入去研究了,基本够用了。
如果有复姓的需求,也预留了,可以自行调整。另外,这些姓氏是从网上摘录的,如果不齐全,也请自行调整。
头像生成&spm=1001.2101.3001.5002&articleId=156483904&d=1&t=3&u=6b69a83df242430ea797561202798a6c)
2万+

被折叠的 条评论
为什么被折叠?



