5

最近、ASP.NET MVC 4アプリケーションで画像のサイズを動的に変更するために、ImageResizer.Net overGDI +の使用を開始しました。

ImageResizerのみを使用して、画像(バイト配列として読み込まれる)の実際の解像度(DPI、PPI、あなたがそれを呼びたいものは何でも)を決定する方法はありますか?現在、次のようなワークフローがあり、必要に応じて画像のサイズを指定された低解像度に変更します。

//pseudo-code
var image = (Bitmap)Bitmap.FromStream(contentStream)
var resX = image.HorizontalResolution;
var resY = image.VerticalResolution;
//calculate scale factor
//determine newHeight and newWidth from scale
var settings = new ResizeSettings("width={newWidth}&height={newHeight}")
var newImage = ImageBuilder.Current.Build(image, someNewImage, settings);

これは正常に機能しますが、GDI +とImageResizerが混在しており、同じデータのストリームの開閉がたくさんあります(実際のコードは少し冗長で、多くのusingステートメントがあります)。

ImageResizerだけを使用して水平解像度と垂直解像度を決定する方法はありますか?ドキュメントにすぐに何も見つかりませんでした。

今のところ、マネージAPIを使用していますが、最終的にはMVCルーティングを使用する予定です。

4

2 に答える 2

3

これはかなり非典型的なシナリオです。通常、着信DPI値は無意味です。

ただし、これらの値を制御し、サイズ計算を実行するためにそれらが必要であるように見えるため、プラグインをお勧めします。それらは簡単で、労力を重複させないので理想的なパフォーマンスを提供します。

public class CustomSizing:BuilderExtension, IPlugin {

    public CustomSizing() { }

    public IPlugin Install(Configuration.Config c) {
        c.Plugins.add_plugin(this);
        return this;
    }

    public bool Uninstall(Configuration.Config c) {
        c.Plugins.remove_plugin(this);
        return true;
    }
    //Executes right after the bitmap has been loaded and rotated/paged
    protected override RequestedAction PostPrepareSourceBitmap(ImageState s) {
        //I suggest only activating this logic if you get a particular querystring command.
        if (!"true".Equals(s.settings["customsizing"], 
            StringComparison.OrdinalIgnoreCase)) return RequestedAction.None;

        //s.sourceBitmap.HorizontalResolution
        //s.sourceBitmap.VerticalResolution

        //Set output pixel dimensions and fit mode
        //s.settings.Width = X;
        //s.settings.Height = Y;
        //s.settings.Mode = FitMode.Max;

        //Set output res.
        //s.settings["dpi"] = "96";
        return RequestedAction.None;
    }
 }

インストールは、コードまたはWeb.Configを介して実行できます。

new CustomSizing()。Install(Config.Current);

またはリサイザーの構成セクション

   <plugins>
     <add name="MyNamespace.CustomSizing" />
   </plugins>
于 2012-05-11T12:56:11.383 に答える
1

これはあなたが探しているものですか?

http://nathanaeljones.github.com/resizer-docs/docu/ImageResizer.Resizing/ImageState.htm#originalSize

于 2012-05-08T13:23:46.970 に答える