我想将RenderImage序列化为文本字符串,这样我就可以将java作为一个类似Jason的文件,包含一些字段(Name,Date,Photo)。
我想用
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,因为我的代码更加复杂,并且充满了递归调用,所以我想要实现这一目标的最简单方法。
你能推荐我什么?
答案 0 :(得分:2)
您可以尝试使用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);
}
}
答案 1 :(得分:0)
创建课程
// GET: Repairing/Edit/5
public ActionResult Edit(int? id)
{
var vm = new ComplainDetailsVm();
var r = db.REPAIRINGs.Find(id);
var c = db.COMPLAINs.Find(id);
if (r != null)
{
vm.REPAIRINGs = r;
vm.COMPLAINs = c;
}
//ViewData["LIST_ESTIMATE_AMOUNT_OK_FROM_CUSTOMER"] = lstOKNOTOK;
return View("EditRepairingComplain",vm);
}
并使用任何json lib,例如GSON:
class MyImage {
String name;
Date date;
String photo;
}
<强>更新强>: 如果序列化图像有问题,请尝试使用:
String s = new GSON.toJson(myImage).replace('{'}.replace{'}');
MyImage myImage = new GSON.fromJson("{"+s+"}", MyImage.class);
而不是
String s = new String(utf8Bytes);
byte [] defaultBytes = original.getBytes();