Форум сайта python.su
вообщем необходимо сохранить график построенный с помощью canvas в доступный графический формат(jpg,bmp,png).
есть варианты как это сделать???
Офлайн
Явного механизма не вижу. Почему бы не строить файли изображения параллельно с построением графика на caanvas. Для этого подойдет библиотека PIL…
Офлайн
Нашел. Можно сделать снимок определенной части экрана. Потом его перевести в jpeg и все будет супер.
Нужно предварительно только узнать относительно месторасположение вашего Canvas и все будет супер :)
Нужен пример - пишете…
Отредактировано 4kpt (Авг. 7, 2013 21:31:56)
Офлайн
c PIL сейчас пытаюсь разобратся, но что то дела неладится.
второй способ имеет 1 недостаток, юзер может передвинуть окно программы, как быть в этом случае?
был бы рад примерам с PIL и для второго способа
Офлайн
Вы шутите? Какое Вам дело до того, что двигает юзер?
Вы получаете информацию о рассположении виджета на экране. Единственное условие - изображение должно быт на экране… Можно это обеспечить секундным перемещением изображения на нужное место и возвращение его назад, если оно скрыто или отображено не полностью.
P.S. Надеюсь мы говорим о Tkinter?
Отредактировано 4kpt (Авг. 7, 2013 22:32:04)
Офлайн
Так это Tkinter?
Офлайн
да, он самый. я почему то решил что определение координат будет происходить в момент отрисовки канваса. Так примерами порадуете?
кстати возникла проблема с PIL:
отрисовка графика происходит в отдельной фунции ( овал он же элипс), сделл переменные овала глобальными. сделал это для того что бы в функции которая овечает за создание графического файла был доступ к переменным. проблема в том что ничего не отрисовывается. когда вбиваю данные происзвольно за место переменнх все строится отлично. стоит использовать переменные из функции которая отвечает за отрисовку канваса то создается чистый файл изображения. через принт значения переменых выводятся.
Офлайн
RoDebian
да, он самый. я почему то решил что определение координат будет происходить в момент отрисовки канваса. Так примерами порадуете?кстати возникла проблема с PIL:отрисовка графика происходит в отдельной фунции ( овал он же элипс), сделл переменные овала глобальными. сделал это для того что бы в функции которая овечает за создание графического файла был доступ к переменным. проблема в том что ничего не отрисовывается. когда вбиваю данные происзвольно за место переменнх все строится отлично. стоит использовать переменные из функции которая отвечает за отрисовку канваса то создается чистый файл изображения. через принт значения переменых выводятся.
# coding: utf-8 import Tkinter import Image import ImageTk import ImageGrab def get_foto(event): lpx = canv.winfo_rootx() + 2 lpy = canv.winfo_rooty() + 2 rpx = lpx + canv.winfo_width() - 4 rpy = lpy + canv.winfo_height() - 4 # Если нужно сохранить замените show() на save("имя_файла.jpg") img = ImageGrab.grab([lpx, lpy, rpx, rpy]).show() root = Tkinter.Tk() root.geometry("600x600+100+100") root.focus_force() canv = Tkinter.Canvas(width=400, height=400, bg="red", bd=2, relief="ridge") canv.place(relx=0.5, rely=0.5, anchor="center") img = Image.open("Front.jpg").resize([300, 300]) img_tk = ImageTk.PhotoImage(img) canv.create_image([200,200], image=img_tk, anchor="center") but = Tkinter.Button(root, text=u"Хочу фото. Очень хочу.", font=14) but.place(relx=0.5, rely =0.9, anchor='center') but.bind("<Button-1>", get_foto) root.mainloop()
Отредактировано 4kpt (Авг. 7, 2013 23:55:36)
Прикреплённый файлы: Front.jpg (493,3 KБ)
Офлайн
ну хоть название исполнителя написали ) а то ведь заинтриговали )
Офлайн
функция отрисовки графика на канвас:
def graf(event):
global x0
global x1
global y0
global y1
…длинные и долгие вычисления
c=Canvas(page1, width=400, height=400, bg=“white”)
c.place(x=520,y=160,width=460,height=400)
c1=c.create_oval(x0,y0,x1,y1,outline=“red”)
функция рисования графика и сохранения в отдельный файл:
def save_graf(event):
image=Image.new(“RGB”,(500,500),(225,225,225,225))
draw=ImageDraw.Draw(image)
draw.ellipse((x0,y0,x1,y1),outline=“red”)
del draw
image.save('pic.png','PNG')
обе функции вызываются нажатием отдельных кнопок, однако при вызове второй создается файл чистый, т.е. фон заливается а элипс на нем не строится, когда задавал значения х и у внутри save_graf то все построилось. В чем может быть проблема?
Офлайн