Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2015, 21:37   #1
MorgunZ
Пользователь
 
Регистрация: 12.03.2015
Сообщений: 60
По умолчанию base64

Всем привет.
Есть строка base64, в которой зашифрована картинка.
Подскажите, как можно получить из строки картинку, средствами delphi.
Нашел в интернете функцию

Код:
function Encode64(S: string): string;
var
  i: Integer;
  a: Integer;
  x: Integer;
  b: Integer;
begin
  Result := '';
  a := 0;
  b := 0;
  for i := 1 to Length(s) do
  begin
    x := Ord(s[i]);
    b := b * 256 + x;
    a := a + 8;
    while a >= 6 do
    begin
      a := a - 6;
      x := b div (1 shl a);
      b := b mod (1 shl a);
      Result := Result + Codes64[x + 1];
    end;
  end;
  if a > 0 then
  begin
    x := b shl (6 - a);
    Result := Result + Codes64[x + 1];
  end;
end;
Но в ответ получаю совсем другой текст, большой, а что с ним делать дальше - не знаю. Пробовал сохранять в файл а потом открывать с разными форматами типа png jpg bmp - но не открывается.
MorgunZ вне форума Ответить с цитированием
Старый 14.03.2015, 21:41   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Зачем стороннее, да еще в строку? В том же Д7 родное есть в юните EncdDecd с потоками
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.03.2015, 21:48   #3
MorgunZ
Пользователь
 
Регистрация: 12.03.2015
Сообщений: 60
По умолчанию

Пробовал его юзать, в итоге в аутпут потоке 0 байтов.

Код:
var
s1 : tmemorystream;
s2 : tmemorystream;
begin

s1 := tmemorystream.Create;
s2 := tmemorystream.Create;

memo1.Lines.SaveToStream(s1);
EncodeStream(s1,s2);
memo1.Lines.LoadFromStream(s2);

s1.Free;
s2.Free;
end;

Последний раз редактировалось Stilet; 14.03.2015 в 21:52.
MorgunZ вне форума Ответить с цитированием
Старый 14.03.2015, 22:05   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Какой фиг двоичный файл в мемо? Речь то о картинке. Или уже нет? Вот так примерно выдергивал jpg в base64 из fb2
Код:
var xInStr: TStringStream;
    xOutStr: TMemoryStream;
...
  xInStr:=TStringStream.Create(xNode.Text);  //jpg в baze64 из xml
  xOutStr:=TMemoryStream.Create;
  DecodeStream(xInStr,xOutStr);
  xOutStr.SaveToFile('полное имя файла');
  xInStr.Free;
  xOutStr.Free;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.03.2015, 22:15   #5
Dmitry33RU
Пользователь
 
Регистрация: 09.10.2014
Сообщений: 62
По умолчанию

TNetEncoding

Код:
TNetEncoding.Base64.Encode ();
TNetEncoding.Base64.Decode ();
Dmitry33RU вне форума Ответить с цитированием
Старый 14.03.2015, 22:55   #6
MorgunZ
Пользователь
 
Регистрация: 12.03.2015
Сообщений: 60
По умолчанию

