создать изображение в градациях серого - PullRequest
8 голосов
/ 21 января 2010

Я читаю двоичные данные из одного файла, который задает значения интенсивности по координатам x и y (не формат изображения с открытым исходным кодом) и хочу преобразовать их в изображение PNG (или другой широко поддерживаемый формат). У меня есть данные, загруженные в массив (используя модуль массива), где каждый элемент является целым числом от 0 до 255. Чтобы сохранить это в PNG, я могу создать кортеж из 3 элементов каждого элемента (x), например:

t = (x, x, x)

добавьте, примените его к массиву с помощью map (), затем сохраните изображение с помощью putdata (). Однако преобразование в массив кортежей занимает много времени (несколько минут). Есть ли способ указать значение rgb, используя только одно целое число (не кортеж). Я предполагаю, что альтернативой будет использование NumPy, но я не знаю, с чего начать, поэтому любая помощь в этом отношении также будет признательна.

Заранее спасибо за помощь.

Ответы [ 3 ]

13 голосов
/ 21 января 2010

Когда вы создаете новое изображение, присвойте ему режим L:

im = Image.new('L', size)
im.putdata([x1, x2, x3, ...])

Где данные - это список значений, а не кортежей.

3 голосов
/ 21 января 2010

Есть несколько способов сделать это, но если у вас уже есть данные в памяти, используйте Image.frombuffer или Image.fromstring, используя режим 'L' (для 8-битных данных в градациях серого).

0 голосов
/ 21 января 2010

Будет ли im.putpixel (xy, color) быть тем, что вы ищете?

...