Выберите и отобразите изображение из файловой системы с помощью электронного

Я разрабатываю небольшое приложение в Electron, из которого я могу загрузить изображение в Instagram, и я застрял на одном из первых шагов: /

Я хочу выбрать изображение из файловой системы и отобразить его в своем приложении.

Вот код, который у меня есть на данный момент:

КОД:

remote.dialog.showOpenDialog((filenames) => {
    fs.readFile(filepath, 'utf-8', (err, data) => {

        if (err){
            alert("An error ocurred reading the file :" + err.message);
            return;
        }
    });
});
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
7
0
8 438
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Минимальный пример выбора, чтения и отображения изображения PNG.

Процесс рендеринга :::

var remote = require('electron').remote;
var fs = remote.require('fs');

  
remote.dialog.showOpenDialog(remote.getCurrentWindow(),
   {
    filters: [
      {name: 'Images', extensions: ['png']}
    ]
   }, 
   function(filepaths, bookmarks) {
     //read image (note: use async in production)
     var _img = fs.readFileSync(filepaths[0]).toString('base64');
     //example for .png
     var _out = '<img src = "data:image/png;base64,' + _img + '" />';
     //render/display
     var _target = document.getElementById('image_container');
     _target.insertAdjacentHTML('beforeend', _out);

     return;
});
<div id = "image_container"></div>

Спасибо, в итоге я использовал эту строку fs.readFileSync (filepaths [0]). ToString ('base64') Я могу построить дальше оттуда.

rvrbk 11.06.2018 11:47

Есть ли способ прикрепить файловый буфер непосредственно к изображению? без конвертации в base64

pery mimon 03.12.2018 16:36

Вот решение с дополнительной информацией о разделении процесса main и renderer и использовании es6.

основной процесс

import { ipcMain, dialog } from "electron";
import fs from 'fs';

ipcMain.on("chooseFile", (event, arg) => {
  const result = dialog.showOpenDialog({
    properties: ["openFile"],
    filters: [{ name: "Images", extensions: ["png","jpg","jpeg"] }]
  });

  result.then(({canceled, filePaths, bookmarks}) => {
    const base64 = fs.readFileSync(filePaths[0]).toString('base64');
    event.reply("chosenFile", base64);
  });
});

процесс рендеринга

import electron from 'electron';

// trigger file prompt
electron.ipcRenderer.send('chooseFile');

// handle response
electron.ipcRenderer.on('chosenFile', (event, base64) => {
  const src = `data:image/jpg;base64,${base64}`
})

Благодарю. для меня это было более понятно и понятно

zeropublix 06.10.2020 09:06

С электроном 11 работает следующий фрагмент от https://www.electronjs.org/docs/api/protocol

app.whenReady().then(() => {
  protocol.registerFileProtocol('atom', (request, callback) => {
    console.info(request.url)
    const url = request.url.substr(7)
    callback({ path: url })
  })
})

Будьте осторожны нет, чтобы использовать обычный протокол file://, но вместо этого пользовательский протокол 'atom' или 'my_whatever'

Теперь вы можете получить изображение следующим образом:

<img src = "atom://C:\\Users\\my_path\\myfile.png" />

Однако, если вы не хотите сохранять синтаксис протокола file на стороне рендеринга, вы можете сделать следующее:

protocol.registerFileProtocol('file', ()=>...)

Теперь вы можете получить изображение таким образом

<img src = "file://C:\\Users\\my_path\\myfile.png" />

Однако вам придется отключить webSecurity.

const mainWindow = new BrowserWindow({
webPreferences: {
  nodeIntegration : true,
  webSecurity: false
}

Другие вопросы по теме