Я использую cairo с python 3, но сталкиваюсь с ошибкой, когда функция get_data()
возвращает объект обзора памяти.
В Python 2 функция get_data () возвращает объект буфера Python для данных
ImageSurface, для прямой проверки или модификации.
Мой скрипт ниже должен взять любое изображение SVG и отобразить его в кадре tkinter. В Python 3 функция getdata()
, похоже, не работает с Image.frombuffer()
from rsvg import *
import tkinter as tk
t=tk.Tk()
frame=tk.Frame(t)
def svgPhotoImage(self,file_path_name):
from PIL import Image, ImageTk
import cairo
svg = rsvghandler.Handle(file=file_path_name)
width, height = svg.get_dimension_data()[:2]
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, int(width), int(height))
context = cairo.Context(surface)
svg.render_cairo(context)
tk_image=ImageTk.PhotoImage('RGBA')
image=Image.frombuffer('RGBA',(width,height),surface.get_data(),'raw','BGRA',0,1)
tk_image.paste(image)
return(tk_image)
tk_image=svgPhotoImage(frame, 'example.svg')
frame.configure(image=tk_image)
После множества поисков я все еще не могу найти эквивалент для Python 3.
Вклад будет очень признателен.