Powershell一直是我的学习目标。做一个小例子。PowerShell实现读取照片并做灰度处理。还想要保存这张灰度照片并直接打开查看。
分析需求:
【读取照片】 需要借助.net framework中的程序集 System.Drawing
【灰度处理】 需要做图像处理----灰度处理,需要重新计算每个像素信息,使用灰阶转换公式 L = 0.299*R + 0.587*G + 0.114*B
【保存照片】 同样需要System.Drawing程序集
【打开文件】 使用 Invoke-Item 命令 或者 &
设计脚本:- Add-Type -AssemblyName System.Drawing
- # 定义根目录下的图片路径(假设文件名为 input.jpg)
- $inputPath = Join-Path $PSScriptRoot "input.jpg"
- $outputPath = Join-Path $PSScriptRoot "output.jpg"
- # 检查输入文件是否存在
- if (-not (Test-Path $inputPath)) {
- Write-Host "错误:根目录下未找到 input.jpg 文件!"
- exit
- }
- try {
- # 加载原始图片
- $originalImage = [System.Drawing.Bitmap]::FromFile($inputPath)
- # 创建灰度图像对象
- $grayImage = New-Object System.Drawing.Bitmap($originalImage.Width, $originalImage.Height)
- # 遍历每个像素进行灰度化处理
- for ($x = 0; $x -lt $originalImage.Width; $x++) {
- for ($y = 0; $y -lt $originalImage.Height; $y++) {
- $pixel = $originalImage.GetPixel($x, $y)
- # 计算灰度值(加权平均法)
- $grayValue = [int](0.299 * $pixel.R + 0.587 * $pixel.G + 0.114 * $pixel.B)
- $grayColor = [System.Drawing.Color]::FromArgb($grayValue, $grayValue, $grayValue)
- $grayImage.SetPixel($x, $y, $grayColor)
- }
- }
- # 保存黑白图片
- $grayImage.Save($outputPath, [System.Drawing.Imaging.ImageFormat]::Jpeg)
- Write-Host "已生成黑白图片:$outputPath"
- # 使用默认程序展示图片
- Invoke-Item $outputPath
- }
- catch {
- Write-Host "处理过程中发生错误:$_"
- }
- finally {
- # 释放资源
- if ($originalImage) { $originalImage.Dispose() }
- if ($grayImage) { $grayImage.Dispose() }
- }
复制代码
PS:
$grayValue = [int](0.299 * $pixel.R + 0.587 * $pixel.G + 0.114 * $pixel.B)
其中,grayValue 是灰阶值,R、G、B分别是红色、绿色和蓝色通道的值。这个公式是基于人眼对不同颜色敏感度的研究结果得出的。在这个公式中,绿色的权重最高,因为人眼对绿色最为敏感,其次是红色,最后是蓝色。这种权重分配在早期电视技术中被采纳,以模拟人眼感知亮度的方式优化信号传输。
ok! 脚本运行后,会在其根目录下生成 output.jpg 文件,系统会使用默认软件打开该图片文件,可看到最后效果。下面给出参考结果。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |