此代码的作用是,将一张 PNG 的图像隐藏到另外一个 PNG 文件中,不改变原 PNG 文件的图像的任何地方。
大致原理是,通过 PowerShell 向 PNG 文件指定位置添加任意内容,而不破坏 PNG 文件的图像。将要隐藏的 PNG 文件的内容转换为 Base64 字符串,然后将这个 Base64 字符串隐藏到宿主 PNG 文件的指定位置即可。
隐藏好的 PNG,图像和原来的 PNG 没有任何区别。但用纯文本编辑器强行打开,就能看到后半部分隐藏了另外一张图片的 Base64 内容,这部分 Base64 内容能够还原为另外一张 PNG 图片。此前一些将链接隐藏到一张图片中的“图种”也是类似的原理。
原来是这个 PNG: |
要隐藏的 PNG: |
隐藏好的 PNG: |
|
|
|
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| $sourcePngFilePath = "C:\Users\Administrator\Pictures\qqshow.png" $dataFilePath = "C:\Users\Administrator\Pictures\watermark.png" $outputPngFilePath = "C:\Users\Administrator\Pictures\qqshow1.png"
$dataContent = [System.IO.File]::ReadAllBytes($dataFilePath)
$base64Content = [Convert]::ToBase64String($dataContent) $base64Content = "......data:image/png;base64,$base64Content"
$sourceImageBytes = [System.IO.File]::ReadAllBytes($sourcePngFilePath)
$fileStream = [System.IO.File]::Create($outputPngFilePath)
try { $fileStream.Write($sourceImageBytes, 0, $sourceImageBytes.Length)
$base64Bytes = [System.Text.Encoding]::UTF8.GetBytes($base64Content)
$fileStream.Write($base64Bytes, 0, $base64Bytes.Length) } finally { $fileStream.Close() }
Write-Host "已成功将 $dataFilePath 的内容以 Base64 形式添加到新的 PNG 文件:$outputPngFilePath。"
|