我有Delphi 10.3.2我不了解这种情况:
1)正在上传约1M的照片
image1.Bitmap.LoadFromFile('test.jpg');
然后我保存了同一张照片
image1.Bitmap.SaveToFile('test_new.jpg');
和test_new.jpg约为3M。为什么???
2)
我想使用IdHTTP和POST请求从TImage(test1.jpg-1MB)对象发送照片到服务器。我使用功能Base64_Encoding_stream对图像进行编码。对该函数进行编码后,图像大小(字符串)为20 MB! ?为什么原始文件有1MB?
function Base64_Encoding_stream(_image:Timage): string;
var
base64: TIdEncoderMIME;
output: string;
stream_image : TStream;
begin
try
begin
base64 := TIdEncoderMIME.Create(nil);
stream_image := TMemoryStream.Create;
_image.Bitmap.SaveToStream(stream_image);
stream_image.Position := 0;
output := TIdEncoderMIME.EncodeStream(stream_image);
stream_image.Free;
base64.Free;
if not(output = '') then
begin
Result := output;
end
else
begin
Result := 'Error';
end;
end;
except
begin
Result := 'Error'
end;
end;
end;
....
img_encoded := Base64_Encoding_stream(Image1);
.....
procedure Send(_json:String );
var
lHTTP : TIdHTTP;
PostData : TStringList;
begin
PostData := TStringList.Create;
lHTTP := TIdHTTP.Create(nil);
try
PostData.Add('dane=' + _json );
lHTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0';
lHTTP.Request.Connection := 'keep-alive';
lHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
lHTTP.Request.Charset := 'utf-8';
lHTTP.Request.Method := 'POST';
_dane := lHTTP.Post('http://......./add_photo.php',PostData);
finally
lHTTP.Free;
PostData.Free;
end;
要使用base64发布原始文件,您基本上可以使用自己的代码。您只需要在base64编码例程中更改已使用的流,如下所示:
function Base64_Encoding_stream(const filename: string): string;
var
base64: TIdEncoderMIME;
output: string;
stream_image : TStream;
begin
try
base64 := TIdEncoderMIME.Create(nil);
Try
// create read-only stream to access the file data
stream_image := TFileStream.Create(filename, fmOpenRead or fmShareDenyWrite);
// the stream position will be ‘0’, so no need to set that
output := TIdEncoderMIME.EncodeStream(stream_image);
stream_image.Free;
Finally
base64.Free;
End;
if not(output = '') then
begin
Result := output;
end
else
begin
Result := 'Error';
end;
except
Result := 'Error'
end;
end;