Powershell 随机姓氏(单姓)头像生成

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 运行:
Powershell运行

2、CMD运行:
CMD运行

03 后记

生成文字的时候,可能居中的效果不是很好,跟字体有关,可以自行调整这行:$y += ($font.Size - $font.Size * 4 / 5);,就没有深入去研究了,基本够用了。

如果有复姓的需求,也预留了,可以自行调整。另外,这些姓氏是从网上摘录的,如果不齐全,也请自行调整。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值