Как получить альфа-значение изображения PNG с PIL?

Ознакомьтесь с этой статьей, она показывает, как имитировать SQL ROW_NUMBER () с разделом в MySQL. Я столкнулся с тем же самым сценарием в реализации WordPress. Мне нужен ROW_NUMBER (), и его там не было.

http://www.explodybits.com/2011/11/mysql-row-number/

В примере в статье используется один разделять по полю. Чтобы разделить дополнительные поля, вы можете сделать что-то вроде этого:

  SELECT  @row_num := IF(@prev_value=concat_ws('',t.col1,t.col2),@row_num+1,1) AS RowNumber
         ,t.col1 
         ,t.col2
         ,t.Col3
         ,t.col4
         ,@prev_value := concat_ws('',t.col1,t.col2)
    FROM table1 t,
         (SELECT @row_num := 1) x,
         (SELECT @prev_value := '') y
   ORDER BY t.col1,t.col2,t.col3,t.col4 

Использование concat_ws обрабатывает null. Я проверил это на 3 поля, используя int, date и varchar. Надеюсь это поможет. Просмотрите статью, так как она нарушает этот запрос и объясняет это.

21
задан jack 26 December 2009 в 07:27
поделиться

4 ответа

Для получения альфа-слоя RGBA-изображения достаточно:

red, green, blue, alpha = img.split()

или

alpha = img.split()[-1]

И существует способ установки альфа-слоя:

img.putalpha(alpha)

Ключ прозрачности используется только для определения индекса прозрачности в режиме палитры (P). Если вы хотите закрыть также и регистр прозрачности в режиме палитры и закрыть все регистры, вы можете сделать это

if img.mode in ('RGBA', 'LA') or (img.mode == 'P' and 'transparency' in img.info):
    alpha = img.convert('RGBA').split()[-1]

Примечание: Метод преобразования необходим, когда image.mode is LA, из-за ошибки в PIL.

.
47
ответ дан 29 November 2019 в 06:38
поделиться
# python 2.6+

import operator, itertools

def get_alpha_channel(image):
    "Return the alpha channel as a sequence of values"

    # first, which band is the alpha channel?
    try:
        alpha_index= image.getbands().index('A')
    except ValueError:
        return None # no alpha channel, presumably

    alpha_getter= operator.itemgetter(alpha_index)
    return itertools.imap(alpha_getter, image.getdata())
4
ответ дан 29 November 2019 в 06:38
поделиться

Вы можете получить альфа-данные из целого изображения за один раз, преобразовав изображение в строку с режимом 'A', например, в этом примере мы получаем альфа-данные из изображения и сохраняем их как изображение в масштабе серого :)

from PIL import Image

imFile="white-arrow.png"
im = Image.open(imFile, 'r')
print im.mode == 'RGBA'

rgbData = im.tostring("raw", "RGB")
print len(rgbData)
alphaData = im.tostring("raw", "A")
print len(alphaData)

alphaImage = Image.fromstring("L", im.size, alphaData)
alphaImage.save(imFile+".alpha.png")
5
ответ дан 29 November 2019 в 06:38
поделиться

img.info относится к изображению в целом -- альфа-значение в RGBA-изображении - в расчете на один пиксель, так что, конечно, его не будет в img.info. Метод getpixel объекта изображения, которому в качестве аргумента дана координата, возвращает кортеж со значениями (в данном случае четырёх) полос для этого пиксела -- последним значением кортежа будет A, альфа-значение.

3
ответ дан 29 November 2019 в 06:38
поделиться
Другие вопросы по тегам:

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