2011-12-28 5 views
1

私の写真ポートフォリオのフォトアルバムを作成しています。しかし、私は次のことに疑問を抱いています:サムネイルとフォトアルバム

サムネイルをサーバーのファイルシステムに保存するか、サムネイルイメージが要求されたときにサムネイルを動的に生成する必要がありますか?

サムネイルを保存するのは、ファイルが1回(ファイルがアップロードされたとき)に生成されたので、サーバー上の処理が少なくて済みます。しかしサムネイルのサイズが間違っていると私が決定した場合、私には問題があります。また、今は2つのファイルを保存しています(Thumbプラスオリジナル)。

次に、サムネイルに最適なサイズがありますか?私は答えは - サムネイルをどれくらい保存したいのですか?私の問題は、私のthumnailsは最大150の最大または最大150幅にリサイズされているということです。しかし、ファイルのサイズはまだ40kくらいになります。

私はこれを使用しています:

public void ResizeImage(string originalFile, string newFile, int newWidth, int maxHeight, bool onlyResizeIfWider) 
    { 
     System.Drawing.Image fullsizeImage = System.Drawing.Image.FromFile(MapPath(GlobalVariables.UploadPath + "/" + originalFile)); 

     // Prevent using images internal thumbnail 
     fullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone); 
     fullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone); 

     if (onlyResizeIfWider) 
     { 
      if (fullsizeImage.Width <= newWidth) 
      { 
       newWidth = fullsizeImage.Width; 
      } 
     } 

     int newHeight = fullsizeImage.Height * newWidth/fullsizeImage.Width; 
     if (newHeight > maxHeight) 
     { 
      // Resize with height instead 
      newWidth = fullsizeImage.Width * maxHeight/fullsizeImage.Height; 
      newHeight = maxHeight; 
     } 

     System.Drawing.Image newImage = fullsizeImage.GetThumbnailImage(newWidth, newHeight, null, IntPtr.Zero); 

     // Clear handle to original file so that we can overwrite it if necessary 
     fullsizeImage.Dispose(); 
     // Save resized picture 
     newImage.Save(MapPath(GlobalVariables.UploadPath + "/" + newFile)); 
    } 

ファイルサイズを小さくする方法はあり、高い150分の150広いとはかなり小さいです。私は約250に上がりたいですが、もし私が12の親指を見せていれば...ロードするのに時間がかかります。

答えて

2

はい、サムネイルファイルとして保存して、常に処理しないでください。

イメージについては、イメージを分割して圧縮するために使用するサイズであるため、8x8または16x16の配列ブロックに絶対に収まるようにしてください。例えば、それは150X150 8分の150 = 18.75ためするファイルのサイズを減らす152x152なぜなら8分の152 = 19の

[プロパティを使用している

g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality; 
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 

の品質を変更し、ここでの例ではありませんHow to: Use Interpolation Mode to Control Image Quality During Scaling

+0

ブロック情報ありがとうございます。非常に役立ちます。品質で、私はSystem.Drawing.Imageを使用しています - そしてこのオブジェクトタイプdoesn; tは言及された特性を持っています。私はビットマップを代わりに使用して、上記のプロパティを使用して、常にJpegとして保存する必要がありますか? – Craig

+0

@cdotlisterはいあなたがより多くの考えを制御できる、より詳細なサムネイルの手順をよりよく使用してください。 – Aristos

+0

ありがとうございます - これらのプロパティを私のビットマップで使用する方法がわかりません... BitmapObject.InterpolationModeは機能しません。 – Craig

関連する問題