2017-02-13 85 views
2

我正在尝试使用PIL来合成一些航空影像并遇到一些麻烦。我用PIL加载this image与代码这一点点:PIL将透明PNG加载为RGB?

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) 

当我打这个电话给composite.paste(),PIL给我的错误“ValueError异常:糟糕的透明度面具”。当我打印image.mode,果然它只是RGB而不是预期的RGBA(其paste()要求)。

我下载的PNG上的alpha通道在哪里?

回答

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和Python 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也。