35
A
回答
62
最簡單的方法是使用蒙版。創建一個你想要的任何形狀的黑色和白色面具。並把該形狀的阿爾法層
from PIL import Image, ImageOps
mask = Image.open('mask.png').convert('L')
im = Image.open('image.png')
output = ImageOps.fit(im, mask.size, centering=(0.5, 0.5))
output.putalpha(mask)
output.save('output.png')
下面是我用
面膜如果你想縮略圖大小是可變的,你可以使用ImageDraw並繪製面具。
from PIL import Image, ImageOps, ImageDraw
size = (128, 128)
mask = Image.new('L', size, 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((0, 0) + size, fill=255)
im = Image.open('image.jpg')
output = ImageOps.fit(im, mask.size, centering=(0.5, 0.5))
output.putalpha(mask)
output.save('output.png')
如果你想在GIF輸出,那麼你需要使用粘貼功能,而不是putalpha的:
from PIL import Image, ImageOps, ImageDraw
size = (128, 128)
mask = Image.new('L', size, 255)
draw = ImageDraw.Draw(mask)
draw.ellipse((0, 0) + size, fill=0)
im = Image.open('image.jpg')
output = ImageOps.fit(im, mask.size, centering=(0.5, 0.5))
output.paste(0, mask=mask)
output.convert('P', palette=Image.ADAPTIVE)
output.save('output.gif', transparency=0)
注意,我做了如下修改:
- 面具現在倒置。白色 被替換爲黑色,反之亦然。
- 我正在用'自適應'調色板轉換成'P'。否則,PIL將只使用網頁安全色,結果看起來很糟糕。
- 我加入透明的信息與該圖像
請注意:有這種方法的一個大問題。如果gif圖像包含黑色部分,它們全部也會變得透明。您可以通過爲透明度選擇另一種顏色來解決此問題。 我強烈建議你爲此使用PNG格式。但如果你不能那麼這是你能做的最好的。
19
我想添加到已接受的答案解決抗鋸齒所產生的圓圈,關鍵是要產生一個更大的面具,然後使用抗混疊濾波器規模下來: 這裏是代碼
from PIL import Image, ImageOps, ImageDraw
im = Image.open('image.jpg')
bigsize = (im.size[0] * 3, im.size[1] * 3)
mask = Image.new('L', bigsize, 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((0, 0) + bigsize, fill=255)
mask = mask.resize(im.size, Image.ANTIALIAS)
im.putalpha(mask)
這在我看來產生了一個更好的結果。
相關問題
- 1. 如何使用回形針創建圓形縮略圖?
- 2. Animate使用jquery在鼠標上生成圓形縮略圖大小
- 3. 生成縮略圖與易縮略圖
- 4. 生成縮略圖
- 5. 使用OpenStreetMap生成地圖縮略圖
- 6. 如何生成圖像的方形縮略圖?
- 7. 生成縮略圖使用jQuery或JavaScript
- 8. 在C#中生成縮略圖使用#
- 9. 使用javascript生成視頻縮略圖
- 10. 使用PDF.js生成PDF的縮略圖
- 11. 使用iText生成縮略圖
- 12. 使用qlmanage和applescript生成縮略圖
- 13. 如何用GraphicsMagick製作圓形縮略圖?
- 14. 如何在後臺生成縮略圖?
- 15. Rails - 如何即時生成縮略圖
- 16. 如何在CakePHP中生成縮略圖?
- 17. 生成圓形玫瑰圖
- 18. 如何使用PHP從圖像目錄生成縮略圖?
- 19. [AVFoundation]:稍後生成縮略圖生成
- 20. 生成網站縮略圖?
- 21. 從MKMapView生成縮略圖
- 22. 生成縮略圖 - ios7
- 23. 縮略圖生成時間
- 24. PHP縮略圖生成
- 25. 生成文檔縮略圖
- 26. Fotorama - 如何在使用CSS Sprites時生成縮略圖?
- 27. 如何使用ffmpeg生成帶時間戳的縮略圖
- 28. 如何使用GCS代替Blobstore在GAE中生成縮略圖?
- 29. 創建圓形圖像PIL Tkinter
- 30. PDF縮略圖生成器從PDF的第一頁生成縮略圖
太棒了!輸出gif而不是png怎麼樣?我猜gif不處理alpha,是嗎? – ohnoes 2009-05-20 23:07:28
Gif不支持Alpha通道透明度。它只支持將一種顏色設置爲透明。但是,我做了必要的調整,以gif輸出結果。 – 2009-05-20 23:34:08