2016-10-24 6 views
0

背景の少し:いずれかのファイルの場所(以前にスキャンされた画像)からの入力を取ることができる保存JPGファイルはC#でサイズが増加

私はWPFを使用してバーコードイメージスキャナデスクトップアプリケーションを書いて、またはスキャナ(NTWAINを使用して)から直接取得されているかどうかを確認します。どちらの場合も、ストリームを作成または取得します。私は、ストリームから新しいビットマップを作成し、

bmp.Save(file.FileFullPath, ImageFormat.Jpeg); 

に建てられたエンコーダ

using (var bmp = Image.FromStream(rawStream)) 
     { 
      EncoderParameter ratio = new EncoderParameter(Encoder.Quality, 100L); 
      EncoderParameter depth = new EncoderParameter(Encoder.ColorDepth, 8L); 
      EncoderParameters codecParams = new EncoderParameters(2); 

      codecParams.Param[0] = ratio; 
      codecParams.Param[1] = depth; 
      ImageCodecInfo jpegCodecInfo = ImageCodecInfo.GetImageEncoders().FirstOrDefault(x => x.FormatID == ImageFormat.Jpeg.Guid); 

      bmp.Save(file.FileFullPath, jpegCodecInfo, codecParams); // Save to JPG 
     } 

かを使用してJPEGファイルとして保存するとき

は今、私ははるかに大きいで終わる傾向にありますファイルサイズ。もちろん、これは必ずしも当てはまるわけではありませんが、小さな白黒のTIFFファイルをメモリに読み込んでjpgとしてエンコードするときは間違いありません。

画像処理に関する私の知識は基本的なものですが、jpgファイルは24ビットの色深度で保存され、最初は1ビットとして保存されていると思います。

私が何をしても、jpgファイルを元のファイルのビット深度に一致させることはできません。

私の周りだけの仕事は単に「filename.jpg」にファイルの名前を変更し、そう

using (Bitmap bmp = new Bitmap(rawStream)) 
    { 
     Save(file.FileFullPath); 
    } 

のように保存されたしかし、これは(、サイドの問題として無期限に動作しません解決策のように感じています一つは、単に.JPG *に任意の* .BMPまたは* TIFFファイルの名前を変更することができ、それはまだ動作します?)

私の初期の研究に基づいて

bmp.Save() 

がencodを尊重していないように思えますjpeg画像のビット深度のパラメータを指定します。理解できないことに、私のクライアントは、ファイルが16KBから200KBまで "無理由"で成長しても幸せにならないでしょう。

この問題については既知の回避策がありますか、ストリームと画像を扱う際に明らかなものがありませんか?

+1

あなたはjpgを再エンコードしています。この新しいjpgで使用している品質設定は、オリジナルを作成するために使用されたものとは異なります。 –

+0

色深度を8Lに設定するコードの行を別のものに変更しようとしましたか? – itsme86

+0

確かに私は持っています。変化なし。 – Richard

答えて

0

JPEGは、色、色合い、グラデーションが多数ある写真に最適です。典型的なビット深度:8(グレースケールの場合)または24(フルカラーの場合)。

モノクロ(1ビット)が必要な場合は、JPEGを使用することをお勧めします.JPEGでは写真に関係なく、「追加された唐辛子と塩」のようなエンコードアーティファクトが導入されるためです元のソースは1ビットです。そして、あなたがそれらを圧縮すればするほど、それはより多くなります。

代わりにPNGを使用してみてください。このようなアーティファクトはなく、エッジが鋭いデジタルソースに適しています。

オリジナルのマイクロドットを出力の小さな勾配に変換するスマートサイズ変更アルゴリズム(8ビット出力など)を使用して、TIFFを50%または75%小さくすることもできます。私はずっと前に1ビットのファックス/スキャナ画像を使って、実際にはかなり良い結果を出しました。しかし、これらの情報源はまだまだあります。

+0

それで、スキャンした画像を保存するために画像タイプを選択しなければならない場合(ウェブ表示のためにtiffから離れて1つのフォーマットを持つ必要があります)、それはpngですか? jpgはファイルサイズが小さいために適していますが、何らかの理由で逆の効果があるようです。 – Richard

+0

グラデーションを持てないようにサイズを変更できない場合は、PNGをお勧めします(チェックしただけで、1ビットカラーモードになっています)。サイズを変更したい場合は、PNGはロスレス、JPEGはロスレス、最も効率的なのはJPEG圧縮の程度によります。 –

関連する問題