gpt4 book ai didi

.net - 如何使用dotnet仅对jpg文件中的图像数据进行哈希处理?

转载 作者:行者123 更新时间:2023-12-04 03:10:02 26 4
gpt4 key购买 nike

我有一个〜20000 jpg图像,其中一些是重复的。不幸的是,有些文件已被EXIF元数据标记,因此简单的文件哈希无法识别重复的文件。

我试图创建一个Powershell脚本来处理这些,但是找不到仅提取位图数据的方法。

system.drawing.bitmap只能返回一个位图对象,而不能返回字节。有一个GetHash()函数,但是它显然作用于整个文件。

如何以排除EXIF信息的方式对这些文件进行哈希处理?如果可能的话,我宁愿避免外部依赖。

最佳答案

这是PowerShell V2.0高级功能的实现。它有点长,但是我已经验证它在同一张图片上给出相同的哈希码(从位图像素生成),但是元数据和文件大小不同。这是具有管道功能的版本,还接受通配符和文字路径:

function Get-BitmapHashCode
{
[CmdletBinding(DefaultParameterSetName="Path")]
param(
[Parameter(Mandatory=$true,
Position=0,
ParameterSetName="Path",
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
HelpMessage="Path to bitmap file")]
[ValidateNotNullOrEmpty()]
[string[]]
$Path,

[Alias("PSPath")]
[Parameter(Mandatory=$true,
Position=0,
ParameterSetName="LiteralPath",
ValueFromPipelineByPropertyName=$true,
HelpMessage="Path to bitmap file")]
[ValidateNotNullOrEmpty()]
[string[]]
$LiteralPath
)

Begin {
Add-Type -AssemblyName System.Drawing
$sha = new-object System.Security.Cryptography.SHA256Managed
}

Process {
if ($psCmdlet.ParameterSetName -eq "Path")
{
# In -Path case we may need to resolve a wildcarded path
$resolvedPaths = @($Path | Resolve-Path | Convert-Path)
}
else
{
# Must be -LiteralPath
$resolvedPaths = @($LiteralPath | Convert-Path)
}

# Find PInvoke info for each specified path
foreach ($rpath in $resolvedPaths)
{
Write-Verbose "Processing $rpath"
try {
$bmp = new-object System.Drawing.Bitmap $rpath
$stream = new-object System.IO.MemoryStream
$writer = new-object System.IO.BinaryWriter $stream
for ($w = 0; $w -lt $bmp.Width; $w++) {
for ($h = 0; $h -lt $bmp.Height; $h++) {
$pixel = $bmp.GetPixel($w,$h)
$writer.Write($pixel.ToArgb())
}
}
$writer.Flush()
[void]$stream.Seek(0,'Begin')
$hash = $sha.ComputeHash($stream)
[BitConverter]::ToString($hash) -replace '-',''
}
finally {
if ($bmp) { $bmp.Dispose() }
if ($writer) { $writer.Close() }
}
}
}
}

关于.net - 如何使用dotnet仅对jpg文件中的图像数据进行哈希处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2078044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com