You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell Azure Function处理Blob图片时Byte[]与Image互转故障咨询

PowerShell Azure Function 图片处理故障解决方案

核心故障点

  • .NET方法调用缺失括号:PowerShell中调用.NET实例方法必须添加括号,示例中$o_ms.ToArray、$i_ms.ToArray属于错误写法,实际返回的是方法元数据而非执行结果,正确写法为$o_ms.ToArray()
  • 内存流指针位置异常:调用[System.Drawing.Image]::FromStream($i_ms)读取流内容后,内存流的指针会移动到流末尾,直接调用ToArray()会得到空数组或者不完整数据
  • 非托管资源未释放:Image、MemoryStream这类包含非托管资源的对象使用后未主动释放,容易引发内存溢出、流占用异常
  • 类库兼容问题:如果你的Azure Function运行在Linux消费计划中,System.Drawing.Common默认不可用,需要替换为跨平台图像处理库

精简逻辑修复代码(用于验证转换流程)

# 可选:如果提示找不到System.Drawing类型,先添加程序集引用
# Add-Type -AssemblyName System.Drawing

$i_ms = New-Object System.IO.MemoryStream(,$InputBlob)
try {
    $i_image = [System.Drawing.Image]::FromStream($i_ms)
    try {
        # 重置内存流指针到起始位置
        $i_ms.Position = 0
        # 正确调用ToArray方法获取字节数组
        $OutputBlob = $i_ms.ToArray()
    } finally {
        # 释放Image资源
        $i_image.Dispose()
    }
} finally {
    # 释放内存流资源
    $i_ms.Dispose()
}

Push-OutputBinding -Name outputBlob -Value $OutputBlob

完整图片缩放功能修复代码

# 可选:如果提示找不到System.Drawing类型,先添加程序集引用
# Add-Type -AssemblyName System.Drawing

$i_ms = New-Object System.IO.MemoryStream(,$InputBlob)
try {
    $i_image = [System.Drawing.Image]::FromStream($i_ms)
    try {
        # 可根据需求自定义缩放逻辑,示例为等比例缩小到原尺寸的50%
        [int32]$new_width = $i_image.Width * 0.5
        [int32]$new_height = $i_image.Height * 0.5
        $o_image = $i_image.GetThumbnailImage($new_width, $new_height, $null, [intptr]::Zero)
        try {
            $o_ms = New-Object System.IO.MemoryStream
            try {
                $o_image.Save($o_ms, [System.Drawing.Imaging.ImageFormat]::JPEG)
                $OutputBlob = $o_ms.ToArray()
            } finally {
                $o_ms.Dispose()
            }
        } finally {
            $o_image.Dispose()
        }
    } finally {
        $i_image.Dispose()
    }
} finally {
    $i_ms.Dispose()
}

Push-OutputBinding -Name outputBlob -Value $OutputBlob

注意事项

  • 如果运行环境为Linux计划,可替换System.Drawing为跨平台兼容的ImageSharp图像处理库,通过requirements.psd1引入对应NuGet包即可使用
  • 处理大体积图片时建议增加流长度校验、异常捕获逻辑,避免运行时异常导致函数崩溃

内容的提问来源于stack exchange,提问作者Key Va

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:36:01