さまざまなサイズの画像のアップロードを許可する作業を行ってから、サムネイル用に画像の事前定義された領域をトリミングできるようにします。
サムネイルのサイズは 150x150 に事前定義されています。Jcrop.jsツールを 使用して画像のセクションを選択します。
問題:
レンダリングされた画像に設定された高さ/幅を実装することにより、アップロードされた画像を元の画像よりも小さいサイズで表示する場合、トリミングする領域を選択するときに使用される倍率があります。
トリミング領域を比例して縮小するか、表示されたサイズと比較して実際の画像のサイズに合わせて画像を拡大縮小する必要があります。
質問:
ブラウザに表示された画像と元の画像の縮尺をどのように把握すればよいですか? 現在、次のコードを使用して画像を保存していますが、スケーリングをどのように考慮しますか?
public static Image CropImage(Image originalImage, int x, int y, int width, int height)
{
var bmp = new Bitmap(width, height);
bmp.SetResolution(originalImage.HorizontalResolution, originalImage.VerticalResolution);
using (var graphic = Graphics.FromImage(bmp))
{
graphic.SmoothingMode = SmoothingMode.AntiAlias;
graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphic.PixelOffsetMode = PixelOffsetMode.HighSpeed;
graphic.DrawImage(originalImage, new Rectangle(0, 0, width, height), x, y, width, height, GraphicsUnit.Pixel);
return bmp;
}
}
ボーナス質問:
私が発見したもう 1 つの問題は、新しい Bitmap を作成するときに元のファイルの ImageFormat を転送する効率的な方法がないようで、ImageFormatMemoryBMP
Bitmap.Save(memorystream, original rawformat) を呼び出そうとすると爆発することです。ビットマップの RawFormat にはセッターがありません。
では、新しいビットマップにフォーマットを設定するにはどうすればよいでしょうか?