новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума
Форум

Обсуждение к заданию: необходимо декодировать строку base64 в картинку (желательно средствами 1С)

    • #1
    • 19.09.2017 12:18
    0
    Есть строка base64 - необходимо ее декодировать в картинку либо внешним offline декодером а в идеале средствами 1С и сохранить в файл. Убедится что картинка действительно декодируется можно в онла...  Подробнее>>
    • #2
    • 19.09.2017 12:18
    0
    base64Значение
    • #3
    • 19.09.2017 12:30
    0
    Base64Значение(ЗакодированнаяСтрока).Записать(ИмяФайла);
    • #4
    • 19.09.2017 13:20
    0
    А расширение файла с картинкой, который должен получиться на выходе - известно?
    • #5
    • 19.09.2017 14:07
    0
    Судя по тому, что Base64Значение(СодержимоеФайла) возвращает Неопределено, подозреваю, что в файле находится не Base64 строка, а двоичное содержимое картинки. Вот только не понятно в каком оно формате.

    Если же попробовать вот так:

    СодержимоеФайла = Новый ДвоичныеДанные(ПутьКИсходномуФайлу);
    Картинка = Новый Картинка(СодержимоеФайла);
    Сообщить(Картинка.Формат());

    то в результате получим сообщение: "Неизвестный формат".

    Скорее всего это какой-то неподдерживаемый 1С-кой формат картинки. При этом каким образом указанный сайт понимает переданную ему строку - загадка.

    Александр, а подскажите нам, будьте добры, откуда Вы этот бинарный файл берете?
    • #6
    • 27.09.2017 16:19
    • Отредактировано: 27.09.2017 16:21:14
    0
    Добрый день . У меня похожая проблема. Пытаюсь выгрузить картинки из Access .... Но они не открываются потом
    Функция ВСтрокуBase64(safeArray)  // Конвертация  ComSafeArray->Base64
    	obj = Новый COMОбъект("MSXML2.DomDocument.3.0");
    	helper=obj.createElement("a");
    	helper.DataType = "bin.base64";
    	helper.nodeTypedValue = safeArray;
    	Возврат helper.text;
    КонецФункции
    
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    	//Очищаем наше табличное поле
    	ТабличноеПоле1.Очистить();
    	ТабличноеПоле1.Колонки.Очистить();	
    	
    	//Готовим строку соединения с MS Access
    	//Путь к базе указывается в самом конце
    	//СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+"C:\Users\sazanov\Desktop\ПЕРСОНАЛ\Персонал_be.mdb";
    	//СоединениеСБазой = Новый COMОбъект("ADODB.Connection");
    	СтрокаПодключения="Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+"C:\Users\sazanov\Desktop\ПЕРСОНАЛ\Персонал_be.mdb";
    	
    	СоединениеСБазой = Новый COMОбъект("ADODB.Connection");
    	//Соединяемся
    	СоединениеСБазой.Open(СтрокаПодключения);    
    	//------------------------------------------------------------
    	//Получаем набор записей из таблицы Аттестация
    	КоллекцияЗаписей = Новый COMОбъект("ADODB.Recordset");
    	КоллекцияЗаписей.CursorLocation=3;
    	КоллекцияЗаписей.LockType=2;
    	
    	//КоллекцияЗаписей.Open("select * from Аттестация", СоединениеСБазой,1); 
    	КоллекцияЗаписей.Open("select * from Аттестация", СоединениеСБазой);	
    	
    	//считываем структуру полей таблицы
    	//В таблице значений создаем все колонки, которые есть в Access'овской таблице
    	Для сч = 0 по КоллекцияЗаписей.Fields.Count - 1 Цикл
    		ТабличноеПоле1.Колонки.Добавить("Колонка" + сч,, Строка(КоллекцияЗаписей.Fields.Item(сч).Name));
    	КонецЦикла;
    	
    	//Перемещаем маркер на первую запись
    	КоллекцияЗаписей.MoveFirst();
    	
    	//считываем данные из таблицы
    	//и добавляем их в ТЗ
    	счетчик=1;
    	
    	Пока НЕ КоллекцияЗаписей.EOF Цикл
    		НоваяСтрока = ТабличноеПоле1.Добавить();
    		Для сч = 0 по КоллекцияЗаписей.Fields.Count - 1 Цикл
    			НоваяСтрока["Колонка" + сч] = КоллекцияЗаписей.fields(ТабличноеПоле1.Колонки[сч].Заголовок).Value;
    			///////////////	
    			
    			// Если   КоллекцияЗаписей.fields(ТабличноеПоле1.Колонки[сч].Заголовок).Value =  "COMSafeArray"  Тогда
    			//Сообщить ("Колонка" + сч);
    			Если  "Колонка" + сч = "Колонка11" Тогда    //колонка "Фото"
    				
    				счетчик=счетчик+1;
    				Состояние(счетчик);
    				Если (КоллекцияЗаписей.Fields("Фото").Value) <> NULL  Тогда				
    					
    					СтрокаBase64=ВСтрокуBase64(КоллекцияЗаписей.Fields("Фото").Value);
    					// СтрокаBase64=Преобразовать64(КоллекцияЗаписей.Fields("Фото").Value);
    					
    					Двоичные=Base64Значение(СтрокаBase64);
    					Картина=Новый Картинка(Двоичные);
    					Сообщить(Картина.Формат());
    					// Картина1=Картина.Преобразовать(ФорматКартинки.PNG);
    					Картина.Записать("D:\1\"+КоллекцияЗаписей.Fields("Табельный номер").Value+"__"+КоллекцияЗаписей.Fields("Фамилия").Value+".png"));	
    				
    					ЭлементыФормы.ПолеКартинки1.Картинка=Картина1;
    					Иначе
    					Сообщить(КоллекцияЗаписей.Fields("Фамилия").Value+" нет ФОТО!");
    					
    				КонецЕсли;   
    			КонецЕсли;
    			
    			
    			//////////////	
    		КонецЦикла;
    		
    		КоллекцияЗаписей.MoveNext();
    	КонецЦикла;
    	
    	//Отображаем данные из ТЗ в ТабличномПоле
    	ЭлементыФОрмы.ТабличноеПоле1.Значение = ТабличноеПоле1;
    	ЭлементыФОрмы.ТабличноеПоле1.СоздатьКолонки();
    КонецПроцедуры
    
Для участия в обсуждении Вам необходимо авторизоваться либо   зарегистрироваться