【问题标题】:Speed up image display加快图像显示
【发布时间】:2010-11-18 18:21:44
【问题描述】:

我正在使用 PIL(python 图像库)裁剪一个非常大的图像并将裁剪区域呈现给界面。我遇到的问题是该过程花费的时间太长。当用户单击图像进行裁剪时,图像需要很长时间才能显示在我附加的尺寸器上。

我尝试了两种方法:首先,我尝试将裁剪区域作为图像保存到磁盘,然后将其动态加载到 sizer 中。第二次尝试是创建一个空图像并将 pil 图像转换为 wx 图像并将其加载到 sizer 上。令我惊讶的是,第一种写入磁盘的方法感觉比第二种在内存中管理它的方法更快。以下是代码示例:

第一种方法:

area = image_object.crop(self.cropxy)
area.save(CROP_IMAGE, 'jpeg')
crop_image  = wx.Image(CROP_IMAGE, wx.BITMAP_TYPE_JPEG).ConvertToBitmap()
crop_bitmap = wx.StaticBitmap(self.crop_panel, bitmap=crop_image, name="Cropped Image")
crop_bitmap.CenterOnParent()
crop_bitmap.Refresh()

第二种方法:

area = image_object.crop(self.cropxy)
image = wx.EmptyImage(area.size[0], area.size[1])
image.SetData(area.convert("RGB").tostring())
crop_image = wx.BitmapFromImage(image)
crop_bitmap = wx.StaticBitmap(self.crop_panel, bitmap=crop_image, name="Cropped Image")
crop_bitmap.CenterOnParent()
crop_bitmap.Refresh()

有没有更好的方法来做到这一点,让图像现在显示得如此缓慢?

【问题讨论】:

  • 你试过计时吗,哪个部分最占时间?图片大小是多少?您要裁剪多少?

标签: image wxpython python-imaging-library


【解决方案1】:

因此,为了解决界面中其他地方的问题,当我将图像排队时,我决定预加载 wxImage 对象。在它们更小的时候从来没有必要这样做过。

无论如何 - 我在 google 上找到了一些代码,可以让我在 wxImage 对象和 PIL 对象之间进行转换,通过这样做,我可以将内存中的 wxImage 对象转换为 PIL 对象,裁剪它,然后将其转换回图像及时显示它。相比之下,这是“炽热”的快。您只需将手指从鼠标上移开,裁剪效果就会很好。

以下是转换例程:

def pil_to_image(self, pil, alpha=True):
    """ Method will convert PIL Image to wx.Image """
    if alpha:
        image = apply( wx.EmptyImage, pil.size )
        image.SetData( pil.convert( "RGB").tostring() )
        image.SetAlphaData(pil.convert("RGBA").tostring()[3::4])
    else:
        image = wx.EmptyImage(pil.size[0], pil.size[1])
        new_image = pil.convert('RGB')
        data = new_image.tostring()
        image.SetData(data)
    return image


def image_to_pil(self, image):
    """ Method will convert wx.Image to PIL Image """
    pil = Image.new('RGB', (image.GetWidth(), image.GetHeight()))
    pil.fromstring(image.GetData())
    return pil

【讨论】:

    猜你喜欢
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多