#!/usr/bin/env python3 import gi from gi.repository import Gdk, GLib, GdkPixbuf from PIL import Image, ImageFilter def pixbuf_to_pil(pixbuf): data = pixbuf.get_pixels() w = pixbuf.get_width() h = pixbuf.get_height() stride = pixbuf.get_rowstride() mode = "RGBA" if pixbuf.get_has_alpha() else "RGB" img = Image.frombytes(mode, (w, h), data, "raw", mode, stride) return img def pil_to_pixbuf(img): data = [] for p in img.getdata(): data.extend(p) data = bytes(data) alpha = img.mode == 'RGBA' w, h = img.size rowstride = w * 4 return GdkPixbuf.Pixbuf.new_from_bytes(GLib.Bytes.new(data), GdkPixbuf.Colorspace.RGB, alpha, 8, w, h, rowstride) def blur_image(pixbuf): # 加载图片并确认该图片为RGBA模式,保证透明度 img = pixbuf_to_pil(pixbuf).convert('RGBA') mask = Image.new('RGBA', img.size, (32, 32, 32,160)) img = img.filter(ImageFilter.GaussianBlur(radius = 16)) img.alpha_composite(mask) return pil_to_pixbuf(img)