Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.05.2015, 00:25
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

Как вырезать определенные данные из файла
var reader = new FileReader();
reader.onload = function(){
var dataView = new DataView(reader.result);
var ints = new Int32Array(dataView.byteLength);
delete ints[10];
var blob = new Blob([ints], {type: 'image/jpeg'});
}

Картинка после этого не открывается. Как типизированный массив снова перевести в arraybuffer? В качестве аргумента объекта blob должен выступать как раз таки arraybuffer.

Последний раз редактировалось Dimaz, 29.05.2015 в 00:28.
Ответить с цитированием
  #2 (permalink)  
Старый 29.05.2015, 02:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Ну так чего бы она открывалась, если нарушить ее. Вы загнали в буфер данные, а это все, включая и заголовок, а потом чикнули что-то не глядя, вот и результат. Прочесть изображение, поместить его в canvas, вот там будет доступно его тело, можно работать с байтами описывающими цвет.
Ответить с цитированием
  #3 (permalink)  
Старый 29.05.2015, 10:49
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

Сообщение от laimas Посмотреть сообщение
Ну так чего бы она открывалась, если нарушить ее. Вы загнали в буфер данные, а это все, включая и заголовок, а потом чикнули что-то не глядя, вот и результат. Прочесть изображение, поместить его в canvas, вот там будет доступно его тело, можно работать с байтами описывающими цвет.
Да ничего я не чикал)) Даже если убрать delete ints[10], она не открывается. Тут дело не в картинке. Её я для примера загрузил. Я просто хочу научиться удалять определенные данные из файла. Но как типизированный массив перевести в blob, чтобы сохранить файл я не разберусь.
Ответить с цитированием
  #4 (permalink)  
Старый 29.05.2015, 13:12
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

FileReader API, как получить и манипулировать данными в сети подробно и неоднократно описаны. Ну просто, ради спортивного интереса, что можно определенного убрать в изображении таким образом? Ну к примеру, можно IPTC, что еще? И даже эта операция потребует изучение заголовка, и сперва получение по нему информации в нем, а уж потом...
Ответить с цитированием
  #5 (permalink)  
Старый 29.05.2015, 17:09
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

Сообщение от laimas Посмотреть сообщение
FileReader API, как получить и манипулировать данными в сети подробно и неоднократно описаны.
Разобрался на свежую голову))
var ints = new Int32Array(dataView.byteLength);

Этот код просто создает пустой типизированный массив с таким же количеством байтов, как и у файла. Т.е. все данные в нём состоят из сплошных нулей, поэтому картинка и не открывалась. Да и вообще нужно было использовать не Int32Array, а Int8Array.
Решением было в цикле занести все данные из DataView в пустой типизированный массив.
for (var i = 0; i < ints.length; i++) {
ints[i] = dataView.getInt8(i);
}

Теперь картинка открывается. Однако как вырезать данные из этого массива я так и не разобрался.
Сообщение от laimas Посмотреть сообщение
Ну просто, ради спортивного интереса, что можно определенного убрать в изображении таким образом? Ну к примеру, можно IPTC, что еще? И даже эта операция потребует изучение заголовка, и сперва получение по нему информации в нем, а уж потом...
Я же писал, что картинку я для примера взял, чтобы сразу видеть результат. На самом деле я хочу вырезать данные из mp3 файла - сделать нарезчик.
Ответить с цитированием
  #6 (permalink)  
Старый 29.05.2015, 17:42
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

Вопрос решен. Допенькал таки)
var ints = new Int8Array(dataView.byteLength-1800);
for (var i = 0; i < ints.length; i++) {
if(i==800) i+=1800;
ints[i] = dataView.getInt8(i);
}

Пропускает 1800 байт, начиная с 800-го байта при копировании в типизированный массив из DataView.
Ответить с цитированием
  #7 (permalink)  
Старый 29.05.2015, 18:43
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Нарезки говорите, может ffmpeg и на сервере в таком случае?
Ответить с цитированием
  #8 (permalink)  
Старый 29.05.2015, 19:07
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

Сообщение от laimas Посмотреть сообщение
Нарезки говорите, может ffmpeg и на сервере в таком случае?
да слышал я про него. уж больно много лишнего в нем. да и хостер говорит, что нужно vds. На клиенте-то круче все равно)
Только что проверил. Вырезает за доли секунды.
Ответить с цитированием
  #9 (permalink)  
Старый 29.05.2015, 19:10
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

Новая проблема. Код выше. Код вырезает 1800 байт, начиная с 800-го байта. Однако он вырезает 1800 байт еще и в конце файла. Что не так?
Ответить с цитированием
  #10 (permalink)  
Старый 29.05.2015, 20:28
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Dimaz
На клиенте-то круче все равно
Чем? Это надо или сесть самому и библиотеку написать или же взять готовую, а не выпендриваться по каждому поводу. ) Хостер ваш многое вам может наговорить, просто не хотят устанавливать, а кому мол надо чешитесь сами.

Сообщение от Dimaz
Что не так?
Условия итерации значит не верны, не достигается конец данных.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как добавить данные в глобальный массив из функции Jigan2 jQuery 2 14.03.2015 18:06
как загрузить массив из файла satyr22 Internet Explorer 4 21.08.2011 21:04
Help ! Как загрузить данные по ссылке из таблицы1 в таблицу2 ? asked86 Общие вопросы Javascript 1 25.03.2009 21:06
Как узнать какие ошибки произошли при парсинге xml файла faunder Events/DOM/Window 0 12.09.2008 14:17
Возможно ли получить данные из файла на сервере? sdff Общие вопросы Javascript 11 19.07.2008 20:48