Вопрос:

Масштабирование изображения в GTK

python user-interface image gtk pygtk

10881 просмотра

3 ответа

123857 Репутация автора

В GTK, как я могу масштабировать изображение? Прямо сейчас я загружаю изображения с помощью PIL и масштабирую их заранее, но есть ли способ сделать это с GTK?

Автор: Claudiu Источник Размещён: 12.08.2009 11:44

Ответы (3)


19 плюса

770 Репутация автора

Решение

Загрузите изображение из файла с помощью 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)
Автор: markuz Размещён: 16.08.2009 05:06

7 плюса

31285 Репутация автора

Возможно, было бы более эффективно просто масштабировать их перед загрузкой. Я особенно думаю, так как я использую эти функции для загрузки в 96х96 эскизов из иногда очень больших JPEG, все еще очень быстро.

gtk.gdk.pixbuf_new_from_file_at_scale(..)
gtk.gdk.pixbuf_new_from_file_at_size(..)
Автор: u0b34a0f6ae Размещён: 20.08.2009 11:55

2 плюса

9201 Репутация автора

Увеличить изображение из URL. ( масштабная ссылка )

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()

* EDIT: (исправление) *

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
Автор: YumYumYum Размещён: 10.10.2013 06:52
32x32