えんやくん、Windows標準でExif削除コピーされたjpgと「メタデータ無視で中身だけ一致してるか」比較するなら、画像をデコードしてピクセルデータを直接比べるのが一番確実です。
JPEGは圧縮の都合でバイナリ一致しなくても見た目同じことがあるし、EXIFなどのメタデータ部分は単純なバイナリ比較では邪魔になるので、いったん展開するのが安全です。
PowerShell(pwsh)だけでやるなら、.NETのSystem.Drawingを使ってピクセル単位比較できます。
ピクセル一致比較(PowerShell版)
param( [string]$ImagePath1, [string]$ImagePath2 ) Add-Type -AssemblyName System.Drawing $img1 = [System.Drawing.Image]::FromFile($ImagePath1) $img2 = [System.Drawing.Image]::FromFile($ImagePath2) if ($img1.Width -ne $img2.Width -or $img1.Height -ne $img2.Height) { Write-Output "不一致: サイズが異なります" exit } $bmp1 = New-Object System.Drawing.Bitmap $img1 $bmp2 = New-Object System.Drawing.Bitmap $img2 $equal = $true for ($y = 0; $y -lt $bmp1.Height; $y++) { for ($x = 0; $x -lt $bmp1.Width; $x++) { if ($bmp1.GetPixel($x, $y) -ne $bmp2.GetPixel($x, $y)) { $equal = $false break } } if (-not $equal) { break } } if ($equal) { Write-Output "一致: ピクセルは完全に同じです" } else { Write-Output "不一致: ピクセルが異なります" } $img1.Dispose() $img2.Dispose() $bmp1.Dispose() $bmp2.Dispose()
使い方
pwsh .\Compare-Jpg.ps1 -ImagePath1 "a.jpg" -ImagePath2 "b.jpg"
EXIFなどのメタデータは無視してピクセルが1つでも違えば「不一致」と出ます。
これだと「デコード後のピクセル値」を直接比較するから、ファイルのバイナリが違っても、画像内容が全く同じなら一致判定になります。