Добрый день!
Я новичок в JavaScript и хотел бы помочь своему другу. Я создал небольшое приложение node.js (v8.9.4) и express (v4.16.4) с кодом Visual Studio (1.23, 2018). Веб-сокет отправляет данные из каталога сервера клиенту, и представление динамически адаптируется в зависимости от взаимодействия с пользователем. Представление состоит из 1 HTML-элемента выбора. Как только одна опция выбрана, второй элемент выбора отображается с данными изображения в качестве тегов опции. Данные изображения состоят из двух форматов файлов: .mha и .vtk.
Что я сделал до сих пор:
Я протестировал свое приложение с изображениями .png и .jpg, и оно работало как сон. Изображения успешно добавляются или удаляются из домена. Но изображения .mha не могут отображаться как «нормальные» форматы файлов (они отображаются как пустые файлы). Таким образом, я проинформировал себя настолько хорошо, насколько это было возможно, и понял, что должен был использовать itk. Итак, я интегрировал itk в свой проект:
npm install --save itk
Он также отображается в папке node_modules и под зависимостями:
"itk": {
"version": "9.1.2",
"resolved": "https://registry.npmjs.org/itk/-/itk-9.1.2.tgz",
"integrity": "sha512-Nngfz3QdTYJybNQjUtmOToFCJ8hfbGEiIDYsv/WFr6/vK9wXpArcDYTDcR90Rhd8GhMbi1XNArYjJRxQ0E7aVw==",
"requires": {
"axios": "0.17.1",
"commander": "2.19.0",
"mime-types": "2.1.21",
"promise-file-reader": "0.3.1",
"webworker-promise": "0.4.2"
}
Исследование:
https://github.com/InsightSoftwareConsortium/itk-js
https://insightsoftwareconsortium.github.io/itk-js/docs/index.html
https://insightsoftwareconsortium.github.io/itk-js/index.html
https://discourse.itk.org/t/how-to-create-an-itk-js-image-object/1163
Вопрос:
Может, кто-нибудь объяснит мне на самом базовом уровне, как я могу загрузить изображение .mha с помощью javascript и добавить его в dom, как я делаю это с .pngs и .jpgs? К сожалению, как новичок, я просто не понимаю пример кода на github.
СПАСИБО !!!
Применение:
Для наглядности я хотел бы представить вам код.
// index.js
// App setup
var express = require('express');
var app = express();
// Server setup
var server = app.listen(3000,function(){
console.log("Marcos chat application has started. Server is listening at 3000...");
});
// Static file
app.use(express.static('public'));
app.use(express.static('resources/experiment2'));
// File Reading (for directory analysis)
var fs = require('fs');
var directory;
fs.readdir("resources", function(err, items) {
directory = items;
});
// Websocket setup
var experimentPath;
var socket = require('socket.io');
var io = socket(server);
// "Listens" to specific server
io.on('connection',function(socket){
console.log("User logged in...");
// Establish first html select element
socket.emit('sendDirectory',directory);
// Establish second html select element
socket.on('selectedExperiment', function(msg){
experimentPath = "resources" + "/" + msg;
app.use(express.static(experimentPath));
var experimentDirectory = fs.readdirSync(experimentPath, function(err, items) {});
socket.emit('sendExperimentDirectory', experimentDirectory);
});
// .mha image socket event
socket.on('checkImageType', function(msg){
console.log(msg);
if(msg.format == ".mha")
{
// Read .mha image
}
});
});
// socket.js
// Establish websocket connection
var socket = io.connect('http://localhost:3000');
var firstSocketAccess = true;
var firstImageAccess = true;
var selectNode;
var imageNode;
// Listens to websocket for sendDirectory event
socket.on('sendDirectory',function(msg){
// Creates first <select> element
var selectOneNode = document.createElement("SELECT");
selectOneNode.id = "experimentSelection";
document.getElementById("historyTA").appendChild(selectOneNode);
// Creates <option> tags for first <select> element
for (var i = 0; i < msg.length; i++) {
var option = document.createElement("OPTION");
option.innerHTML = msg[i];
document.getElementById("experimentSelection").appendChild(option);
}
// Websocket sends per default the first experiment directory
socket.emit('selectedExperiment',msg[0]);
// Event Listener for first <select> element
document.getElementById("experimentSelection").addEventListener("change",function(){
// Websocket sends the selected experiment directory
socket.emit('selectedExperiment',msg[document.getElementById("experimentSelection").selectedIndex]);
document.getElementById("historyTA").removeChild(imageNode);
})
});
// Listens to websocket for sendExperimentDirectory event
socket.on('sendExperimentDirectory',function(msg){
// Must delete select element node when it's has been created before
if(firstSocketAccess == false)
{
document.getElementById("historyTA").removeChild(selectNode);
}
// Creates second <select> element
selectNode = document.createElement("SELECT");
selectNode.id = "experimentSubSelection";
document.getElementById("historyTA").appendChild(selectNode);
// Creates <option> tags for second <select> element
for (var i = 0; i < msg.length; i++) {
var option = document.createElement("OPTION");
option.innerHTML = msg[i];
document.getElementById("experimentSubSelection").appendChild(option);
}
// Check the image format type
var formatType = {path: msg[0], format: msg[0].substring(msg[0].indexOf("."))};
socket.emit('checkImageType',formatType);
// Appends per default the first image to the dom
imageNode = document.createElement("IMG");
imageNode.id = "resultImage";
imageNode.setAttribute("src", msg[0]);
document.getElementById("historyTA").appendChild(imageNode);
// Event Listener for second <select> element
document.getElementById("experimentSubSelection").addEventListener("change",function()
{
// Removes image element node before appending the new
document.getElementById("historyTA").removeChild(imageNode);
// Checks image type format
formatType = {path: msg[document.getElementById("experimentSubSelection").selectedIndex], format: msg[document.getElementById("experimentSubSelection").selectedIndex].substring(msg[document.getElementById("experimentSubSelection").selectedIndex].indexOf("."))};
socket.emit('checkImageType',formatType);
// Creates image element node and appends to the dom
imageNode = document.createElement("IMG");
imageNode.id = "resultImage";
imageNode.setAttribute("src", msg[document.getElementById("experimentSubSelection").selectedIndex]);
document.getElementById("historyTA").appendChild(imageNode);
firstImageAccess = false;
})
firstSocketAccess = false;
});
<!DOCTYPE html>
<html>
<head>
<title>Simple Chat Application</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"></script>
</head>
<body>
<div id="historyTA" cols="100" rows="40" style="resize:none"></div>
<script src="socket.js"></script>
</body>
</html