2016-06-17 8 views
1

詳細を説明することなく、サーバーにダミーイメージのHTTP POSTを実行して、サーバーにそのデータベースのイメージの内部レコードを作成させようとしています。イメージは、後で、サーバーが知らずにそこに存在するはずの実際のイメージで、ストレージ内で置き換えられます。ランダムなサイズの一様に色付けされた画像の最小画像フォーマットとは何ですか?

残念ながら、このサーバーは「スマート」で、送信される画像データを検証します。 (jpeg、gif、pngなど)と一致しない場合、ランダムなバイトを拒否します。

もちろん、最も明白なアプローチは、可能な限り小さなgif(1x1グレーピクセル、〜26バイト)を送信することです。残念ながら、このサーバーは、読み取るイメージのサイズの不変レコードを保持しています... 1x1ピクセルイメージはそれをカットしません。

私の質問は、ダミーとして代わりに送ることができるソリッドカラーの最小縮尺の画像は何ですか?理想的には、この形式の100x100ピクセルの完全に均一な灰色のイメージは、圧縮のために同じ色の1000x2000イメージとほぼ同じである必要があります。

(タグは非常に良いものではありませんなら、私を許して、私はこれは行くべき場所がわからないんだけど)

+0

1000x1000グレーのピクセルPNGまたはGIFのサイズはどれくらいですか? 26バイトよりもずっと大きいですか? – Thilo

+0

Hmm。それは明らかです。 :-(SVGは私が推測するように動作しますが、サポートは普遍的ではありません(サーバー背後の寸法を変更できない場合、画像ファイルの種類を変更することはできませんか?) – Thilo

+0

ああ、 SVG。それはそれを受け入れる場合は表示されます:) – Ownaginatious

答えて

4

あなたはおそらく、あなたが特別に細工されたGIFファイルを使用して欲しいものを達成することができます。

GIF formatを使用すると、画像のサイズを定義するファイルの先頭の「論理画面記述子」セクションに「論理画面幅」と「論理画面高さ」の値を指定できます。

しかし、画像全体のピクセルを実際にエンコードする必要はなく、エンコードされていないピクセルはすべて透明に見なされます。代わりに、GIFファイルには、画像のサブ領域のピクセルをエンコードする1つ以上の「画像記述子」セクションが含まれています。これは、GIFアニメーションを圧縮するために使用されます(前のフレームと比較して変化する画像のサブ領域のみがエンコードされる必要があります)が、単一フレームの画像にも使用できます。つまり、画像の1x1透明ピクセル領域をエンコードする単一のImage Descriptorを出力し、論理スクリーンの幅と高さの値を希望の画像サイズに設定して、固定サイズの一様に透明なGIF画像を作成しますファイルサイズ(42バイト)。

this transparent 1x1 pixel GIFのバイト6-9(幅の場合)とバイト10-13(高さの場合)を変更するだけで済みます。 GIFはリトルエンディアンのバイトオーダーを使用することに注意してください。

ここにはexample fileの1024×1024ピクセルの透過GIF画像があります。

このファイルは、GIMPイメージエディタで1k×1kの透明イメージとして正しく読み込まれますが、ファイルビューアの中には、イメージディスクリプタのサイズに基づいてイメージサイズを1x1ピクセルとして表示するものがあります。 AFAIKが間違っています。あなたのサーバーがそれらを正しく読み取るかどうかをテストする必要があります。

+0

ありがとう!あなたの解決策を読む直前にGIF仕様を読んだ後、私は同じことに着いた。 GIFヘッダーのイメージサイズを設定してから、実際のイメージのために数バイトのジャンクを設定するだけで、サーバーを騙すのに十分なようでした:) – Ownaginatious

関連する問題