Отказ от ответственности : у меня нет PythonMagick, в котором я сейчас нахожусь и не являюсь экспертом, поэтому (1) любое или все из следующих может быть неправильным, (2) это, безусловно, будет меньшеконкретнее, чем вы хотели бы, и (3) если кто-то еще знает лучше, я надеюсь, что они не будут откладывать, увидев ответ уже здесь.В любом случае:
При быстром взгляде на код это выглядит так, как будто вы можете читать значения пикселей по одному, используя метод pixelColor
в классе Image
.Это возвращает значение PythonMagick.Color
, из которого вы можете извлечь компоненты R, G, B.Базовая библиотека C ++ поддерживает считывание большого количества пикселей за раз, используя Image::writePixels
, который также присутствует в PythonMagick.Image
;но я думаю, что правильное использование этого метода зависит от других вещей, которые не реализованы в PythonMagick.Это жаль, потому что я уверен, что это было бы намного эффективнее, чем чтение по одному пикселю за раз.
В качестве альтернативы и, возможно, лучше, похоже, что вы можете записать содержимое изображения в PythonMagick.Blob
объект в памяти, который в основном делает то же самое, что и запись в файл только без файла :-).Вы можете выбрать, в каком формате он должен записываться, так же, как при записи в файл.Кажется, существует нечто, называемое get_blob_data
для извлечения содержимого Blob
.Примерно так:
im = PythonMagick.Image('image.jp2')
blob = PythonMagick.Blob()
im.write(blob, "png")
data = PythonMagick.get_blob_data(blob)
Получившийся data
, я думаю, является строкой Python, чьи байты являются двоичным представлением изображения.(Я предполагаю, что вы используете Python 2.x, где строковый тип является 8-битным. Я не знаю, работает ли PythonMagick с 3.x.) Я думаю, что есть некоторые форматы, которые в основном являются необработанными пиксельными данными;попробуйте "RGB".Затем вы можете извлечь содержимое с помощью лотов struct.unpack
или любого другого.