java - 如何从 Azure Java 函数返回 2D BufferedImage?

标签 java azure function javax.imageio

无法弄清楚如何从无服务器 Azure 函数返回缓冲图像。在 Google 上找不到任何现有示例。有人知道如何做到这一点吗?

@FunctionName("HttpExample")
public HttpResponseMessage run(
        @HttpTrigger(
            name = "req",
            methods = {HttpMethod.GET, HttpMethod.POST},
            authLevel = AuthorizationLevel.ANONYMOUS)
            HttpRequestMessage<Optional<String>> request,
        final ExecutionContext context) {
    context.getLogger().info("Java HTTP trigger processed a request.");

    final Integer scale = Integer.parseInt(request.getQueryParameters().get("scale"));
    final String text = request.getQueryParameters().get("text");
    final String fillColor = request.getQueryParameters().get("fillColor");

    BufferedImage bufferedImage = new BufferedImage(30 * scale, 30 * scale, BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2d = bufferedImage.createGraphics();

    g2d.setColor(Color.BLACK);
    g2d.fillRect(0, 0, 30 * scale, 30 * scale);

    g2d.setColor(Color.WHITE);
    g2d.setFont(new Font("Serif", Font.BOLD, 20));
    g2d.drawString(text, 10, 26);

    g2d.dispose();

    if (text == null || text.trim().length() == 0) {
        return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("Please pass the 3 required parameter names.").build();
    } else {
        OutputStream out = ??????
        return request.createResponseBuilder(HttpStatus.OK)
            .body(ImageIO.write(bufferedImage, "png", out))
            .build();
    }
    
}

最佳答案

我明白了。只需返回原始字节[]:

    } else {
        try {
        return request.createResponseBuilder(HttpStatus.OK)
            .header("Content-Type", "image/png")
            .body(toByteArray(bufferedImage, "png"))
            .build();
        } catch (IOException e) {
            return request.createResponseBuilder(HttpStatus.BAD_REQUEST).body("There was an error: " + e.getMessage()).build();
        }
    }
    
}

public static byte[] toByteArray(BufferedImage bi, String format) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ImageIO.write(bi, format, baos);
    return baos.toByteArray();
}

我想知道是否有更好的方法来做到这一点。

关于java - 如何从 Azure Java 函数返回 2D BufferedImage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65417688/

相关文章:

java - 一般建议?用于 JAVA 中的 ACH 缓冲读取器/写入器的 GUI

azure - 无法从 VSTS 连续集成将服务结构应用程序部署到 azure 远程集群

c# - 通知中心传递失败 C#

c - 将我的数组转换为函数并创建第二个函数来打印它

java - 为什么java导入org.apache.http包后找不到StringEntity类?

java - MLKit 对象检测未检测到对象

java - 我在反转这个链表的一部分时做错了什么?

node.js - 如何在 Azure Easy API 中启用 Swagger UI

javascript - 在 JS 中自行执行并调用函数

function - 将值发送到另一个函数golang