Аватар, ну так base64 в строке string находится
вот:
Код:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAQeElEQVR4Xu2dz48cRxXHX028DgJEnFsCSHHvrpE4sUHePYESc0YinOCGI7hj35Hi/AUk96DENzjF/gewIzjtWMQ5IbSzO2skEnFijUBRdpcp1N0zPd09011V3dXrKvjMxdL6dfXrz3v1rR9dVa2EHwQgAIFICKhI/MRNCEAAAoJgkQQQgEA0BBCsaEKFoxCAAIJFDkAAAtEQQLCiCRWOQgACCBY5AAEIREMAwYomVDgKAQggWOQABCAQDQEEK5pQ4SgEIIBgkQMQgEA0BBCsaEKFoxCAAIJFDkAAAtEQQLCiCRWOQgACCBY5AAEIREMAwYomVDgKAQggWOQABCAQDQEEK5pQ4SgEIIBgkQMQgEA0BBCsaEKFoxCAAIJFDkAAAtEQQLCiCRWOQgACCBY5AAEIREMAwYomVDgKAQggWOQABCAQDQEEK5pQ4SgEIIBgkQMQgEA0BBCsaEKFoxCAAIJFDkAAAtEQQLCiCRWOQgACCBY5AAEIREMAwYomVDgKAQggWOQABCAQDQEEK5pQ4SgEIIBgkQMQgEA0BBCsaEKFoxCAAIJFDkAAAtEQQLCiCRWOQgACCBY5AAEIREMAwYomVDgKAQggWOQABCAQDQEEK5pQ4SgEIIBgkQMQgEA0BBCsaEKFoxCAAIJFDkAAAtEQQLCiCRWOQgACCBY5AAEIREMAwYomVDgKAQggWOQABCAQDQEEK5pQ4SgEIIBgkQMQgEA0BHoL1vTqzhURuZIcPz5ueurp1Z2r5f9rs42GHI5CAAIXTqCzYE239t4Qpd8Xpa6I6LvJwfhmo2BtXf+9KHVDlBLRswfJ5NEP2p50IXC+hG26ff317H6z2U76T3L0p3f6kJ5e202f9bXkYPxmn3JCuXa6vXdHRPQQ/iST/beHKJcy/z8JdBesVATU6EGGTeuPksk4F4U1v6Nru58qUS/PbT9NJuNvtArW9t49UfIjETmWmdxODvfv9QnP0dbuZ2qkXhKtRYmcX52MN7qWN722+4GI+ln+LPJ2MtlPK3vvX16u6GchgtNre4OIVdY4HOx3z7G0Z76xcUW0eqMQVC3HyeH+3d7AAygga/i0emWtK/9Dz+kTdZ9kuiIbl/+xcKYpMbMhY8kusz87fTE5fnzSKHDbe8dKyTyQ+tXkYPy460PnvSH1fq6rmWCJFv2bzcmjX3QpsyJYuWq9mRyMU7Hp9Mv4XNr4UJSaC36/8ro4EZJgZb3rjY20sUrjtiOiH+f/Vn5pQ3YnVuGa5+RbIlKZKlkTu0GfM2N96XI6WsgbrAhEsrNgpc93ZCEs2dBxJB+mvZtsSJj+ZvLjpl5TnrCXp3OBebo5GadzZJ1/02t7qdh9Zx4QyRVLf55Mxl/uWuh0e/ehKPXa8vpuIpOL+caDaoVsH1539bntuvmQsL1oLTdl0YhoeSJKrETatgea54l+a404tfk1aIX2zdpBqOq39vqchR9aHy8byuKWXu/lm2EvwapW3PWVNqsMSt7KNHxxt5ahVLlHZBpqmmBkc1fzYavW+p+i9dfUaJRf9p/z213nsua9xoeFEGbqOruRTB6lf7P6rRUrPbudTB71ml+zunkHo0qsDVMArsUXjdq6C7XcF5Gih61Fbi5733FUsiah0lqeKFkv/I3PqWdvuuRZGamjYHYWrqLO572Oj4rG3cMUSk/BmotR5tj6+Zwi0SuC1TznNd3afUdG6pfzHlGvOaKaoN4Vrb8narSVlT3TJ8nh+EXXyrWwXxEtrU9EyQ2b4ev02u6OaHmQv7BY/Lr10rr673rdkIJV7alnuXRflL4nZ2f31k0dpBVPa3VnRbgCFPxKAzyHngmV0ndMUwlrn9OxYUxvaSuYvhqDcAVrMdybK+m6ifdifqQ8JGyZjK0O4dx6LbXWZEdEfVz87ew0mc30N0fPP/+H4m8z/dPkcPw718pbFi19aeNYKfVCLrBm0YpRrLKkLw+DPfawqnOM8kSdn+60zW/WewwV4Ur5n58lttd3jbvLdWUxthWqevmFcIk+bnu5tc6vinhYCGZjY+AwVxuuYJXmm9LKmkyqPZascs5FIw1WyqttMr0+Qd/rDVP5bV5p2cV0+/qk6GXp2WEyebTtkoBrkmlHa3lYEa2GSpMvr1DpBHvWs9JaP1VKXrfplfXx0ce1QwlWbR600wuMWhmtS2x8sLAtoy7Gm5N90yR7a9Hp/K7LUp98Un3j42W+2fXsFr2yWi/2ODnYT2yePVjByh+s9Eq89vZvun39lqjRr/OH1PNX0YslAavzNeU5JxH5JDnYr78dsuEl5Yn7+b2LN43Trd2fyEj9dlHQ7Isvvr/110/+aFVwg1EqzBXRSt9snZ3dKLf09aFBTGI1VA/LV4Wu5Y3zfGKf2Ldd60OM+/g2XS4PSovpVJ+6PEPYglUZKlSHcNU1S7PbGfySgNUXm1YedKbfTQ7Ht7oErHrf1fmy6dbuiYwWw7j+vay8QpfWpeUCXYjWqlhlLd0bMfSsFvyH6GF1qQxN+VCtnPpxcjB+tUvu+LrGlxh39ceXiNdy16qXFbZgtUyS15c95PCLeaWVh69UipalD21BnK9rmhYT2msmKaeb370lz13Ke35aa/3vfyWbn/05G7L2+a1MsGr9UER9lL0lXf4+kbPT10OaZ7F5Zt+C5btCp71qfWnjcTE0d5hzsXl+VxufYux679Te5zDZ9VnCFqzysE/L/WSyn65KTodlaxeWtg4hq8PLdPK0cX9iS0ubL6PIf43d4On23uei5Etz0Wpdqe+SMLVlGcu1Z3N/YhSrLJ6eJ92rSe1nx4DPN8wuMa/b+hZjV19qi6WfqvOzdO6rcaG2qXzXXlbogrXcoiPLrnhlbU3prVJTL6o+Qd9lgnKld9XSyh5tX39PqdHPffey8sq9WO5RWsuRvqo/P73ZJ3FMiTXk/0chWAV3v9umXLkOIcYuPviaWinf06WXFbRgZRW01DNavNlrClrz36sT9G2bqRt7V5VtOPLEJHpH27vnSqnn0vK0nnXerrPOn2JOJV3Okfb0JuNOLxBcEnVIWwTLnm5QguVhsWa1ETY3BjEIVmn7Sz7x3tiTali7VZk07bgA0KUVyMf5y15Wtin6YL/zpuiVYUEgrb19NWu3RLDsSSJY5QXlAa10X4Sw9oYmW0vTNFfVNLdlsy+xLWW6jNuPXv72K/KVr6YLP+cjQ3+9rGedtPbVy84SwbLj5NobsS/V3nKI3HMpM/weVrk3MdPvyijdH5W/DUwXjNaHZitvD8/OTvpueK6skJ9lm3OPrEKs9asymm+R6bkpunw/lwBb+fmMjRAs+wB0jX3GWNSs7U7JZL/1LLmhBNPlmSIQrOrZWCL6Xut6q8qZUrPbotTJ4giYLhuea5ucnyqRF4qTISzyLDt2ZnGSRI9N0QiWBey5iUsFsC11iDJt7+0j9jbH/Njs/hiCg0uZ4QtWeYtOPri6uzzkbu2K9uoK+JmkCzk7b3he2eS8OGDPNtv07NDXpujSMHm5vMLTxKft4wxhRw/LnqpL5a4IXdtBipanndDDsozT0fbuyWLR3kzrv42Ump8qunoAX3kJQ3aqqMjT5ZlVbhuea2WlhwMmcmnD6qymxaPNTk9/5XNT9FBJYxmKQcwQLHusnQUrGxI2/LS6KqP5oZaGBrDr/duecIgy7YkuLXsdL1PtBpcOtSu1Bo0nkZZbk9JJDjZd3mqrVDqy2HC2fHtAPG+K5i1haz66Lka0SW7Xt8Q2ZXaxGaJyu5TpYmv7fEOUaXvvsp1HwaqcjbU42bNxBXm1xS4O93PaoNm2ydkVhu9N0aEE2JVDk73vHlZ6H58C86xXl9ca0eJY7nQEYXvKga8ezhCNQSi7CPwJVmnRZnEcctvJotUeSC5wjhueTZucXSurz03RCJaZvs+K5VP8zJ6bLXz745pPPu9fP6am73cMzPSaLXwK1vLAvMUQr+3s9uoC0nzPncOGZ5tNzq5gfG6Kdk0wV18v2n6IHpavXlZIvatFXHyKcVqmaz75vL+PY2p85as3wcqg1uelzs8av47T8DUd6w3PlQB2POtnHURfm6JdE8xXQIcqZyjB8lGxfPYmfPLz6VeXfPJxf1/H1Pji6lWwjrZ3/6KU+lbqnNb675uT8Uttjh5t7X6qRvn3CrXozzYPxl+3eTCXTc425ZVtfG2K7pJgrr5epP1QgrXay8q+RWn1Ca/6WeXrFilfJKP6vXyIcdFj6/ASx8f9fR5T4yMWXgVrup1+4Xl0I1uIqfWD5NDwhWdH+yJ4+dGvH6Rf4xgiSYtN0TP9dHZ2+sMuJ5IiWPbpue5DDfOP6K4VrqaPKjzLuZWmp619YMNajMvlrTyvw7q+rvdfbQy08zE1WR1YfPNQ6fs+Dqz0K1ipkIik5+5kZ5abzrNafJJ+ERyT/UoLNv8EfdfPHjUlWTaX1fOT9giWvWDl0wkNX8JJ1+np0qewVPqB1eoHSLt+3MHNw27WrmLcKlTFf9p/XNj1/o2NQYcDCWpTRNZflWoj7VWwuoWUqyCwJNAiXCuYQhaquvCs/SxZXYzLFzUJs5ZbTR8hbmyAL7gxqM0vL91y6Bk2PQuChVoESaBNuGIRqnVzWg3C1RoDX897UY0BghVklcKpiyCQDVHSbSmLn9LHpg+QXoRffe5hKxy+hMpFOH3cc92X0X19JYoeVp/M41oI9CCwIsaVIeHwwjxkY5C/yb+8/OqV0veCm3TvETsuhQAEIGAkQA/LiAgDCEAgFAIIViiRwA8IQMBIAMEyIsIAAhAIhQCCFUok8AMCEDASQLCMiDCAAARCIYBghRIJ/IAABIwEECwjI
(все не влезло)
MorgunZ вне форума Ответить с цитированием
Старый 14.03.2015, 22:59   #7
MorgunZ
Пользователь
 
