Просмотр картинки

1. an2007 12.09.22 12:25 Сейчас в теме
Добрый день.
Есть POST-запрос, который получает информацию с сервера. В ответе присутствует картинка - строка Base64.
Он-лайн конвертеры её показывают. Можно ли в самой 1с-ке конвертнуть её, например в jpg, bmp?
Заранее спасибо!
По теме из базы знаний
Найденные решения
30. an2007 12.09.22 17:46 Сейчас в теме
В принципе решение нашел, 2 этапа:
1. Декодируем Base64 средствами ОС, утилита certutil.exe, Кодирование/декодирование средствами ОС
2, Конвертируем полученный в bmp, png, jpg, утилита dwebp от Гугла, Google developers

Спасибо за участие.
Тема закрыта.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1393353 11 12.09.22 12:41 Сейчас в теме
ДвоичныеДанные = Base64Значение(Картинка);
ДвоичныеДанные.Записать("картинка.jpg");
3. ZergKRSK 130 12.09.22 12:44 Сейчас в теме
6. an2007 12.09.22 12:52 Сейчас в теме
(3)Я знаю, что не умеют, поэтому и поднял вопрос, Может есть консольная утилита, или апишные функции?
4. an2007 12.09.22 12:44 Сейчас в теме
(2)
Base64Значение - эта функция откуда? Платформа 1С v7.7(
7. VladimirB 17 12.09.22 13:52 Сейчас в теме
(1) Лови для клюшек

Функция глКодироватьСтрокуВ_Base64(_Строка, Кодировка="Base64") Экспорт
ЦДО=СоздатьОбъект("CDO.Message");
БодиПарт=ЦДО.BodyPart;
Поля=БодиПарт.Fields;
Поле=Поля.Item("urn:schemas:mailheader:content-type");
Поле.Value="text/plain; charset=""windows-1251""";
Поля.Update();
Стрим = БодиПарт.GetDecodedContentStream();
Стрим.charset = "windows-1251";
Стрим.WriteText(_Строка);
Стрим.Flush();
БодиПарт.ContentTransferEncoding = Кодировка;
Стрим=БодиПарт.GetEncodedContentStream();
Возврат Стрим.ReadText();
КонецФункции
//***********************************************************
// Можно кодировку задать как "quoted-printable"
Функция глДекодироватьСтрокуИз_Base64(_Строка, Кодировка) Экспорт
ЦДО=СоздатьОбъект("CDO.Message");
БодиПарт=ЦДО.BodyPart;
БодиПарт.ContentTransferEncoding = Кодировка;
Стрим=БодиПарт.GetEncodedContentStream();
Поля=БодиПарт.Fields;
Поле=Поля.Item("urn:schemas:mailheader:content-type");
Поле.Value="text/plain; charset=""windows-1251""";
Поля.Update();
Стрим.WriteText(_Строка);
Стрим.Flush();
Стрим = БодиПарт.GetDecodedContentStream();
Стрим.charset = "windows-1251";
Возврат Стрим.ReadText();
КонецФункции
8. an2007 12.09.22 14:12 Сейчас в теме
(7)
Функция глКодироватьСтрокуВ_Base64(_Строка, Кодировка="Base64") Экспорт
---

Это уже прошел. На выходе файл-контейнер RIFF.
Теперь надо его конвертировать в JPG.
9. VladimirB 17 12.09.22 14:23 Сейчас в теме
Значит используй
Функция глДекодироватьСтрокуИз_Base64(_Строка, Кодировка) Экспорт
10. an2007 12.09.22 15:06 Сейчас в теме
(9) Так ведь и здесь получается файл RIFF.
11. VladimirB 17 12.09.22 15:13 Сейчас в теме
(10) скинь кудаөнибудь файл. Посмотреть.
12. an2007 12.09.22 15:35 Сейчас в теме
(11) Это исходный base64:
"data:image/webp;base64,UklGRrgFAABXRUJQVlA4IKwFAACQLgCdASo6Ad0APu1yslUppiUjIVLqCTAd­iWlu4XNBG/Or6O9rePTZ7dqfxV+OPNNu6GW+2g9GdN/mKf2j0Ns/71T7CH65­elh7F/259k8YExvl1DcuY3y6huXMZe0/7+qc9U+X2QFzjzx1py5t2odkZ440­4Z7Ed07nC5byc7i4RQUPqcgrlVJw3LmN8ujlgFtcPOu9yPB9bIcAif51NK4C­Jpw3LmN8tGXPRkV+YHjw1UhHDwrFhKmTG0fHIEpWT4zxL9Z3L7BcyYsmMs00­xvl1DcqqKkaPL47zPAVRSJjRv8dikIg6KcLtsOyM8caZRNKUUMzVaQERNMYR­NOG5cxvjOuhd+aXXU0y8skjzPskYYblzG+Wn+3KDhIVnP75+4cYoblzG+Wn+­3NO/f1NvKnSeONOG5cRtDGcdJXME0sldlT7RRvl1DcuYyqqKdq+BoGUTi5gK­Ahe90o0NhujR7ULJK2hAXy6YLocNy5jeOreB3LmN8uoblzG+XUNy4YAA/v5g­gJUnt1P3lhfcbm6VSLJDjTGltxSIFJR0CnCzk8MIE7+uu1zyL2fl9TLqEFQa­/PukW1BsFB2B31sLB1O7bfo7iZ+MoTSMEn1+UeiLzf9i9huHs44OxTM9HkJN­nk3Ic1PFGbHDSz/kxGtlWd+w1It9YGQCFdLFi3JwxOi+/4HysSqCy5WmqLka­L8hsZLRP4J6lWEIt3NVQkqjim7XuEEz2sJVysF4FQN2OpMrHjwCW3irxarR1­3xerD0ur9QMgrG2VdH3AR6WoPuE/pD0GCix0Z6e1Wx8NFDiV+2OmAAWnWoqx­NLnYpme+PJgTAzxPUIc1qV05VV+X0LnKgdqGeN779DP+1EMeL8seCTRIwDch­uwtgXIX7cV4odYzjIN01LtLJuNLEN5SaOCj+Dc4v5V/59orO4Kim3xhksg8p­5TDijo38pcX/kS2KGtYHM/AzVXq3dVHanyw3aFGb8/j0BzbhzUXsvT5Yy2Si­n3pkXUYEdJy0lo1dKtE+eosE4chNYcJ/73pewrYgXXl+0QiJDmq3mXu/yi87­XfehjJkr3Zsny+hP0uUX1ACFF1KmStnlndFjgcl1/j8zZVq1JrSSu039bNln­1kDRBdiuDZg0e80l2/wDcr+HePzDP4bciYXubIiLt8DH/3t8M3tbaPbydfg8­2sYsCRC1U0xNr+3EIQJTEyFzq1M5pFUySCd7bJdKA7jiPhdWncohZV7o6Sun­c4rqDjQTqdmTNXBd07Dt9lCTz4JPfxo8KulbKq402hawypEm8AWpatyTPX4B­W4w6mx6liFe5jwYthTtrPlRcB/+hUIJM7khKie8xNMFqAWlgly2muJ+3SRdv­ziab0JDRy6CWo7QVFd8w5NdPFJP12vIlyJuabYzK2YuLbEcdv4vT6+1iQgTO­38a8GBPvQFWdnQbibKVOiUUHiDNoa8hCambOP20nUAdOj+NY2bg38urroc2A­73M43kvswgRtTHesed4frqE/ZnQKeNn8vsjEkbLmNFko3ADC/LMlNB1R4LF2­wvgIdYDhEjpoHSeFVJYNRlHAvor2D0lHuVpTZewRtLZshEkToWaBo8DEGMRW­y9V6NHyf6HM/FiyY+vQhHIXUSHS2SVIcpDey8J6RloHp4V1MVBbtSQ+sL6Qg­q3Gfe8ZEJ9ShhiFVk/oiZo1orbMY9Jf8YlKn1axcKmtb6PY+8JWf/yAkFXXt­JtlhTXJU0DZqYqxWtinI1scmjR9UxK4d2AKcD01whmU2AgwpyS+ANhcWtYUb­nTF4YrMQynLQUJHqvBe9FQpgABqoXI8u0kfE0QVEuUVJiEKYDAj1LmjyO2bv­LW46044nUu8esMSqn69JGr4whwA3zawmHPrblObmuZb04CN0sf/D49KAAlop­Bxrb5Ia/scoM24+B3eoia/caS9POtVSzW+AAlwAAAAA=

Я уже наверно понял свою ошибку: сохраняю результат в файл через объект "Текст", на через двоичный файл.
Ищу как, может есть идеи?
13. VladimirB 17 12.09.22 15:43 Сейчас в теме
14. an2007 12.09.22 15:44 Сейчас в теме
18. VladimirB 17 12.09.22 15:51 Сейчас в теме
(13) в 1с++ есть класс BinaryData
15. VladimirB 17 12.09.22 15:45 Сейчас в теме
Запрос этим делаешь?
WinHttp=СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
16. an2007 12.09.22 15:46 Сейчас в теме
17. VladimirB 17 12.09.22 15:47 Сейчас в теме
обСтримВыход=СоздатьОбъект("ADODB.Stream");
обСтримВыход.Type=1;
обСтримВыход.Mode=3;
обСтримВыход.Open();


олеШелл = СоздатьОбъект("MSScriptControl.ScriptControl");
// установим язык сценариев
олеШелл.Language = "vbscript";
// добавим созданные объекты
олеШелл.AddObject("oleADO", обСтримВыход);
олеШелл.AddObject("WinHttp", WinHttp);
// с помощью скрипта запишем в поток ADO данные из
// объекта XMLHttpRequest
// то есть содержимое страницы
олеШелл.Eval("oleADO.Write(WinHttp.ResponseBody)");
обСтримВыход.SaveToFile(ИмяВходящегоФайла,2);
обСтримВыход.Close();



Если ответ так сохранить?
19. an2007 12.09.22 15:51 Сейчас в теме
Запрос WinHttpRequest возвращает как раз текст base64, который надо конвертировать.
20. VladimirB 17 12.09.22 15:52 Сейчас в теме
А когда к ответу применяешь
Функция глДекодироватьСтрокуИз_Base64(_Строка, Кодировка) Экспорт
что на выходе?
21. an2007 12.09.22 15:54 Сейчас в теме
На выходе и есть содержимое RIFF, типа:

RIFFёWEBPVP8 ¬ђ.ќ*:Э>нrІU)¦%#!Rк 0‰inбsAу«ипkxфЩнЪџЕ_Ћ<УnиeѕЪFtЯж)эЈРЫ?пTы~№zX{э№цOеФ7.c|є†еМeн?пкњхO—ЩsЏ<u§.mЪ‡dgЋ4бћДwNз–тsёёE©И+•RpЬ№ЌтиеЂ[\<лЅИр}l‡‰юu4®&њ7.c|ґeПFE~`xрХHG
Е„©“GЗ JVOЊс/Цw/°\Й‹&2Н4Жщu
КЄ*FЏ/Ћу<QHСїЗbђ€:)Вн°мЊсЖ™DТ”PМХi4Ж4б№sг:и]щҐЧSLјІHу>Йa№sе§ыrѓ„…g?ѕ~бЖ(n\ЖщiюЬУїSo*tћ8У†еДmg%sТЙ]•>СFщu

