Я потратил много времени, пытаясь просмотреть html, javascript, сетевой трафик и т. д., и многое узнал о javascript, blobs, декодировании/кодировании изображений base64, но я до сих пор не могу понять, как извлечь изображения в этих видео с этого сайта: https://www.jamesallen.com/loose-diamonds/all-diamonds/
Вот что я знаю: Каждое видео на самом деле представляет собой набор из 512 изображений, которые извлекаются с сервера через файлы с названием setX.bin (где X — число). Затем они анализируются через массив int в объект blob (есть еще base64, но я забыл где), который каким-то образом преобразуется в изображение.
Следовать исходному коду очень сложно, так как он намеренно написан в виде спагетти-кода.
Как я могу извлечь изображения каждого бриллианта и сделать это эффективно?
Мое единственное решение:
Я могу очень легко получить файлы setX.bin, и если я просто каким-то образом «передам» их в функции javascript, тогда все будет хорошо.
Мое второе решение:
вращать каждый ромб вручную и извлекать изображения из кеша или что-то в этом роде.
Я хотел бы использовать python для этого.
Обновлено: Я нашел javascript здесь, на SO, который выдает «SecurityError: операция небезопасна». Вот:
function exportCanvasAsPNG(id, fileName) {
var canvasElement = document.getElementById(id);
canvasElement.crossOrigin = "anonymous";
var MIME_TYPE = "image/png";
var imgURL = canvasElement.toDataURL(MIME_TYPE);
window.console.info(canvasElement);
var dlLink = document.createElement('a');
dlLink.download = fileName;
dlLink.href = imgURL;
dlLink.dataset.downloadurl = [MIME_TYPE, dlLink.download, dlLink.href].join(':');
document.body.appendChild(dlLink);
dlLink.click();
document.body.removeChild(dlLink);
}
exportCanvasAsPNG("canvas-key-_w5qzvdqpl",'asdf.png');
Я запустил его из консоли Firefox. Когда я запустил аналогичный скрипт выполнения в python, у меня возникла та же проблема.
Я хочу иметь возможность очищать все изображения на 360 градусов для каждого холста.
Edit2: чтобы упростить этот вопрос, я знаю, как получить файлы setX.bin, но я не знаю, как преобразовать эту коллекцию изображений из bin в jpg. Каждый файл bin представляет собой несколько файлов jpg.
Я использую Python 3
в какой строке вы получаете ошибку
var imgURL = canvasElement.toDataURL(MIME_TYPE);
Давайте продолжить обсуждение в чате.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Файлы .bin, по-видимому, содержат только файлы jpeg, соединенные вместе с некоторыми ведущими метаданными. Вы можете просто перебирать байты файла в поисках сигнатур файлов jpeg (0xFFD8) и вырезать каждое изображение:
JPEG_MAGIC = b"\xff\xd8"
with open("set0.bin", "rb") as f:
s = f.read()
i = 0
start_index = s.find(JPEG_MAGIC)
while True:
end_index = s.find(JPEG_MAGIC, start_index + 1)
if end_index == -1:
end_index = len(s)
with open(f"out{i:03}.jpg", "wb") as out:
out.write(s[start_index:end_index])
if end_index == len(s):
break
start_index = end_index
i += 1
Результат:
Просто сверяюсь с несколькими другими наборами, но я думаю, что вы поняли. Я назначу награду, когда проверю их. Большое тебе спасибо! Как вы узнали, что нужно искать эту подпись?
@Monty Файлы определенного формата обычно имеют уникальный подписи в своих начальных байтах, что позволяет их идентифицировать. Вот как работает команда файл.
Большое спасибо за ваше решение! Это очень хорошо работает для моих нужд. Я тоже узнал кое-что новое!
Я надеюсь, что вы заглянете в эта почта, чтобы предложить какое-либо решение @cody. Заранее спасибо.
Извините, я не заметил этого вовремя, но, похоже, у вас есть решение!
вы используете python или javascript