Как вывести изображение из base64?
что бы потом можно было загрузить его через ?
- Вопрос задан более трёх лет назад
- 1694 просмотра
Комментировать
Решения вопроса 2

https://jsfiddle.net/3s6cemjx/
Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать

Талян @flapflapjack
на треть я прав
Если коротко, и без проверок, и чтобы /api/get-icon.php?id=. то так:
Грубо, в начале скрипта:
'iVBORw0KGgoAAAANSU==. ', 'icon2' =>'kakffdjgjfhgkjhasjkghfs==. '); if(isset($_GET['icon'])) < header ('Content-Type: image/png'); switch($_GET['icon']) < case "icon1": print base64_decode($icons['icon1']); die(); case "icon2": print base64_decode($icons['icon2']); die(); >> ///ну а тут уже любой другой код
Можно не swicth-case, а нормально, типа
или с БД доставать.
А зачем вообще иконки в скрипте хранить то?
Я вижу в этом смысл, если только у вас всё приложение целиком состоит из одного скрипта.
1 как картинка из base64
подскажите, можно ли воспроизвести картинку из строки base64. через base64значение — получаю двоичный код. вопрос, можно ли без записи в файл с последующим открытием его сразу открыть картинку на форме в поле Картинка?
ЭлементыФормы.ПолеКартинки1.Картинка = Новый Картинка(_ДвоичныеДанные, Истина);
(1) УФ. там нету свойства Картинка..
у поля формы
(2) Картинка = ПоместитьВоВременноеХранилище(_ДвоичныеДанные, УникальныйИдентификатор)
(4) и потом как передать элементу формы?
(5) в (4) Картинка — это поле картинки на клиенте.
Больше ничего не нужно, картинка сразу отобразится.
(6) не показывает. а картинка.Вид = empty
нужно дописывать: data:image/jpeg;base64, в строку
двоичные = Base64значение(КодКартинки);?
Двоичные = base64значение(КодКартинки);
ЭлементКартинка = новый Картинка(Двоичные);
тогда видкартинки = Абсолютная. т.е. что то подтягивается, но картинка так и не рисуется
1 как картинка из base64
Судя по тому, что Base64Значение(СодержимоеФайла) возвращает Неопределено, подозреваю, что в файле находится не Base64 строка, а двоичное содержимое картинки. Вот только не понятно в каком оно формате.
Если же попробовать вот так:
СодержимоеФайла = Новый ДвоичныеДанные(ПутьКИсходномуФайлу);
Картинка = Новый Картинка(СодержимоеФайла);
Сообщить(Картинка.Формат());
то в результате получим сообщение: «Неизвестный формат».
Скорее всего это какой-то неподдерживаемый 1С-кой формат картинки. При этом каким образом указанный сайт понимает переданную ему строку — загадка.
Александр, а подскажите нам, будьте добры, откуда Вы этот бинарный файл берете?
- #6
- 27.09.2017 16:19
- Отредактировано: 27.09.2017 16:21:14
Добрый день . У меня похожая проблема. Пытаюсь выгрузить картинки из 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.СоздатьКолонки(); КонецПроцедуры
Создать и вывести картинку — Base64 — PHP
далее, мне нужно сразу ее вывести, но только в base64. Подскажите логику моих дальнейших действий, а то не соображу: нужно копировать на хост ее и потом выводить или можно без копирования, сразу ее вывести, чтобы место не занимала ? Вывожу другие картинки на хосте так :
$file = "../../../../../demo/8.x/test.png"; if($fp = fopen($file,"rb", 0)) < $picture = fread($fp,filesize($file)); fclose($fp); $base64 = chunk_split(base64_encode($picture)); $tag = '
'; echo $tag; >
пример : авито
Отслеживать
задан 10 мая 2016 в 22:07
Sarkis Allahverdian Sarkis Allahverdian
1,238 1 1 золотой знак 17 17 серебряных знаков 26 26 бронзовых знаков
Постмотрите здесь stackoverflow.com/questions/8338695/…
11 мая 2016 в 3:34
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
вот — это очень просто , решение на SO.com сложное

это второй вариант — только проверил : рабочий , вот что выводит данные скрипты :
Отслеживать
ответ дан 11 мая 2016 в 3:56
user33274 user33274
Главное: генерировать картинку с номером телефона на лету — очень плохая мысль. Это тяжёлая операция и ваша железка загнётся уже на какой-то совершенно смешной нагрузке.
Создавайте картинку сразу при создании объявления и кладите её с каким-нибудь именем, не содержащем в себе исходный номер телефона. В сущности, md5 от телефона с какой-нибудь глобальной для проекта строкой уже будет достаточно. Прячетесь ведь только от глупых парсеров, которые не будут разбирать написанное на картинке, а написано-то без всяких искажений, контрастно. Соответственно, вставлять картинку инлайном в base64 или обычным src — уже не имеет особой разницы.
Либо, как другой вариант, генерировать картинку при первом обращении к ней и сохранять куда-нибудь в кеш.
Если работать с диском стало тесно (например, хотите кэш картинок в memcached засунуть), а tempnam использовать не спортивно (и, тем более, по какой-то причине хотите куцый GD2 , а не imagemagick ), то встаёт вопрос, как получить бинарник сгенерированной картинки в строку. GD штатных средств для этого не даёт, но можно обойтись буферизацией вывода:
$im = @imagecreate(150, 20)or die("Невозможно создать поток изображения"); $background_color = imagecolorallocate($im, 0, 0, 0); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 4, 2, 2, "+7 111 111 11 11", $text_color); ob_start(); imagepng($im); $img = ob_get_clean(); imagedestroy($im); // в $img теперь лежит сгенерированный бинарник