Я считываю двоичные данные из одного файла, который определяет значения интенсивности через координаты X и Y (не формат изображения с открытым исходным кодом), и хотят преобразовать его в изображение PNG (или другой широко поддерживаемый формат). Мне загрузили данные в массив (использующий модуль массива), где каждый элемент является целым числом от 0 до 255. Для сохранения этого к PNG, я могу создать 3 кортежа объекта каждого элемента (x) как так:
t = (x, x, x)
добавьте применяют его через массив с помощью карты (), затем сохраняют образ с помощью putdata (). Однако преобразование в массив кортежей занимает много времени (несколько минут). Есть ли способ определить значение rgb с помощью только одного целого числа (не кортеж). Я предполагающий альтернативу должен был бы использовать NumPy, но я не знаю, где запустить, таким образом, любая справка в этом отношении также ценилась бы.
Заранее спасибо за справку.
Когда вы создаете новое изображение, дайте ему режим L:
im = Image.new('L', size)
im.putdata([x1, x2, x3, ...])
, где данные представляют собой список значений, а не кортежи.
Существует несколько способов сделать это, но если у вас уже есть данные в памяти, посмотрите на использование Image.frombuffer
или Image.fromString
Используя режим «L»
(для 8-битных данных Greyscale).
Был бы IM.PUTPixel (xy, цвет) быть тем, что вы ищете?