7

画像の大規模なライブラリで重複を削除するスクリプトをまとめています。現時点では、最初に同じサイズのファイルを見つけてから、ファイルの 10240 バイトの部分で sha256 を実行して、同じサイズのファイルのフィンガープリントを取得する 2 パス フィルターを実行しています (コードはこちら)。

うまく動作しますが、sha256 を実行する代わりに使用できるチェックサムが jpeg 形式に組み込まれているのではないかと思います。

チェックサム/フィンガープリントとして機能するチェックサムまたはその他のコンポーネントがあるかどうかは誰にもわかりませんか? もしそうなら、それらにアクセスする効率的な方法はありますか?

4

6 に答える 6

5

JPEG仕様には、あなたが説明しているようなチェックサムが含まれているとは思いません。

ただし、JPEG には EXIF メタデータの一部としてサムネイルを含めることができます。2 つの異なる画像が同じサムネイルを持つ可能性があるため、これは完全な指標ではありません。画像が大幅に変更された後、サムネイルが置き換えられなかった事例が少なくとも 1 件記録されています。

于 2008-10-20T05:01:17.230 に答える
1

非常によく似たスクリプトを作成しました。タグが変更されていても、実際の画像が重複していないかどうかを確認したいのですが、メタデータをチェックサムしたくありません。そのための最良の方法は、サイズで並べ替えることではなく、チェックサムistelfで並べ替えることです。私はjheadを使用してメタデータを削除し、ファイル全体をチェックサムします(ただし、その一部を実行することも考えましたが、実際にはそれほど時間の節約にはならないと思います)。jheadは共有メモリ(パイプ)を使用せず、上書きするので、最初にファイルを共有メモリにコピーします。後でより速く取得できるように、チェックサムをImageDescriptionフィールドに配置します。明らかに、これは後で画像の整合性をチェックすることも可能にし、私が全体をチェックサムする理由の一部です。ヒント:exiv2は、メタデータの読み取りと書き込みが、一度に1つずつ決定ベースの操作を行うexiftoolよりもはるかに高速です。

于 2011-01-03T04:13:52.763 に答える
1

IJG ライブラリを掘り下げてからしばらく経ちましたが、ある種のフィンガープリントをチェックするために使用できる簡単なクラス メンバーや関数呼び出しはないと思います。画像のエンコードを制御できる場合は、組み込みの EXIF タグを使用できます...

于 2008-10-20T05:00:23.020 に答える
0

実行できる 1 つの方法は、すべての画像を固定サイズに縮小し、それをサムネイルとして保存することです。次に、画像比較により、同様のサイズの画像が比較され、重複している可能性があります。画像をトリミングしたり(大幅にトリミングしない限り)、画像のサイズを変更したりして、それらの「重複」を見つけたい場合に役立ちます。

于 2008-10-20T13:06:38.717 に答える
0

JPEG標準(ITU-T.81)では、圧縮されたjpeg画像ファイル全体に対して、チェックサムなどを持つフィールド/構文要素はないと思います。カスタマイズされたアプリケーションがそのようなファイルをアプリケーション セグメントに配置するか、標準でセグメントが提供されるメタ データとして配置しない限り。ですから、あなたの目的を果たすために、あなたがしていることは 1 つのソルンです。他のものは、何らかのバイナリ ファイル比較ユーティリティ (beyond compare、または Windows コマンドfc /bなど) を呼び出し、その比較ユーティリティの結果をチェックして、必要な決定を下す、ある種のアプリケーション ラッパーである可能性があります。

-広告

于 2008-10-20T05:04:10.267 に答える
0

XMP 仕様には、イメージのバージョンを一意に識別するドキュメント ID とバージョン ID があります。

これら (およびその他のメタデータ ベースの識別方法) の問題は、それに応じてメタデータを更新する jpeg のコンテンツを変更できる一部のアプリケーションでは無視される可能性があることです。

于 2012-09-09T11:53:21.243 に答える