Буду пробовать через BinaryData.
22. VladimirB 17 12.09.22 15:57 Сейчас в теме
А если так вызвать:
Функция глДекодироватьСтрокуИз_Base64(_Строка, "binary") Экспорт
23. VladimirB 17 12.09.22 15:57 Сейчас в теме
должен получиться двоичный файл
24. VladimirB 17 12.09.22 16:01 Сейчас в теме
(21) попробуй его в JpegView открыть
Завлено, что он может RIFF WEBPVP8 открывать
25. VladimirB 17 12.09.22 16:04 Сейчас в теме
Еще пишут, что imagemagic может его открыть. А его можно запускать с командной строки и задавать команды конвертации
26. an2007 12.09.22 16:53 Сейчас в теме
Не получается корректно сохранить файл.
Браузер - это через веб-браузер
1с-ка - это через 1с-ку, и здесь чего-то не хватает.
Как в 1с-ке сохранить двоичный файл?, пока не получается.
Прикрепленные файлы:
Без названия.webp
pic1.jpg
27. VladimirB 17 12.09.22 17:26 Сейчас в теме
(26) В заголовке отличие:

Без названия.webp: RIFF (b8 05 00 00) WEBPVP8

А в pic1 : RIFF (b8 05) WEBPVP8
28. VladimirB 17 12.09.22 17:27 Сейчас в теме
двух нулевых байт не хватает
29. VladimirB 17 12.09.22 17:37 Сейчас в теме
(28) А нифига по файлу прошелся еще нужно кое-где добавлять байты
30. an2007 12.09.22 17:46 Сейчас в теме
В принципе решение нашел, 2 этапа:
1. Декодируем Base64 средствами ОС, утилита certutil.exe, Кодирование/декодирование средствами ОС
2, Конвертируем полученный в bmp, png, jpg, утилита dwebp от Гугла, Google developers

Спасибо за участие.
Тема закрыта.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот