0

我在我的 ASP.NET 应用程序中自动调整图像大小,以便创建该图像的低分辨率缩略图。这段代码工作正常。调整大小后,我尝试向该图像添加“缩略图符号”,例如小放大镜或加号,但结果因图像大小而异。

请注意:原始图像仅调整到一定宽度,因此图像的高度不同。

我的代码如下所示:

private static byte[] InsertThumbnailSign(byte[] imageBuffer, string signPath)
{
    byte[] output = null;
    MemoryStream stream = new MemoryStream(imageBuffer);
    Image image = Image.FromStream(stream);

    // Add the thumbnail-sign
    Image thumbNailSign = Image.FromFile(signPath);
    Graphics graphic = Graphics.FromImage(image);
    graphic.DrawImageUnscaled(thumbNailSign, image.Width - thumbNailSign.Width - 4, image.Height - thumbNailSign.Height - 4);
    graphic.Flush();

    MemoryStream memoryStream = new MemoryStream();
    image.Save(memoryStream, ImageFormat.Jpeg);
    output = new byte[memoryStream.Length];
    memoryStream.Position = 0;
    memoryStream.Read(output, 0, (int)memoryStream.Length);
    memoryStream.Close();

    stream.Dispose();
    graphic.Dispose();
    memoryStream.Dispose();

    return output;
}

在我看来,缩略图标志应该有一个恒定的大小,但事实并非如此。您对如何实现这一目标有任何想法吗?

编辑:刚刚编辑了代码以了解不同的分辨率。但它仍然不起作用:

private static byte[] InsertThumbnailSign(byte[] imageBuffer, string signPath)
{
    byte[] output = null;
    MemoryStream stream = new MemoryStream(imageBuffer);
    Image image = Image.FromStream(stream);

    // Add the thumbnail sign with resolution of the containing image
    Bitmap t = (Bitmap)Bitmap.FromFile(signPath);
    t.SetResolution(image.HorizontalResolution, image.VerticalResolution);
    Image thumbNailSign = t;

    Graphics graphic = Graphics.FromImage(image);
    graphic.DrawImageUnscaled(thumbNailSign, image.Width - thumbNailSign.Width - 4, image.Height - thumbNailSign.Height - 4);
    graphic.Flush();

    MemoryStream memoryStream = new MemoryStream();
    image.Save(memoryStream, ImageFormat.Png);
    output = new byte[memoryStream.Length];
    memoryStream.Position = 0;
    memoryStream.Read(output, 0, (int)memoryStream.Length);
    memoryStream.Close();

    stream.Dispose();
    graphic.Dispose();
    memoryStream.Dispose();

    return output;
}
4

2 回答 2

0

TombMedia 是对的。决议是重点。

我在我的调整大小算法中发现了一个错误,它导致 firefox 调整图像大小并导致插入图像的大小不同。

修复该错误并调整分辨率后,它工作正常。感谢您的提示!

于 2013-09-17T15:43:54.110 回答
0

确保在调整大小之前将所有图像标准化为一致的 DPI/PPI 和/或在创建要叠加的“标志”图像时使用该 DPI。

一个 300 DPI 2" 宽的图像是 600 像素宽,如果 DPI 设置为 72 DPI,您还可以拥有一个 600 像素宽并且宽度超过 8" 的图像。

请参阅此问题,其中包含示例代码链接,以获取有关您的图形 obj 的更多详细信息。

于 2013-09-16T02:40:26.537 回答