gpt4 book ai didi

java - 如何从服务器发回图像? (编辑)

转载 作者:行者123 更新时间:2023-11-30 06:47:06 30 4
gpt4 key购买 nike

我有一个创建二维码的网络服务器。在此过程中,我得到一个 BarcodeQRCode 对象,我可以从中获取图像 (.getImage())。

我不确定如何将这张图片发回给客户。我不想将它保存在文件中,而只是响应 JSON 请求发回数据。有关信息,我有一个类似的案例,我从中获得了一个效果很好的 PDF 文件:

private ByteArrayRepresentation getPdf(String templatePath, JSONObject json) throws IOException, DocumentException, WriterException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfStamper stamper = new PdfStamper(..., baos);
// setup PDF content...
return new ByteArrayRepresentation(baos.toByteArray(), MediaType.APPLICATION_PDF);
}

有没有办法做一些或多或少类似的事情:

private ByteArrayRepresentation getImage(JSONObject json) throws IOException, DocumentException, WriterException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Image qrCode = getQRCode(json); /// return the BarcodeQRCode.getImage()

ImageIO.write(qrCode, "png", baos);
return new ByteArrayRepresentation(baos.toByteArray(), MediaType.IMAGE_PNG);
}

但这行不通。我得到:参数不匹配;无法将图像转换为 RenderedImage。

编辑

按照下面的建议修改后没有编译错误。但是,返回的图像似乎是空的(或者至少不正常)。如果有人知道哪里出了问题,我会放上无错误代码:

    @Post("json")
public ByteArrayRepresentation accept(JsonRepresentation entity) throws IOException, DocumentException, WriterException {
JSONObject json = entity.getJsonObject();
return createQR(json);
}

private ByteArrayRepresentation createQR(JSONObject json) throws IOException, DocumentException, WriterException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Image codeQR = getQRCode(json);
BufferedImage buffImg = new BufferedImage(codeQR.getWidth(null), codeQR.getHeight(null), BufferedImage.TYPE_4BYTE_ABGR);
buffImg.getGraphics().drawImage(codeQR, 0, 0, null);

return new ByteArrayRepresentation(baos.toByteArray(), MediaType.IMAGE_PNG);
}

private Image getQRCode(JSONObject json) throws IOException, DocumentException, WriterException {
JSONObject url = json.getJSONObject("jsonUrl");
String urls = (String) url.get("url");
BarcodeQRCode barcode = new BarcodeQRCode(urls, 200, 200, null);
Image codeImage = barcode.createAwtImage(Color.BLACK, Color.WHITE);

return codeImage;
}

最佳答案

首先,将图像转换为RenderedImage:

BufferedImage buffImg = new BufferedImage(qrCode.getWidth(null), qrCode.getHeight(null), BufferedImage.TYPE_4BYTE_ABGR);
buffImg.getGraphics().drawImage(qrCode, 0, 0, null);

关于java - 如何从服务器发回图像? (编辑),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46540306/

30 4 0