2017-02-13 8 views
2

PIL을 사용하여 일부 공중 이미지를 합성하고 약간의 문제가 발생했습니다. 내가 composite.paste()에 전화를 걸 때PIL RGB로 투명한 PNG로드?

composite = Image.new('RGBA', (256, 256)) 
url = 'http://...' 
resp = requests.get(url) 
content = StringIO(resp.content) 
image = Image.open(content) 
composite.paste(image, (0, 0), image) 

는, PIL은 나에게 오류 "나쁜 투명 마스크에 ValueError"를 제공합니다 나는 코드의이 작은 비트와 함께 this image을로드 PIL을 사용합니다. image.mode을 인쇄 할 때 예상되는 RGBA (paste() 필요) 대신 간단히 RGB입니다.

내 다운로드 한 PNG의 알파 채널은 어디에 있습니까?

답변

4

아래의 코드는 나를 위해 노력하고 있습니다 :

from PIL import Image 
import requests 
import StringIO 

url = "https://gis.apfo.usda.gov/arcgis/rest/services/NAIP/Tennessee_2016_60cm/ImageServer/exportImage?bbox=-87.1875,34.3071438563,-84.375,36.5978891331&bboxSR=4326&size=256,256&imageSR=102113&transparent=true&format=png&f=image" 
resp = requests.get(url) 
content = StringIO.StringIO(resp.content) 
image = Image.open(content) 
image = image.convert('RGBA') 
composite = Image.new("RGBA", image.size, (255,255,255,0)) 
composite.paste(image) 
+0

감사합니다. 키가 "image.convert ('RGBA')"로 밝혀졌습니다. – magneticMonster

0

를 지금까지 내가 그것을 볼 수있는 이미지가 RGBA입니다.

$ convert exportImage.png -verbose info 

Image: exportImage.png 
    Format: PNG (Portable Network Graphics) 
    Mime type: image/png 
    Class: DirectClass 
    Geometry: 256x256+0+0 
    Units: Undefined 
    Type: TrueColorAlpha 
    Endianess: Undefined 
    Colorspace: sRGB 
    Depth: 8-bit 
    Channel depth: 
    red: 8-bit 
    green: 8-bit 
    blue: 8-bit 
    alpha: 1-bit 

Channel statistics: 
    Pixels: 65536 
    Red: 
     min: 39 (0.152941) 
     max: 253 (0.992157) 
     mean: 133.019 (0.521641) 
     standard deviation: 75.3931 (0.295659) 
     kurtosis: -1.05835 
     skewness: 0.86831 
    Green: 
     min: 59 (0.231373) 
     max: 253 (0.992157) 
     mean: 152.489 (0.597998) 
     standard deviation: 62.9948 (0.247038) 
     kurtosis: -1.03932 
     skewness: 0.87929 
    Blue: 
     min: 39 (0.152941) 
     max: 253 (0.992157) 
     mean: 135.817 (0.532617) 
     standard deviation: 72.8752 (0.285785) 
     kurtosis: -1.01856 
     skewness: 0.929917 
    Alpha: 
     min: 0 (0) 
     max: 255 (1) 
     mean: 185.273 (0.726562) 
     standard deviation: 113.659 (0.445723) 
     kurtosis: -0.966513 
     skewness: 1.01661 
    Image statistics: 
    Overall: 
     min: 0 (0) 
     max: 255 (1) 
     mean: 122.763 (0.481424) 
     standard deviation: 83.4891 (0.327408) 
     kurtosis: -0.482848 
     skewness: 0.432253 
    Alpha: srgba(253,253,253,0) #FDFDFD00 --------> (1) 

등의 결과를 확인하십시오.

자, PIL 파이썬 3를 사용하여 이미지를로드 할 수 :

from PIL import Image 
from io import BytesIO 

url = "..." 
resp = requests.get(url) 
cont = BytesIO(resp.content) 
img = Image.open(cont) 
comp = Image.new('RGBA', (256, 256), (255, 255, 255, 0)) # 0 for transparency 
comp.paste(img, (0, 0)) 

이 때문에는 식의의 (1) 위의 이미지 통계에 우리는 새로운 이미지를 만드는 경우도 0을 제공했습니다.