使用 GDI+ 调整图像大小

2023-12-09

我真的很想从这段代码中找出更多的性能。它不是大量使用的代码,但每次上传新图像时都会使用,并且每个图像使用 4 次(100px、200px、500px、700px)。因此,当处理的图像超过 2 或 3 个时,服务器会变得有点忙。另外,我正在尝试弄清楚如何使其正确处理低分辨率的图像。目前它只是将其砍掉一半,不令人愉快。 例子:Original, large, xLarge

public static byte[] ResizeImageFile(byte[] imageFile, int targetSize)
{
    using (System.Drawing.Image oldImage = System.Drawing.Image.FromStream(new MemoryStream(imageFile)))
    {
        Size newSize = CalculateDimensions(oldImage.Size, targetSize);

        using (Bitmap newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format32bppRgb))
        {
            newImage.SetResolution(oldImage.HorizontalResolution, oldImage.VerticalResolution);
            using (Graphics canvas = Graphics.FromImage(newImage))
            {
                canvas.SmoothingMode = SmoothingMode.AntiAlias;
                canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
                canvas.PixelOffsetMode = PixelOffsetMode.HighQuality;
                canvas.DrawImage(oldImage, new Rectangle(new Point(0, 0), newSize));
                MemoryStream m = new MemoryStream();
                newImage.Save(m, ImageFormat.Jpeg);
                return m.GetBuffer();
            }
        }

    }
}

private static Size CalculateDimensions(Size oldSize, int targetSize)
{
    Size newSize = new Size();
    if (oldSize.Width > oldSize.Height)
    {
        newSize.Width = targetSize;
        newSize.Height = (int)(oldSize.Height * (float)targetSize / (float)oldSize.Width);
    }
    else
    {
        newSize.Width = (int)(oldSize.Width * (float)targetSize / (float)oldSize.Height);
        newSize.Height = targetSize;
    }
    return newSize;
}

感谢和帮助!


第一个想到的是,你考虑过多线程吗?即在单独的线程中为每个图像(或一批图像)调用此方法?这样,如果您的服务器有几个核心,您就可以更快地完成工作。只是一个想法...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 GDI+ 调整图像大小 的相关文章

  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr

