0

私はしようとしています:

  • FileReference を使用して jpeg をロードする
  • 結果を bytearray に書き込む
  • bytearray から直接ピクセル データを抽出します (それ以外は何も抽出しません)。

生のバイナリ データ (bytearray など) から jpeg オブジェクトをデコードできる AS3 クラスを探すのに何時間も費やしましたが、役に立ちませんでした (ここにはありますが、Alchemy と SWC に依存しています。適切です)。

簡単に言えば、生データをバイト配列に格納したら、残りのファイルからピクセル データを識別する方法を知りたいのです。

Loader クラスや Bitmap の「getPixels」関数の使用には興味がありません。

4

4 に答える 4

3

ステガノグラフィはpngファイルの使用に依存していることに気付くでしょう。jpgファイルを(簡単に)使用できない理由は、エンコード処理によってピクセルデータの信頼性が失われるためです。Jpgファイルは、CMYKやRGBなど、いくつかの方法でエンコードできますが、ほとんどの場合YCbCrです。Jpg圧縮はフーリエ変換に依存しており、ピクセルレベルの詳細が削除されます。したがって、jpgとpng、gif、bmpなどで同じプロセスを使用することはできません。

これは、jpgファイルでそれを行うことができないということではありませんが、アプローチを変更するか、圧縮段階でのデータの損失を考慮する必要があります(または非圧縮で保存します)。

于 2013-02-07T19:04:26.443 に答える
2

圧縮されたデータを直接操作してメッセージを含めることもできますが、画像を完全に破損することなくそれを行う方法をよく読む必要があります

しかし、メッセージをデコードするときにメッセージをピクセル単位でエンコードしてピクセルごとの差分を作成することを考えている場合は、(ダニエルの回答に関するコメントから) あなたの仮定が間違っていると思います。

JPEG 圧縮は非可逆圧縮です。これは、修正されたピクセル データを画像ファイルに戻すと、すべてのピクセル データが失われることを意味します (再エンコードが必要なため)。ピクセル データの代わりに、保存される唯一の情報このファイルには、人間の目には元の画像と非常によく似た画像を再構築する方法が記載されていますが、ピクセル データは同じではありません。

画像をデコードしてJPEGファイルとして保存し、元の画像を変換して、最後にまったく同じ圧縮設定で2番目のJPEGとして保存しても、ピクセルごとの比較に頼ることはできません.

ただし、JPEG は画像データを 8*8 ピクセル ブロックに圧縮することを覚えているようなので、ブロック単位で画像データを操作および比較できる場合があります。

于 2013-02-07T21:02:38.607 に答える
1

bytearray から直接ピクセル データを抽出します (それ以外は何も抽出しません)。

これを行うには、最初に jpeg をデコードする必要があります (いくつかの最終的なメタデータを除いて、典型的な jpeg ファイルにはピクセル データしかありません)。おそらく独自のデコーダー(投稿したものなど)を作成できますが、そうするメリットはありません。

于 2013-02-07T17:54:23.837 に答える
1

ByteArray.org の Thibault Imbert という人物が、libjpeg ライブラリを ActionScript 3 に適合させました。私はこれをテストしていませんが、bytearray.org のコメントによると、他の人々はそれを気に入っているようです。

http://code.google.com/p/as3-jpeg-decoder/downloads/list

于 2013-02-14T22:31:03.647 に答える