def pixbuf_from_bytes(b, width, height): """Создаёт и возвращает Gdk.Pixbuf из b - экземпляра GLib.Bytes. width, height - размеры создаваемого изображения в пикселах.""" return Pixbuf.new_from_stream_at_scale(Gio.MemoryInputStream.new_from_bytes(b), width, height, True)
def complete(manga_data, server): if server != self.server or manga_data['slug'] != self.manga_slug: return False self.manga_data = manga_data # Populate manga card try: cover_data = self.server.get_manga_cover_image( self.manga_data.get('cover')) except Exception as e: cover_data = None user_error_message = log_error_traceback(e) if user_error_message: self.show_notification(user_error_message) if cover_data is not None: cover_stream = Gio.MemoryInputStream.new_from_data( cover_data, None) pixbuf = Pixbuf.new_from_stream_at_scale( cover_stream, 174, -1, True, None) else: pixbuf = Pixbuf.new_from_resource_at_scale( '/info/febvre/Komikku/images/missing_file.png', 174, -1, True) self.builder.get_object('cover_image').set_from_pixbuf(pixbuf) self.builder.get_object('authors_value_label').set_markup( '<span size="small">{0}</span>'.format( ', '.join(self.manga_data['authors'] ) if self.manga_data['authors'] else '-')) self.builder.get_object('genres_value_label').set_markup( '<span size="small">{0}</span>'.format( ', '.join(self.manga_data['genres'] ) if self.manga_data['genres'] else '-')) self.builder.get_object('status_value_label').set_markup( '<span size="small">{0}</span>'. format(_(Manga.STATUSES[self.manga_data['status']]) ) if self.manga_data['status'] else '-') self.builder.get_object('scanlators_value_label').set_markup( '<span size="small">{0}</span>'.format( ', '.join(self.manga_data['scanlators'] ) if self.manga_data['scanlators'] else '-')) self.builder.get_object('server_value_label').set_markup( '<span size="small"><a href="{0}">{1} [{2}]</a>\n{3} chapters</span>' .format( self.server.get_manga_url(self.manga_data['slug'], self.manga_data.get('url')), html.escape(self.server.name), self.server.lang.upper(), len(self.manga_data['chapters']))) self.builder.get_object('synopsis_value_label').set_text( self.manga_data['synopsis'] or '-') self.activity_indicator.stop() self.show_page('manga') return False
def get_image(self, url): try: response = urllib2.urlopen(url) input_stream = Gio.MemoryInputStream.new_from_data(response.read(), None) pixbuf = Pixbuf.new_from_stream_at_scale(input_stream, -1, 400, True, None) except ValueError: pixbuf = None except : pixbuf = None return pixbuf
def run(self): log_debug('RefreshPixbuf run {}'.format(self.url)) response = urlopen(self.url) if not response: return input_stream = Gio.MemoryInputStream.new_from_data( response.read(), None) if not input_stream: return self.props.pixbuf = Pixbuf.new_from_stream_at_scale( input_stream, 64, 64, True, None) return
def pixbuf_from_bytes(b, width, height): """Создаёт и возвращает экземпляр Gdk.Pixbuf. b - экземпляр GLib.Bytes с данными в формате PNG/JPG/..., width, height - целые, размеры изображения в пикселах, если нужен определённый размер; для загрузки "как есть" следует указывать значения <=0 или None.""" if isinstance(width, int) and width > 0: return Pixbuf.new_from_stream_at_scale(Gio.MemoryInputStream.new_from_bytes(b), width, height, None) else: return Pixbuf.new_from_stream(Gio.MemoryInputStream.new_from_bytes(b), None)