随机推荐

  • 程序崩溃时如何释放资源

    我有一个使用其他人的服务的程序 如果程序崩溃 关闭这些服务的最佳方法是什么 在服务器端 我将定义一些检查器来定期监视客户端是否无效 但是我们可以在客户端做任何事情吗 我不确定正常的 RAII 在这种情况下是否仍然有效 我的代码是用 C 和
  • Http Api 调用承诺的响应未定义 - Angular 2

    我在 WebAPI 中创建了一个 api 如下所示 public HttpResponseMessage Get var response Request CreateResponse HttpStatusCode OK response
  • 在弹出窗口中显示地图 v2 在 Android 中不显示?

    我想打开弹出窗口 我使用地图 v2 在弹出窗口中显示地图 v2 但不显示 在这里我放置了我的 xml 布局和活动类 main xml
  • 如何在 CUDA 中使用 2D 数组?

    如何分配大小为 MXN 的二维数组 那么如何在 CUDA 中遍历该数组呢 global void test int A BLOCK SIZE BLOCK SIZE int B BLOCK SIZE BLOCK SIZE int C BLOC
  • R中的正则表达式删除字符串最后一个空格之后的部分

    我想要一个gsubR 中的表达式用于删除字符串中最后一个空格之后出现的所有内容 例如 string Da Silva UF 应该归还我 Da Silva 有什么想法吗 Using anchor gt string Da Silva UF g
  • GL_TRIANGLES 有效,但 GL_QUADS 不显示任何内容

    所以我从一个程序切换到另一个程序 我不明白为什么 但 GL QUADS 将不再显示相同的代码 为了尝试找出为什么旧代码不起作用 我编写了这个新的简单代码 但它仍然不起作用 设置 vector
  • Windows 上的 xlwings 和 python 3.5

    我已经被困了一段时间了 我的配置是 python 3 5 xlwings 0 5 0 and Windows 7 我在尝试时得到以下回溯import xlwings Traceback most recent call last File
  • NASM 一次打印一个字符

    为什么这个程序没有打印到屏幕上 我是否遗漏了 INT 80 命令中的某些内容 section bss section data hello db Hello World 0xa 10 is EOL section text global s
  • Android:如何在某些活动上隐藏 ActionBar

    我开发了一个简单的演示应用程序 其中包含启动屏幕 地图和一些常规屏幕 我的顶部有一个包含徽标的操作栏 在我的手机 Galaxy s1 I9000 V2 3 上一切看起来都很好 但是当我在 Galaxy s2 v4 上测试它时 操作栏也出现在
  • Unity 纸板方向横向颠倒

    您好 我有一个 Unity 应用程序 它使用 google Cardboard SDK 来启用立体视图 因此我将有一个支持 VR 的应用程序 我的应用程序运行得很好 但是 如果我将播放器设置方向设置为自动方向 并且只允许向左横向和向右横向
  • C 中一元加 (+) 运算符的用途是什么?

    在 C 语言中 这样写是合法的 int foo 4 然而 据我所知 一元加 in 4是一个空操作 是吗 您可以将其用作表达式具有算术类型的一种断言 define CHECK ARITHMETIC x x 如果出现以下情况 这将生成编译时错误
  • Django:在信号中获取 m2m 相关对象

    我有点想看到类似的问题 Django 从 post save 信号访问 ManyToMany 字段 但仍然没有看到如何获取更新的相关对象列表 例如 我有以下型号 class User models Model username models
  • 在我的 x64 笔记本电脑上将平台目标设置为 x86 会阻止某些 WPF 类型正确加载

    我有一台运行 Windows 7 64 位的 x64 计算机 自本周初以来 我的情况似乎很奇怪 如果我构建并运行一个平台目标设置为 x86 的 WPF 应用程序 则在尝试创建网格时遇到 MissingMethodException var
  • 为什么无论代码中的顺序如何,alert() 对话框都会首先显示?

    在下面的代码示例中 我希望 div 中的文本首先发生变化 但只有在我在警报对话框中单击 确定 后 文本才会更改 var x 0 function counter x document getElementById aDiv innerHTM
  • 处理屏幕方向 - Android

    我的应用程序中的屏幕方向出现问题 我在 res layout lan 文件夹中为横向模式创建了备用布局 问题发生在方向改变时 1 重新创建一个活动而不破坏旧的活动 2 由于我在应用程序中使用媒体播放器 因此在屏幕旋转时 mp3 同时在两个方
  • Apache:客户端被服务器配置拒绝

    我正进入 状态 2012 年 4 月 24 日星期二 12 12 55 错误 客户端 127 0 0 1 客户端被服务器配置拒绝 labs Projects Nebula bin 我的目录结构如下所示 我使用的是 Symfony 2 其他
  • 为什么自托管 gitlab 运行程序在克隆存储库并在自托管运行程序上执行作业时遇到问题

    我目前正在研究 GitLab 运行程序 以更好地了解它们在 CI CD 管道环境中的工作方式 我按照 GitLab 文档中的说明创建了一个自我管理的运行器 即我的个人 Windows 笔记本电脑 安装了 GitLab Runner 可执行文
  • 是否可以使用私有 API 在 iPhone 上运行后台进程?

    我不打算将应用程序发送到商店 而是进行有限分发 我在想 如果我可以使用私有 API 进行后台处理 那么我就可以加入 iphone 开发者企业计划 并在我的公司内分发一个在后台运行的应用程序 我想这个问题的延伸是 如果我是一名企业开发人员 有
  • 将数据库从 Postgres 迁移到 MySQL [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我已更改数据库PostgreSQL to mysql 但我不知道如何将数据从一个传输到另一个 有谁知道我可以从中复制 迁移数据库的任何命令Postg
  • 使用 GDI+ 调整图像大小

    我真的很想从这段代码中找出更多的性能 它不是大量使用的代码 但每次上传新图像时都会使用 并且每个图像使用 4 次 100px 200px 500px 700px 因此 当处理的图像超过 2 或 3 个时 服务器会变得有点忙 另外 我正在尝试