Yorumları: 4.224
Konuları: 379
Kayıt Tarihi: 07-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 16.975 Üstad
(06-03-2020, Saat: 10:20)pro_imaj Adlı Kullanıcıdan Alıntı: (06-03-2020, Saat: 09:56)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Yukarıdaki JSON veriyi aşağıdaki gibi çözümleyebilirsiniz.
var
jsonArr: TJSONArray;
const
strJSON = '[{ "StreamString": "BirDeğer", "Sifre": "1" }]';
begin
jsonArr := TJsonObject.ParseJSONValue(TEncoding.UTF8.GetBytes(strJSON), 0) as TJSONArray;
ShowMessage(jsonArr.GetValue<String>('[0].StreamString'));
end;
Hocam çok teşekkür ederim konuyu bu şekilde çözdüm.
JSON yazma okuma konularıyla ilgili çok örnek yapmak gerekiyor dünden bu güne bu sorunu çözememiştim.
İyi çalışmalar.
(06-03-2020, Saat: 09:12)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
JSON veriniz aşağıdaki gibi olabilir.
{
"Base64IcerenBirOzellik":[
{
"IslemId":1,
"Baslik":"Araba - 1",
"Dosya":"PCFkb2N0DelphiCaneXBlIGh0bWw+PfGh0bWw+PGhlYWQ=..."
},
{
"IslemId":2,
"Baslik":"Araba - 2",
"Dosya":"PCFkb2DelphiCanN0eXBlIGh0bWw+PGh0fgdabWw+PGhlY..."
},
{
"IslemId":3,
"Baslik":"Araba - 3",
"Dosya":"PCFkb2N0eXBlIGh0bWw+PGh0bDelphiCanWw+PGhlYWQ+...."
},
{
"IslemId":4,
"Baslik":"Araba - 4",
"Dosya":"PCFkb2N0eXDelphiCanBlIGh0bWw+PGh0bWw+PGhlYWQ+PH..."
}
]
}
Tek bir resim ve yanında ek bilgi gönderecek iseniz aşağıdaki gibi olabilir.
{
"Base64IcerenBirOzellik":{
"IslemId":1,
"Baslik":"Araba - 1",
"Dosya":"PCFkb2N0DelphiCaneXBlIGh0bWw+PfGh0bWw+PGhlYWQ=..."
}
}
Dosya alanında yalnızca resim değil, herhangi bir binary dosyayı gönderip, alabilirsiniz.
Resmi göndereceğiniz uygulamada (örn. sunucu), dosyayı bir stream'a alıp base64 stringe dönüştürmeniz gerekiyor. Daha sonra yukarıda yapısını vermiş olduğum JSON'a dönüştürürsünüz.
Base64 string'i alıp, resme dönüştürecek uygulamada (örn. mobil) tarafında, JSON içerisindeki string veriyi okuyup, bunu base64 formatından resim formatına dönüştürebilirsiniz.
Aşağıdaki iki metod yapacağınız base64 dönüşümlerinde size yardımcı olacaktır.
procedure Base64ToImage(const Base64Str: string; const Image: TBitmap);
var
streamIn: TStringStream;
streamOut: TBytesStream;
begin
streamIn := TStringStream.Create(Base64Str);
try
streamIn.Position := 0;
streamOut := TBytesStream.Create;
try
TNetEncoding.Base64.Decode(streamIn, streamOut);
streamOut.Position := 0;
Image.LoadFromStream(streamOut);
finally
streamOut.Free;
end;
finally
streamIn.Free;
end;
end;
function ImageToBase64(const Image: TBitmap): string;
var
stremIn: TBytesStream;
streamOut: TStringStream;
begin
Result := '';
if Image.IsEmpty then
Exit;
stremIn := TBytesStream.Create;
try
Image.SaveToStream(stremIn);
stremIn.Position := 0;
streamOut := TStringStream.Create('');
try
TNetEncoding.Base64.Encode(stremIn, streamOut);
Result := streamOut.DataString;
finally
streamOut.Free;
end;
finally
stremIn.Free;
end;
end;
*Ek bilgi olarak yukarıdaki Base64ToImage, ImageToBase64 işlemler aşağıdaki şekilde daha az kod ile yapılabilir.
StreamString := EncodeBase64(stream.Memory, stream.Size);
Stream := TBytesStream.Create(DecodeBase64(base64));
Bir soru, sizin önerdiğiniz EncodeBase64/ DecodeBase64 metodları yerine sizce neden TNetEncoding kullanmış olabilirim?
Yorumları: 1.038
Konuları: 148
Kayıt Tarihi: 14-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 4.042 Uzman
06-03-2020, Saat: 11:05
(Son Düzenleme: 06-03-2020, Saat: 11:05, Düzenleyen: pro_imaj.)
(06-03-2020, Saat: 10:43)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: (06-03-2020, Saat: 10:20)pro_imaj Adlı Kullanıcıdan Alıntı: Hocam çok teşekkür ederim konuyu bu şekilde çözdüm.
JSON yazma okuma konularıyla ilgili çok örnek yapmak gerekiyor dünden bu güne bu sorunu çözememiştim.
İyi çalışmalar.
*Ek bilgi olarak yukarıdaki Base64ToImage, ImageToBase64 işlemler aşağıdaki şekilde daha az kod ile yapılabilir.
StreamString := EncodeBase64(stream.Memory, stream.Size);
Stream := TBytesStream.Create(DecodeBase64(base64));
Bir soru, sizin önerdiğiniz EncodeBase64/DecodeBase64 metodları yerine sizce neden TNetEncoding kullanmış olabilirim?
TNetEncoding dizeleri UTF8 standartında geliyor olabilir.
Yorumları: 1.038
Konuları: 148
Kayıt Tarihi: 14-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 4.042 Uzman
Utf8 olan byte byte veya string olarak veriyi dönüştürebiliyormuşuz, tam fark bumu
Yorumları: 4.224
Konuları: 379
Kayıt Tarihi: 07-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 16.975 Üstad
(06-03-2020, Saat: 14:55)pro_imaj Adlı Kullanıcıdan Alıntı: Utf8 olan byte byte veya string olarak veriyi dönüştürebiliyormuşuz, tam fark bumu
EncodeBase64/DecodeBase64 metodları önceki Delphi sürümlerinde yer alıyor ve unicode desteği yok.
Yeni Delphi sürümleri encode/decode işlemleri için genişletilmiş özelliklere sahip olan TNetEncoding static class ve metodlarını kullanıyor.
EncodeBase64/DecodeBase64 metodları platforma göre farklılık göstererek, çözümü zor anlamsız (access violation) hatalara neden olabilir.
Yorumları: 112
Konuları: 27
Kayıt Tarihi: 17-10-2016
Rep Puanı: 414 Acemi
(06-03-2020, Saat: 09:12)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: (05-03-2020, Saat: 23:49)pro_imaj Adlı Kullanıcıdan Alıntı: Server tarafına sadece Base64 veriyi gönderdiğimde istediğim işlem sorunsuz oluyor, fakat Base64 verisi haricinde birkaç json bilgisini daha eklemem gerekiyor bu eklediğimde olmuyor. (Base64 bilgisini gönderirken aslında yine json olaran göndermiyorum sadece base64 veriyi gönderiyorum JSON olarak göndermem gerekiyor.)
Merhaba,
JSON veriniz aşağıdaki gibi olabilir.
{
"Base64IcerenBirOzellik":[
{
"IslemId":1,
"Baslik":"Araba - 1",
"Dosya":"PCFkb2N0DelphiCaneXBlIGh0bWw+PfGh0bWw+PGhlYWQ=..."
},
{
"IslemId":2,
"Baslik":"Araba - 2",
"Dosya":"PCFkb2DelphiCanN0eXBlIGh0bWw+PGh0fgdabWw+PGhlY..."
},
{
"IslemId":3,
"Baslik":"Araba - 3",
"Dosya":"PCFkb2N0eXBlIGh0bWw+PGh0bDelphiCanWw+PGhlYWQ+...."
},
{
"IslemId":4,
"Baslik":"Araba - 4",
"Dosya":"PCFkb2N0eXDelphiCanBlIGh0bWw+PGh0bWw+PGhlYWQ+PH..."
}
]
}
Tek bir resim ve yanında ek bilgi gönderecek iseniz aşağıdaki gibi olabilir.
{
"Base64IcerenBirOzellik":{
"IslemId":1,
"Baslik":"Araba - 1",
"Dosya":"PCFkb2N0DelphiCaneXBlIGh0bWw+PfGh0bWw+PGhlYWQ=..."
}
}
Dosya alanında yalnızca resim değil, herhangi bir binary dosyayı gönderip, alabilirsiniz.
Resmi göndereceğiniz uygulamada (örn. sunucu), dosyayı bir stream'a alıp base64 stringe dönüştürmeniz gerekiyor. Daha sonra yukarıda yapısını vermiş olduğum JSON'a dönüştürürsünüz.
Base64 string'i alıp, resme dönüştürecek uygulamada (örn. mobil) tarafında, JSON içerisindeki string veriyi okuyup, bunu base64 formatından resim formatına dönüştürebilirsiniz.
Aşağıdaki iki metod yapacağınız base64 dönüşümlerinde size yardımcı olacaktır.
procedure Base64ToImage(const Base64Str: string; const Image: TBitmap);
var
streamIn: TStringStream;
streamOut: TBytesStream;
begin
streamIn := TStringStream.Create(Base64Str);
try
streamIn.Position := 0;
streamOut := TBytesStream.Create;
try
TNetEncoding.Base64.Decode(streamIn, streamOut);
streamOut.Position := 0;
Image.LoadFromStream(streamOut);
finally
streamOut.Free;
end;
finally
streamIn.Free;
end;
end;
function ImageToBase64(const Image: TBitmap): string;
var
stremIn: TBytesStream;
streamOut: TStringStream;
begin
Result := '';
if Image.IsEmpty then
Exit;
stremIn := TBytesStream.Create;
try
Image.SaveToStream(stremIn);
stremIn.Position := 0;
streamOut := TStringStream.Create('');
try
TNetEncoding.Base64.Encode(stremIn, streamOut);
Result := streamOut.DataString;
finally
streamOut.Free;
end;
finally
stremIn.Free;
end;
end;
Fmx platformda base64 e çevirip vlc webservis ile bitmap e çevirmek istediğmde hata mesajı alıyorum. "Bitmap image is not valid"
Yorumları: 4.224
Konuları: 379
Kayıt Tarihi: 07-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 16.975 Üstad
Merhaba,
Aynı yöntemi kullanıyorum. Herhangi bir sorunla karşılaşmadım.
Stream'in DataString fonksiyonu ile dönen sonucu bir memo veya text'e yazın.
Aşağıda linkini paylaştığım web sitesi üzerinden test edin.
Base64 to Image
Yorumları: 112
Konuları: 27
Kayıt Tarihi: 17-10-2016
Rep Puanı: 414 Acemi
27-10-2020, Saat: 13:38
(Son Düzenleme: 27-10-2020, Saat: 13:39, Düzenleyen: hassur.)
(26-10-2020, Saat: 17:28)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
Aynı yöntemi kullanıyorum. Herhangi bir sorunla karşılaşmadım.
Stream'in DataString fonksiyonu ile dönen sonucu bir memo veya text'e yazın.
Aşağıda linkini paylaştığım web sitesi üzerinden test edin.
Base64 to Image
Fesih hocam teşekkür ederim sorun stream i tekrar bitmap e çevirirken yapmışım.
|