代码之家  ›  专栏  ›  技术社区  ›  Soon Santos

照片仅以.jpg格式保存到datasnap,而不以.png格式保存

  •  0
  • Soon Santos  · 技术社区  · 6 年前

    我正在使用Datasnap将照片编码为base64,并将其发送到服务器,代码如下:

    将图像转换为base64并以Json格式发送到服务器。

    Memoria := TMemoryStream.Create;
    Imagem.Picture.Bitmap.SaveToStream(Memoria);
    Memoria.Position := 0;
    StrEnv := TStringStream.Create;
    TNetEncoding.Base64.Encode(Memoria, StrEnv);
    StrEnv.Position := 0;
    JOImagem := TJSONObject.Create;
    JOImagem.AddPair('photo', StrEnv.DataString);
    

    获取base64图像并将其保存为jpg图像。

    lInStream := TStringStream.Create(JsonObj.GetValue('photo').Value);
    lInStream.Position := 0;
    lOutStream := TMemoryStream.Create;
    TNetEncoding.Base64.Decode(lInStream, lOutStream);
    lOutStream.Position := 0;
    lOutStream.SaveToFile('photo-name' + '.jpg');
    

    案例1。

    如果我直接从网络摄像头拍摄照片,图像将成功保存。

    案例2。

    如果我从计算机上拍摄.png或.jpg照片(使用OpenPictureDialog)并保存它。它被保存了,但当我打开它时,它说:

    我们不支持此文件格式。

    它只是工作,如果我采取的照片使用网络摄像头,它不工作,如果我得到它从电脑。

    0 回复  |  直到 6 年前
        1
  •  1
  •   Remy Lebeau    6 年前

    访问 TImage.Picture.Bitmap 属性强制图片保留BMP图像(清除任何当前非BMP图像)。这是 documented behavior :

    使用 Bitmap Types of Graphic Objects ). 相反,图片的原始内容被丢弃并 返回一个新的空白位图。

    Bitmap.SaveToStream() 永远不会保存为BMP以外的任何格式。

    如果将BMP以外的任何格式加载到 Picture Picture.Graphic Picture.Bitmap 属性,例如:

    Imagem.Picture.Graphic.SaveToStream(Memoria);