【问题标题】:Converting PIL image to GTK pixmap with alpha使用 alpha 将 PIL 图像转换为 GTK 像素图
【发布时间】:2013-06-04 16:11:46
【问题描述】:

所以我需要拍摄我在 PIL 中制作的图像并将其转换为像素图以显示在可绘制对象中。

如何从 PIL 转换为像素图并保持图像 alpha?

目前我已经编写了这段代码:

    def gfx_draw_tem2(self, r, x, y):
    #im = Image.open("TEM/TEM cropped.png")
    im = Image.new("RGBA", (r*2,r*2), (255, 255, 255, 255))
    draw = ImageDraw.Draw(im)

    for i in range(0,r*2):
        for j in range(0,r*2):
            if(self.in_circle(i,j,r)):
                draw.point((i,j), fill=(100,50,75,50)) #alpha at 255 for test2.png

    im.save("test.png")

    im_data = im.tostring()
    pixbuf = gdk.pixbuf_new_from_data(im_data, gdk.COLORSPACE_RGB, True, 8, im.size[0], im.size[1], 4*im.size[0])
    pixmap2, mask = pixbuf.render_pixmap_and_mask()

    self.pixmap.draw_drawable(self.white_gc, pixmap2, 0,0,x-r,y-r,-1,-1)

这是我从 im.save("test.png") 创建的图像:

http://imgur.com/43spsBG,lqowten#0

请注意,第一张图片的 alpha 为 255(完整),而第二张图片的 alpha 为 50。

但是,当我使用当前代码将图像转换为像素图时,我失去了透明效果。

感谢您的帮助,

伊恩

编辑:我通过更多测试将其范围缩小了一点。将 pixbuf 转换为 pixmap 时,我丢失了图像的 alpha。

【问题讨论】:

    标签: gtk python-imaging-library alpha pixmap


    【解决方案1】:

    好吧,想通了。

    这里的技巧是不要使用 pixbuf.render_pixmap_and_mask() 将 pixbuf 转换为 pixmap

    相反,我将绘制到可绘制对象上的 self.pixmap 并在其上调用 draw_pixbuf()。

    这是我使用的新代码。

    def gfx_draw_tem2(self, r, x, y):
        im = Image.new("RGBA", (r*2,r*2), (1, 1, 1, 0))
        draw = ImageDraw.Draw(im)
    
        for i in range(0,r*2):
            for j in range(0,r*2):
                if(self.in_circle(i,j,r)):
                    draw.point((i,j), fill=(100,50,75,140))
    
        im_data = im.tostring()
        pixbuf = gdk.pixbuf_new_from_data(im_data, gdk.COLORSPACE_RGB, True, 8, im.size[0], im.size[1], 4*im.size[0])
        self.pixmap.draw_pixbuf(self.white_gc, pixbuf, 0, 0, x, y, -1, -1, gdk.RGB_DITHER_NORMAL, 0, 0)
    

    希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      相关资源
      最近更新 更多