在GTK中缩放图像

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在GTK中缩放图像相关的知识,希望对你有一定的参考价值。

在GTK中,如何缩放图像?现在我用PIL加载图像并预先缩放它们,但有没有办法用GTK做到这一点?

答案

使用gtk.gdk.Pixbuf从文件加载图像:

import gtk
pixbuf = gtk.gdk.pixbuf_new_from_file('/path/to/the/image.png')

然后缩放它:

pixbuf = pixbuf.scale_simple(width, height, gtk.gdk.INTERP_BILINEAR)

然后,如果你想在gtk.Image中使用它,请创建窗口小部件并从pixbuf设置图像。

image = gtk.Image()
image.set_from_pixbuf(pixbuf)

或者也许是以直接的方式:

image = gtk.image_new_from_pixbuf(pixbuf)
另一答案

在加载之前简单地缩放它们可能更有效。我特别这么认为,因为我使用这些函数从有时非常大的JPEG加载96x96缩略图,仍然非常快。

gtk.gdk.pixbuf_new_from_file_at_scale(..)
gtk.gdk.pixbuf_new_from_file_at_size(..)
另一答案

从URL缩放图像。 (scale reference

import pygtk
pygtk.require('2.0')
import gtk
import urllib2

class MainWin:

    def destroy(self, widget, data=None):
        print "destroy signal occurred"
        gtk.main_quit()

    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.connect("destroy", self.destroy)
        self.window.set_border_width(10)
        self.image=gtk.Image()

        self.response=urllib2.urlopen(
            'http://192.168.1.11/video/1024x768.jpeg')

        self.loader=gtk.gdk.PixbufLoader()         
        self.loader.set_size(200, 100)   
        #### works but throwing: glib.GError: Unrecognized image file format       
        self.loader.write(self.response.read())
        self.loader.close()
        self.image.set_from_pixbuf(self.loader.get_pixbuf())

        self.window.add(self.image)
        self.image.show()


        self.window.show()

    def main(self):
        gtk.main()

if __name__ == "__main__":
    MainWin().main()

*编辑:(解决问题)*

try:
  self.loader=gtk.gdk.PixbufLoader()         
  self.loader.set_size(200, 100)   

            # ignore tihs: 
            #  glib.GError: Unrecognized image file format       

  self.loader.write(self.response.read())
  self.loader.close()
  self.image.set_from_pixbuf(self.loader.get_pixbuf())

except Exception, err:
  print err
  pass

以上是关于在GTK中缩放图像的主要内容,如果未能解决你的问题,请参考以下文章

[linux][c/c++]代码片段02

在 webview_flutter 中启用捏合和缩放,在哪里添加代码片段 [this.webView.getSettings().setBuiltInZoomControls(true);]

在 gtk 中绘制背景图像 - 我的尝试都不起作用

基于gtk的imshow:用stb_image读取图像并用gtk显示

GTK# 图像按钮在运行时不显示图像

在 BrowseFragment 中禁用行缩放/展开