找回密码
 立即注册
首页 业界区 安全 PowerShell实现读取照片并做灰度处理

PowerShell实现读取照片并做灰度处理

饮邺谲 5 天前
Powershell一直是我的学习目标。做一个小例子。PowerShell实现读取照片并做灰度处理。还想要保存这张灰度照片并直接打开查看。
 
分析需求:
【读取照片】  需要借助.net framework中的程序集 System.Drawing
【灰度处理】  需要做图像处理----灰度处理,需要重新计算每个像素信息,使用灰阶转换公式  L = 0.299*R + 0.587*G + 0.114*B
【保存照片】  同样需要System.Drawing程序集
【打开文件】  使用  Invoke-Item  命令  或者 
 
设计脚本:
  1. Add-Type -AssemblyName System.Drawing
  2. # 定义根目录下的图片路径(假设文件名为 input.jpg)
  3. $inputPath = Join-Path $PSScriptRoot "input.jpg"
  4. $outputPath = Join-Path $PSScriptRoot "output.jpg"
  5. # 检查输入文件是否存在
  6. if (-not (Test-Path $inputPath)) {
  7.     Write-Host "错误:根目录下未找到 input.jpg 文件!"
  8.     exit
  9. }
  10. try {
  11.     # 加载原始图片
  12.     $originalImage = [System.Drawing.Bitmap]::FromFile($inputPath)
  13.     # 创建灰度图像对象
  14.     $grayImage = New-Object System.Drawing.Bitmap($originalImage.Width, $originalImage.Height)
  15.     # 遍历每个像素进行灰度化处理
  16.     for ($x = 0; $x -lt $originalImage.Width; $x++) {
  17.         for ($y = 0; $y -lt $originalImage.Height; $y++) {
  18.             $pixel = $originalImage.GetPixel($x, $y)
  19.             # 计算灰度值(加权平均法)
  20.             $grayValue = [int](0.299 * $pixel.R + 0.587 * $pixel.G + 0.114 * $pixel.B)
  21.             $grayColor = [System.Drawing.Color]::FromArgb($grayValue, $grayValue, $grayValue)
  22.             $grayImage.SetPixel($x, $y, $grayColor)
  23.         }
  24.     }
  25.     # 保存黑白图片
  26.     $grayImage.Save($outputPath, [System.Drawing.Imaging.ImageFormat]::Jpeg)
  27.     Write-Host "已生成黑白图片:$outputPath"
  28.     # 使用默认程序展示图片
  29.     Invoke-Item $outputPath
  30. }
  31. catch {
  32.     Write-Host "处理过程中发生错误:$_"
  33. }
  34. finally {
  35.     # 释放资源
  36.     if ($originalImage) { $originalImage.Dispose() }
  37.     if ($grayImage) { $grayImage.Dispose() }
  38. }
复制代码
 
PS:  
 $grayValue = [int](0.299 * $pixel.R + 0.587 * $pixel.G + 0.114 * $pixel.B)
其中,grayValue 是灰阶值,R、G、B分别是红色、绿色和蓝色通道的值。这个公式是基于人眼对不同颜色敏感度的研究结果得出的。在这个公式中,绿色的权重最高,因为人眼对绿色最为敏感,其次是红色,最后是蓝色。这种权重分配在早期电视技术中被采纳,以模拟人眼感知亮度的方式优化信号传输。
 
ok!   脚本运行后,会在其根目录下生成 output.jpg 文件,系统会使用默认软件打开该图片文件,可看到最后效果。下面给出参考结果。
1.jpeg
     
2.jpeg


 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册