【发布时间】:2013-05-14 19:07:12
【问题描述】:
我有一个将图像转换为 JSON 数组的应用程序,并将其保存到 blob 字段中:
function getImage(): String;
var
memorystream : TMemoryStream;
jsonArray : TJSONArray;
begin
memorystream := TMemoryStream.Create;
myImage.Picture.Graphic.SaveToStream(memorystream);
memorystream.Position := 0;
jsonArray := TJSONArray.Create;
jsonArray := TDBXJSONTools.StreamToJSON(memorystream, 0, memorystream.Size);
memorystream.Free;
Result := jsonArray.ToString;
end;
PNG图片的转换结果如下:
[137,80,78,71,13,10,26,10,0,0, ... ]
此结果存储在我使用此代码返回的 blob 字段中:
stream := TStream.Create;
stream := cdsPesquisa.CreateBlobStream(fieldAux, bmRead);
stream.Position := 0;
jsonArray := TJSONArray.Create;
jsonArray := TDBXJSONTools.StreamToJSON(stream, 0, stream.Size);
这里,我一开始有相同的JSON字符串[137,80,78,71,13,10,26,10,0,0, ... ],但是我需要再次将这个JSON数组转换成图像。
我怎样才能做到这一点?
【问题讨论】:
-
存储为 json 字符串会大大增加存储需求。例如文本形式的
137是 3 个字节,v.s.如果您存储为原始 0x89 十六进制字节,则为 1 个字节。 -
按理说,如果您使用
TDBXJSONTools.StreamToJSON转换为数组以输出,则需要使用TDBXJSONTools.JSONToStream反转返回。但是,将其转换为 JSONArray 以将其存储到 TBlobField 然后再将其转换回来是没有意义的,因为您可以只保存原始数据而无需首先进行转换。 -
好吧,我可以将其更改为发送 json 字符串,而不是使用十六进制发送字节,但这不是我的问题。我需要将此字符串发送到我的服务器。感谢回复
-
感谢 Ken,但我只是第一次使用此转换,因为我需要将此字符串传递给 SQL,因为我不在线使用 clientdataset。
-
@Ken 如果看起来我偷了你的答案,对不起。我写了代码,完全错过了所有的 JSON。然后我看到你的评论说这是不必要的。
标签: json delphi delphi-xe2 datasnap