Регистрация: 12.03.2015
Сообщений: 60
По умолчанию

Код:
 ts:=Tstringlist.Create;
  ts.Text := 'image.txt';
  xInStr:=TStringStream.Create(ts.Text);  //jpg в baze64 из xml
  xOutStr:=TMemoryStream.Create;
  DecodeStream(xInStr,xOutStr);
  xOutStr.SaveToFile('image2.png');
  xInStr.Free;
  xOutStr.Free;
  ts.Free;
вернуло файл, если открыть через блокнот -
Код:
Љf*
MorgunZ вне форума Ответить с цитированием
Старый 14.03.2015, 23:00   #8
MorgunZ
Пользователь
 
Регистрация: 12.03.2015
Сообщений: 60
По умолчанию

Если вместо Декоде выбрать Енкоде = файл с
Код:
aW1hZ2UudHh0DQo=
MorgunZ вне форума Ответить с цитированием
Старый 14.03.2015, 23:32   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А стринглист при каких делах и текст image.txt? В StringStream должна загрузиться именно закодированная строка, без всяких data:image/png;base64,. Это не часть закодированной картинки, а служебная информация
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.03.2015, 23:36   #10
MorgunZ
Пользователь
 
Регистрация: 12.03.2015
Сообщений: 60
По умолчанию

в image.тхт поместил строку, без data:image/png;base64, . Просто она не помещается, если ее писать прямо в коде, выходит сильно длинная строка
MorgunZ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по Base64 JekaDefer Общие вопросы Delphi 2 14.05.2012 11:17
Base64 GoldmasteR Общие вопросы Delphi 10 06.01.2011 18:37
base64 beemoto Общие вопросы Delphi 0 24.04.2010 21:58
base64 Dimarik Win Api 0 10.04.2010 18:59
base64 BlackOmen Общие вопросы Delphi 2 02.05.2008 16:30