gpt4 book ai didi

java - 如何将 RenderedImage 序列化和反序列化为文本字符串?

转载 作者:行者123 更新时间:2023-11-30 08:43:41 26 4
gpt4 key购买 nike

我想将 RenderImage 序列化为文本字符串,这样我就可以用 Java 编写一个带有某些字段(名称、日期、照片)的类似 Jason 的文件。

我想用

String s = String.format("%s:%s,%s:%s,%:%s", 
"name", my_name,
"date", date,
"photo", someFunctionToGenerateAStringForTheImage(RenderedImage));

并将s保存到一个文件中。

目前,我正在使用这个:

public static byte[] imageToByteArray(RenderedImage img) {
try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
ImageIO.write(img, "png", out);
out.flush();
return out.toByteArray();
} catch (IOException e) {
throw new RuntimeException(e);
}
}

我这样调用它:

String imageAsString =new String(Util.imageToByteArray(post.getImage()));

我使用以下函数反序列化字符串:

public static RenderedImage byteArrayToImage(byte[] bytes) {
try (ByteArrayInputStream in = new ByteArrayInputStream(bytes)) {
return ImageIO.read(in);
} catch (IOException e) {
throw new RuntimeException(e);
}
}

因此我这样调用它 byteArrayToImage(imageAsString.getBytes());

不幸的是,这种方法不起作用,生成的对象不一样...我想使用 String.format 来实现它,因为我的代码要复杂得多并且充满了递归调用,所以我想要最简单的实现这一目标的方法。

你能给我推荐什么?

最佳答案

您可以尝试使用 Data URL :

public static String imageToDataUrl(RenderedImage img) { 
ByteArrayOutputStream bytes = new ByteArrayOutputStream();

try {
ImageIO.write(img, "png", bytes);
} catch (IOException e) {
throw new RuntimeException(e);
}

String data = DatatypeConverter.printBase64Binary(bytes.toByteArray()),
//proper data url format
dataUrl = "data:image/png;base64," + data;

return dataUrl;
}

反序列化:

public static RenderedImage dataUrlToImage(String dataUrl) {
String data = dataUrl.substring(dataUrl.indexOf(',')+1);
byte[] bytes = DatatypeConverter.parseBase64Binary(data);

try (ByteArrayInputStream in = new ByteArrayInputStream(bytes)) {
return ImageIO.read(in);
} catch (IOException e) {
throw new RuntimeException(e);
}
}

关于java - 如何将 RenderedImage 序列化和反序列化为文本字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34104218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com