2017-12-22 196 views
0

numpy 배열로 만든 투명한 이미지를 저장해야합니다. 내가 가진 이미지를 저장할 수 있습니다PIL.Image.frombuffer()로 RGBA 이미지 저장

img = Image.fromarray(data, 'RGB') 

을하지만 그것을 투명하게 할 필요가 그래서 나는 그것을 저장하려고 그런 다음

img = Image.fromarray(data, 'RGBA') 

내가 얻을이 오류 :

File "/home/pi/Documents/Projet/GetPos.py", line 51, in click 
img = Image.fromarray(data, 'RGBA') 
File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 2217, in 
fromarray 
return frombuffer(mode, size, obj, "raw", rawmode, 0, 1) 
File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 2162, in 
frombuffer 
core.map_buffer(data, size, decoder_name, None, 0, args) 
ValueError: buffer is not large enough 

I 약간의 연구를했지만 모든 일은 내가하려고하는 간단한 일로 매우 복잡해 보입니다 ... 누구든지이 하나에 대해 저를 도울 수 있습니까?

여기에 (내가 :) 파이썬에 아주 새로운 해요) 내 전체 코드입니다 :

가 transparant 이미지를 저장하기 위해
mouse = pymouse.PyMouse() 
posX, posY = mouse.position() 
print(mouse.position()) 

w, h = 1920, 1080 
data = np.zeros((h, w, 3), dtype=np.uint8) 

for x in range(posX-20, posX+20): 
    if x > 1679: 
     data[posY, w-1] = [255, 0, 0] 
    else: 
     data[posY, x] = [255, 0, 0] 

for y in range(posY-20, posY+20): 
    if y > 1049: 
     data[h-1, posX] = [255, 0, 0] 
    else: 
     data[y, posX] = [255, 0, 0] 

img = Image.fromarray(data, 'RGBA')    
##img = Image.frombuffer('RGBA', [1080, 1920], data, "raw", 'RGBA', 0, 1) 
img.save('my.png') 

답변

1

, 당신은 알파 채널이라는 픽셀 당 네 번째 값을 가질 필요가있는 픽셀의 불투명도를 결정합니다. (RGBA는 빨강, 녹색, 파랑 및 알파를 나타냅니다.) 따라서 코드에서 변경해야하는 것은 픽셀에 대해 3 대신 4 개의 값 튜플을 사용하여 네 번째 알파 값을 제공하는 것입니다. 4 번째 값을 255로 설정하면 완전히 볼 수 있고 0이면 100 % 투명하게됩니다. 다음 예제에서는 빨간색으로 그리는 모든 픽셀을 완전히 볼 수있게 설정하고 나머지는 투명하게 설정합니다.

mouse = pymouse.PyMouse() 
posX, posY = mouse.position() 

w, h = 1920, 1080 
data = np.zeros((h, w, 4), dtype=np.uint8) 

for x in range(posX-20, posX+20): 
if x > 1679: 
    data[posY, w-1] = [255, 0, 0, 255] 
else: 
    data[posY, x] = [255, 0, 0, 255] 

for y in range(posY-20, posY+20): 
    if y > 1049: 
     data[h-1, posX] = [255, 0, 0, 255] 
    else: 
     data[y, posX] = [255, 0, 0, 255] 

img = Image.fromarray(data, 'RGBA')    
img.save('my.png')