Как прочитать сырое изображение с помощью PIL?

Что также хорошо работает, это SuppressWithNearbyCommentFilter , который использует отдельные комментарии для подавления событий аудита.

Например

// CHECKSTYLE IGNORE check FOR NEXT 1 LINES
public void onClick(View view) { ... }

Чтобы настроить фильтр так, что CHECKSTYLE IGNORE проверяет СЛЕДУЮЩИЙ var LINES избегает запуска любых проверок для данной проверки для текущей строки и следующих строк var (всего для var + 1 строки):


    
    
    

http : //checkstyle.sourceforge.net/config.html

30
задан Alceu Costa 3 August 2010 в 13:52
поделиться

3 ответа

Специальная документация находится на http://effbot.org/imagingbook/concepts.htm :

Mode

Режим изображения определяет тип и глубина пикселя изображения. В текущий выпуск поддерживает следующие стандартные режимы:

  • 1 (1-битные пиксели, черно-белые, сохраняются с одним пикселем на байт)
  • L (8-битные пиксели, черно-белые)
  • P (8-битные пиксели, сопоставленные с любой другой режим с использованием цветовой палитры)
  • RGB (3x8-битные пиксели, истинный цвет)
  • RGBA (4x8-битные пиксели, истинный цвет с маской прозрачности)
  • CMYK (4x8-битные пиксели, цветоделение)
  • YCbCr (3x8-битные пиксели, формат цветного видео)
  • I (32-битные целые числа со знаком)
  • F (32-битные пиксели с плавающей запятой)

PIL также обеспечивает ограниченную поддержку для несколько специальных режимов, в том числе LA (L с альфа-каналом), RGBX (истинный цвет с отступ) и RGBa (истинный цвет с предварительно умноженная альфа).

20
ответ дан 28 November 2019 в 00:12
поделиться

Image.frombuffer (режим, размер, данные) => изображение

(Новое в PIL 1.1.4). Создает память изображения из пиксельных данных в строке или буферном объекте с использованием стандартного «сырого» декодера. В некоторых режимах память изображения будет совместно использовать память с исходным буфером (это означает, что изменения исходного объекта буфера отражаются в изображении). Не все режимы могут совместно использовать память; поддерживаемые режимы включают «L», «RGBX», «RGBA» и «CMYK». Для других режимов эта функция ведет себя как соответствующий вызов функции fromstring.

Я не уверен, что означает «L», но «RGBA» означает «красный-зеленый-синий-альфа», поэтому я полагаю, что RGBX эквивалентен RGB (отредактируйте: при тестировании это не так)? CMYK - это голубой-пурпурный-желтый-кельвин, это еще один тип цветового пространства. Конечно, я предполагаю, что если вы знаете о PIL, вы также знаете о цветовых пространствах. Если нет, то Википедия имеет отличную статью.

Что касается того, что это на самом деле означает (если этого недостаточно): значения пикселей будут кодироваться по-разному для каждого цветового пространства. В обычном RGB у вас есть 3 байта на пиксель - 0–254, 0–254, 0–254. Для Alpha вы добавляете по одному байту к каждому пикселю. Если вы декодируете изображение RGB как RGBA, вы закончите чтение пикселя R справа от первого пикселя в качестве альфа, что означает, что вы получите пиксель G в качестве значения R. Это будет увеличиваться в зависимости от размера вашего изображения, но это действительно сделает ваши цвета неестественными. Точно так же попытка прочитать изображение в кодировке CMYK как RGB (или RGBA) заставит ваше изображение выглядеть совсем не так, как должно. Например, попробуйте это с изображением:

i = Image.open('image.png')
imgSize = i.size
rawData = i.tostring()
img = Image.fromstring('L', imgSize, rawData)
img.save('lmode.png')
img = Image.fromstring('RGB', imgSize, rawData)
img.save('rgbmode.png')
img = Image.fromstring('RGBX', imgSize, rawData)
img.save('rgbxmode.jfif')
img = Image.fromstring('RGBA', imgSize, rawData)
img.save('rgbamode.png')
img = Image.fromstring('CMYK', imgSize, rawData)
img.save('rgbamode.tiff')

И вы увидите, что делают разные режимы - попробуйте это с различными входными изображениями: png с альфа-каналом, png без альфа, bmp, gif и jpeg. На самом деле, это довольно забавный эксперимент.

10
ответ дан 28 November 2019 в 00:12
поделиться

Если ничего не помогает, вы всегда можете прочитать исходный код. Для PIL загрузки находятся здесь .

Вы никогда не говорили, в каком именно формате были пиксельные данные в 16-битных целых числах без знака, но я предполагаю, что это что-то вроде RRRRRGGGGGGBBBBBB, (5-битный красный, 6-битный зеленый, 5-битный синий) или RRRRRGGGGGBBBBBA (5-битный красный, 5-битный зеленый, 5-битный синий, 1-битный альфа-канал или прозрачность). Я не заметил поддержки этих форматов после того, как сам очень быстро просмотрел некоторые из источников, но не могу сказать точно так или иначе.

На той же веб-странице, где находятся загрузки PIL, они упоминают, что можно отправить вопросы в список рассылки Python Image SIG и предоставить ссылку на него. Возможно, это лучший источник, чем спрашивать здесь.

Надеюсь, это поможет.

5
ответ дан 28 November 2019 в 00:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: