4

少し奇妙な質問で、誰かがこれに出くわしたことがあるかどうかはわかりません。

ファイルシステムに物理的なサムネイル jpeg ファイルを生成し、フルサイズの画像を別の場所にコピーする ASP.net ページがあります。したがって、1 つの画像を入力すると、完全なコピーが 1 つの場所に取得され、102*68 の小さな画像が別の場所に取得されます。

現在、サーバー 2003 の IIS6 からサーバー 2008R2 の IIS7.5 への移行を最終的に検討していますが、問題はありません。

古いシステム (つまり IIS6/Server 2003) では、黒い境界線が削除され、画像は正しい比率のままになります。新しいシステム (IIS7.5/Server 2008) では、サムネイルは JPEG に存在するものとまったく同じようにレンダリングされ、黒い境界線が表示されますが、これによりサムネイルがわずかに押しつぶされ、明らかに醜い黒い境界線が含まれます。

なぜこれが起こっているのか誰にも分かりますか?私はグーグルをやったが、どの動作が「正しい」のか分からないようだ。私の直感では、新しいシステムがサムネイルをそのまま正しくレンダリングしていることがわかりますが、わかりません。

誰でも問題を解決する方法を提案していますか?

4

1 に答える 1

0

示唆されているように、それは.netの違いだと思います。IIS ではありません。

コードを書き直すだけで、多くの時間を節約でき、非常に簡単なことです。

これは、私が少し前に書いた画像ハンドラーで、設定に画像を再描画します。

public class image_handler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
    // set file
    string ImageToDraw = context.Request.QueryString["FilePath"];
    ImageToDraw = context.Server.MapPath(ImageToDraw);


    // Grab images to work on's true width and height
    Image ImageFromFile = Image.FromFile(ImageToDraw);
    double ImageFromFileWidth = ImageFromFile.Width;
    double ImageFromFileHeight = ImageFromFile.Height;
    ImageFromFile.Dispose();

    // Get required width and work out new dimensions
    double NewHeightRequired = 230;

    if (context.Request.QueryString["imageHeight"] != null)
        NewHeightRequired = Convert.ToDouble(context.Request.QueryString["imageHeight"]);

    double DivTotal = (ImageFromFileHeight / NewHeightRequired);
    double NewWidthValue = (ImageFromFileWidth / DivTotal);
    double NewHeightVale = (ImageFromFileHeight / DivTotal);

    NewWidthValue = ImageFromFileWidth / (ImageFromFileWidth / NewWidthValue);
    NewHeightVale = ImageFromFileHeight / (ImageFromFileHeight / NewHeightVale);


    // Set new width, height
    int x = Convert.ToInt16(NewWidthValue);
    int y = Convert.ToInt16(NewHeightVale);

    Bitmap image = new Bitmap(x, y);
    Graphics g = Graphics.FromImage(image);
    Image thumbnail = Image.FromFile(ImageToDraw);

    // Quality Control
    g.InterpolationMode = InterpolationMode.HighQualityBicubic;
    g.SmoothingMode = SmoothingMode.HighQuality;
    g.PixelOffsetMode = PixelOffsetMode.HighQuality;
    g.CompositingQuality = CompositingQuality.HighQuality;
    g.DrawImage(thumbnail, 0, 0, x, y);
    g.Dispose();

    image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
    image.Dispose();
}

public bool IsReusable
{
    get
    {
        return true;
    }
}
于 2013-04-22T08:30:49.830 に答える