Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   как создать IMG из base64-строки? (https://javascript.ru/forum/misc/71257-kak-sozdat-img-iz-base64-stroki.html)

rsaburov 04.11.2017 22:59

как создать IMG из base64-строки?
 
Есть такая проблема:
Имеется папка с множеством подпапок содержащих html-файлы, содержащие embeded графику типа
<img src="data:image/png;base64,iVBORw0KG....=>
Имеется список (list.txt) полных имен файлов.
Как сделать так чтобы в каждой подпапке содержащей html-файлы создать соответствующие графические файлы и заменить base64-ссылку на на обычную, именуя при этом создаваемую графику по имени содержащих подпапок плюс число/номер.

laimas 05.11.2017 02:01

Директории на сервере, а не на клиенте, значит и вопрос этот решайте сразу средствами сервера, один раз.

rsaburov 05.11.2017 13:22

сервер здесь не причем
Это набор файлов и папок полученный в результате экспорта из органайзера документов myBase Desktop 7
Они стали экспортировать вставленные картинки в форме html-файлов с именно такой графикой.
Требуется преобразовать это хозяйство в человеческий вид своими силами

Rasy 05.11.2017 14:53

rsaburov,
Браузер - это не швейцарский нож.

Alexandroppolus 05.11.2017 15:13

rsaburov,
напиши скрипт для Nodejs, запусти его локально в консоли.
Скрипт должен прочитать все html-файлы в подпапках, регексом выловить из них картинки с data:image, для каждой взять оттуда base64, декодировать его в буфер и сохранить как файл.

https://stackoverflow.com/questions/...back-to-binary - base64 в буфер.

rsaburov 05.11.2017 16:49

Спасибо, интуитивно чувствую что это поможет
Но увы, я ни бум-бум в этой технологии, я чуть соображаю в простом JS
toooo saaaad

laimas 05.11.2017 17:46

rsaburov,
много html-фалов среди сохраненных, в которых требуется замена?

rsaburov 05.11.2017 20:51

Много, но главное что это регулярно возникающая проблема с разными множествами файлов и папок и их иерархии.

Alexandroppolus 05.11.2017 21:51

rsaburov,

напиши эту прогу на любом языке, в котором смекаешь. Везде есть регексы, работа с base64 и чтение/запись файлов.

laimas 06.11.2017 00:31

rsaburov,
если много, то есть смысл написать ПО с интерфейсом, дабы не ковырять зря многого, а так можно было бы на VBS скрипт написать. В качестве ПО может выступать html+js, если оформить это как hta-приложение.

rsaburov 06.11.2017 03:30

а на JS никак нельзя?
И если для 1-го, то разве нельзя прикрутить там список адресов обрабатываемых файлов?

laimas 06.11.2017 05:34

Цитата:

Сообщение от rsaburov
а на JS никак нельзя?

Можно, но в рамках веб страницы ему многое не позволительно.

rsaburov 06.11.2017 13:21

ну и как бы это выглядело на VBS?

laimas 06.11.2017 13:32

Цитата:

Сообщение от rsaburov
ну и как бы это выглядело на VBS?

Да точно также как и на JS (но только выполняемого не из под веб страницы), разница только в синтаксисе. Что VBS, что JS, например исполняемый в HTA (а это та же html-страница с небольшим добавлением в хидере и расширением .hta) могут использовать ActiveX компоненты системы, а это доступ к файловой системе, базе данных, реестру, работа с COM и т.д.

rsaburov 06.11.2017 14:40

Спасибо за мысль.
Было бы интересно услышать ответ содержащий собственно код, надеюсь что такой участник все же найдется, хотя понятно, что "а кому сейчас легко" ....

laimas 06.11.2017 14:58

Цитата:

Сообщение от rsaburov
услышать ответ содержащий собственно код

Для кода нужны условия (ТЗ), и готовое вряд ли кто станет выкладывать, это уже работа за ...

rsaburov 06.11.2017 15:42

ну есть же и альтуисты
Мне бы хватило примера с единственным файлом произвольного наименования в произвольной папке, остальное я бы уже как то сам достроил по возможности.
Просто наводку я не могу ухватить - не тот уровень компетенции

rsaburov 06.11.2017 15:48

Вот кстати у меня есть код преобразователя графики в base64 - может быть его можно как-то развернуть в обратном направлении ...
Цитата:

<html><head>
<script>
function encodeImageFileAsURL(){
var filesSelected = document.getElementById("inputFileToLoad").files;
if (filesSelected.length > 0)
{
var fileToLoad = filesSelected[0];
var fileReader = new FileReader();
fileReader.onload = function(fileLoadedEvent) {
var srcData = fileLoadedEvent.target.result; // <--- data: base64
var newImage = document.createElement('img');
newImage.src = srcData;
document.getElementById("imgTest").innerHTML = newImage.outerHTML;
document.write("<h3>Кликните по тексту в форме для выделения</h3><br><textarea cols=50 rows=30 onclick='this.select()'>"+document.getElementById( 'imgTest').innerHTML+"</textarea>");
}
fileReader.readAsDataURL(fileToLoad);
}}
</script>
</head><body>
<input id="inputFileToLoad" type="file" onchange="encodeImageFileAsURL();" />
<div id="imgTest"></div>
<form id="form1"></form>
</body></html>

laimas 06.11.2017 16:22

Цитата:

Сообщение от rsaburov
ну есть же и альтуисты

Ждите, может и найдется.

Цитата:

Сообщение от rsaburov
Мне бы хватило примера с единственным файлом произвольного наименования в произвольной папке

Файл может содержать несколько изображений? Если да, то их надо как-то связать со списком наименований файлов. То есть, если уж делать, что требуется не один раз, а структура папок не постоянна, значит нужно делать - указать каталог, задать условия, связать со списком и т.д., щелкнуть Go, и все будет выполнено.

Ссылки же на конвертацию вам давали, но этого не достаточно, если не хотите ручками ковыряться. Иначе есть готовый софт конвертирования и сохранения из base64 в изображения. Используйте его, а файлы правьте вручную, сдался вам тогда JS.

Alexandroppolus 06.11.2017 17:09

rsaburov,

я же тебе всё расписал в пятом посте этого топика, что именно надо сделать. Там элементарные вещи (да, кстати, под такое дело в Node есть синхронные аналоги функций работы с файлами, потому ничего трудного). Ты вообще программировать умеешь? хотя бы немного?

Задача 100% не браузерная. Браузер не сможет просто взять и обойти некую указанную папку, и там что-то поделать.

Если это ситуация, которая возникает периодически, то надо просто иметь скрипт под рукой, которым решать проблему.

rsaburov 06.11.2017 17:47

я умею более или менее прикручивать к своим задачам чужие скрипты ((


Часовой пояс GMT +3, время: 16:52.