2010-03-23 114 views

Trả lời

47

Hãy thử như sau từ các tài liệu: http://effbot.org/imagingbook/imageops.htm

from PIL import Image 
import PIL.ImageOps  

image = Image.open('your_image.png') 

inverted_image = PIL.ImageOps.invert(image) 

inverted_image.save('new_name.png') 

Lưu ý: "Các module ImageOps chứa một số hoạt động 'làm sẵn' xử lý hình ảnh Module này có phần thực nghiệm, và hầu hết các nhà khai thác chỉ làm việc trên. Hình ảnh L và RGB. "

+0

Oh, có vẻ như tôi đã bỏ lỡ mô-đun đó. Cảm ơn. – bialix

15

Nếu hình ảnh là RGBA trong suốt này sẽ thất bại ... Điều này sẽ làm việc mặc dù:

from PIL import Image 
import PIL.ImageOps  

image = Image.open('your_image.png') 
if image.mode == 'RGBA': 
    r,g,b,a = image.split() 
    rgb_image = Image.merge('RGB', (r,g,b)) 

    inverted_image = PIL.ImageOps.invert(rgb_image) 

    r2,g2,b2 = inverted_image.split() 

    final_transparent_image = Image.merge('RGBA', (r2,g2,b2,a)) 

    final_transparent_image.save('new_file.png') 

else: 
    inverted_image = PIL.ImageOps.invert(image) 
    inverted_image.save('new_name.png') 
8

Đối với bất cứ ai làm việc với một hình ảnh trong chế độ "1" (tức là, pixel 1-bit, màu đen và trắng , được lưu trữ với một pixel mỗi byte - see docs), bạn cần phải chuyển đổi nó thành chế độ "L" trước khi gọi PIL.ImageOps.invert.

Như vậy:

im = im.convert('L') 
im = ImageOps.invert(im) 
im = im.convert('1') 
Các vấn đề liên quan