Найти - Пользователи
Полная версия: canvas to jpg or bmp
Начало » GUI » canvas to jpg or bmp
1 2
RoDebian
вообщем необходимо сохранить график построенный с помощью canvas в доступный графический формат(jpg,bmp,png).

есть варианты как это сделать???

4kpt
Явного механизма не вижу. Почему бы не строить файли изображения параллельно с построением графика на caanvas. Для этого подойдет библиотека PIL…
4kpt
Нашел. Можно сделать снимок определенной части экрана. Потом его перевести в jpeg и все будет супер.
Нужно предварительно только узнать относительно месторасположение вашего Canvas и все будет супер :)
Нужен пример - пишете…
RoDebian
c PIL сейчас пытаюсь разобратся, но что то дела неладится.

второй способ имеет 1 недостаток, юзер может передвинуть окно программы, как быть в этом случае?

был бы рад примерам с PIL и для второго способа
4kpt
Вы шутите? Какое Вам дело до того, что двигает юзер?
Вы получаете информацию о рассположении виджета на экране. Единственное условие - изображение должно быт на экране… Можно это обеспечить секундным перемещением изображения на нужное место и возвращение его назад, если оно скрыто или отображено не полностью.

P.S. Надеюсь мы говорим о Tkinter?
4kpt
Так это Tkinter?
RoDebian
да, он самый. я почему то решил что определение координат будет происходить в момент отрисовки канваса. Так примерами порадуете?

кстати возникла проблема с PIL:
отрисовка графика происходит в отдельной фунции ( овал он же элипс), сделл переменные овала глобальными. сделал это для того что бы в функции которая овечает за создание графического файла был доступ к переменным. проблема в том что ничего не отрисовывается. когда вбиваю данные происзвольно за место переменнх все строится отлично. стоит использовать переменные из функции которая отвечает за отрисовку канваса то создается чистый файл изображения. через принт значения переменых выводятся.
4kpt
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()

P.S. Классное фото приклеиваю :)
P.S.S. На фото скан обожки очень яркого (в музыкальном плане) альбома :)
RoDebian
ну хоть название исполнителя написали ) а то ведь заинтриговали )
RoDebian
функция отрисовки графика на канвас:
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 то все построилось. В чем может быть проблема?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB