Вопрос или проблема
У меня есть сырой файл, но я не знаю, какой формат пикселей или ширину изображения. Мне нужен инструмент, который может быстро отобразить данные и позволить мне легко попробовать разные форматы. Примером такого инструмента для Windows будет 7yuv. Какое программное обеспечение существует для этой задачи на Linux?
Примечание: Это не имеет ничего общего с сырыми данными цифровых камер, что раздражает мои попытки использовать Google для ответа на этот вопрос.
Оказывается, Gimp может это сделать. Просто откройте файл как сырой, и вы получите этот полезный диалог, который позволяет вам просмотреть изображение:
convert
из ImageMagick
Например, 8-битный 2×3 градации серого:
printf '\x00\xFF\x88\xFF\x00\xFF' > in.bin
Затем:
convert -depth 8 -size 3x2+0 gray:in.bin out.png
Выход (как только вы масштабируете его как-то, см. раздел ниже для деталей):
Объяснение команды:
-depth 8
: каждый цвет имеет 8 бит-size 2x3+0
:2x3
изображение.+0
означает, что начинается с смещения 0 в файле. Если есть заголовки метаданных, вы можете пропустить их с помощью смещения.gray:in.bin
: входной файл этоin.bin
, а форматgray
, как определено на http://www.imagemagick.org/script/formats.php. Эта странная нотация используется, потому что ImageMagick обычно определяет формат по расширению, но здесь расширения нет.
Как просматривать такие крошечные выводы, как в этом примере
Проблема сейчас в том, как точно просмотреть такой крошечный 3×2 вывод. Прямой eog
:
eog out.png
не очень хорош, потому что изображение слишком маленькое, и если вы сильно увеличите, eog
использует алгоритм отображения, который постоянно смешивает пиксели, что лучше для большинства картинок, но не для такого крошечного изображения.
Одной из хороших возможностей является выполнение:
convert out.png -scale 300x out2.png
или напрямую за один прием с:
convert -depth 8 -size 3x2+0 gray:in.bin -scale 300x out.png
-scale
нужен вместо -resize
, поскольку -resize
смешивает цвета пикселей непрерывно, как и eog
по умолчанию.
Другой вариант — просмотреть это в Gimp:
gimp out.png
Редакторы изображений, такие как Gimp, должны показывать каждый отдельный пиксель отдельно, если вы увеличите достаточно.
Пример RGB
printf '\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF' > in.bin
convert -depth 8 -size 3x1+0 rgb:in.bin out.png
или с -scale
, чтобы сделать его более читаемым:
convert -depth 8 -size 3x1+0 rgb:in.bin -scale 300x out.png
Связано:
Тестировалось на Ubuntu 16.04, ImageMagick 6.8.9.
этот фрагмент python делает это:
from PIL import Image
import numpy as np
raw_img = np.fromfile("image", dtype=np.uint8)
l = int(np.sqrt(raw_img.shape[0]/4)) # для изображения в форме квадрата l x l
Image.frombytes(mode="RGBA", size=(l, l), data=raw_img).show()
Ответ или решение
Как отобразить сырые битмапы на Linux: инструментальный обзор
Если у вас есть файл в сыром формате, но вы не знаете, какой у него пиксельный формат или ширина изображения, существует несколько эффективных инструментов для отображения и анализа таких данных на Linux. Ниже представлена информация о нескольких подходах и возможностях программного обеспечения, которое может помочь вам в этой задаче.
1. GIMP
GIMP (GNU Image Manipulation Program) – это мощный редактор изображений, который поддерживает открытие файлов в сыром формате. Когда вы пытаетесь открыть такой файл, GIMP предоставляет вам диалоговое окно, в котором вы можете управлять настройками и форматами изображения, что позволяет легко просматривать данные:
-
Преимущества:
- Пользовательский интерфейс для ввода параметров (ширина, высота, формат).
- Возможность редактирования и манипуляции изображениями.
-
Недостатки:
- Может быть избыточным для простых задач просмотра.
2. ImageMagick
ImageMagick – это мощный набор инструментов для создания, редактирования и преобразования изображений. Его утилита convert
позволяет открывать и отображать сырой бинарный файл, задавая формат и размеры изображения.
Пример использования:
printf '\x00\xFF\x88\xFF\x00\xFF' > in.bin
convert -depth 8 -size 3x2+0 gray:in.bin out.png
- Объяснение параметров:
-depth 8
: Указывает, что каждый цвет имеет 8 бит.-size 3x2+0
: Определяет размер изображения 3×2 с начальным смещением 0 в файле.gray:in.bin
: Указывает формат входного файла как градации серого.
Как просмотреть миниатюрные изображения:
Для более постепенного и четкого просмотра изображений, особенно малых, можно использовать:
convert out.png -scale 300x out2.png
Или комбинировать команды:
convert -depth 8 -size 3x2+0 gray:in.bin -scale 300x out.png
3. Python с использованием Pillow
С помощью Python и библиотеки Pillow (PIL) вы также можете отображать сырые изображения. Этот метод позволяет писать скрипты для автоматизации процесса работы с изображениями.
from PIL import Image
import numpy as np
raw_img = np.fromfile("image", dtype=np.uint8)
l = int(np.sqrt(raw_img.shape[0] / 4)) # Предполагая квадратное изображение
Image.frombytes(mode="RGBA", size=(l, l), data=raw_img).show()
- Преимущества:
- Позволяет гибко управлять размером и форматом изображения с использованием кода.
- Возможность легкой автоматизации и интеграции в более крупные проекты.
Заключение
На Linux существует множество инструментов для отображения сырых битмапов, каждый из которых имеет свои особенности и преимущества. GIMP, ImageMagick и Python с Pillow позволяют вам экспериментировать с различными форматами и быстро находить нужное изображение. Выбор инструмента будет зависеть от ваших предпочтений и потребностей. Используйте предоставленные примеры, чтобы начать работу, и адаптируйте их в зависимости от ваших требований.