2017-02-13 9 views
2

私はPILを使用して空中映像を合成し、何らかの問題に遭遇しています。私はこのコードの少しでthis imageをロードするためにPILを使用します。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) 

私はcomposite.paste()への呼び出しを行うと、PILは「ValueErrorを:悪い透明マスク」を私にエラーを与えます。 image.modeを印刷するときは、それは単にRGBApaste()が必要です)ではなく、単に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と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)) 

それが原因EQNのだ(1)上記画像統計に我々は新しいイメージを作るときにも0を与えることをしました。

関連する問題