Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 7, 2013 21:02:10

RoDebian
Зарегистрирован: 2013-06-26
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

canvas to jpg or bmp

вообщем необходимо сохранить график построенный с помощью canvas в доступный графический формат(jpg,bmp,png).

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

Офлайн

#2 Авг. 7, 2013 21:28:20

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

canvas to jpg or bmp

Явного механизма не вижу. Почему бы не строить файли изображения параллельно с построением графика на caanvas. Для этого подойдет библиотека PIL…



Офлайн

#3 Авг. 7, 2013 21:31:25

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

canvas to jpg or bmp

Нашел. Можно сделать снимок определенной части экрана. Потом его перевести в jpeg и все будет супер.
Нужно предварительно только узнать относительно месторасположение вашего Canvas и все будет супер :)
Нужен пример - пишете…



Отредактировано 4kpt (Авг. 7, 2013 21:31:56)

Офлайн

#4 Авг. 7, 2013 22:00:26

RoDebian
Зарегистрирован: 2013-06-26
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

canvas to jpg or bmp

c PIL сейчас пытаюсь разобратся, но что то дела неладится.

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

был бы рад примерам с PIL и для второго способа

Офлайн

#5 Авг. 7, 2013 22:30:36

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

canvas to jpg or bmp

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

P.S. Надеюсь мы говорим о Tkinter?



Отредактировано 4kpt (Авг. 7, 2013 22:32:04)

Офлайн

#6 Авг. 7, 2013 22:35:54

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

canvas to jpg or bmp

Так это Tkinter?



Офлайн

#7 Авг. 7, 2013 22:46:14

RoDebian
Зарегистрирован: 2013-06-26
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

canvas to jpg or bmp

да, он самый. я почему то решил что определение координат будет происходить в момент отрисовки канваса. Так примерами порадуете?

кстати возникла проблема с PIL:
отрисовка графика происходит в отдельной фунции ( овал он же элипс), сделл переменные овала глобальными. сделал это для того что бы в функции которая овечает за создание графического файла был доступ к переменным. проблема в том что ничего не отрисовывается. когда вбиваю данные происзвольно за место переменнх все строится отлично. стоит использовать переменные из функции которая отвечает за отрисовку канваса то создается чистый файл изображения. через принт значения переменых выводятся.

Офлайн

#8 Авг. 7, 2013 23:54:38

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

canvas to jpg or bmp

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. На фото скан обожки очень яркого (в музыкальном плане) альбома :)



Отредактировано 4kpt (Авг. 7, 2013 23:55:36)

Прикреплённый файлы:
attachment Front.jpg (493,3 KБ)

Офлайн

#9 Авг. 8, 2013 06:30:54

RoDebian
Зарегистрирован: 2013-06-26
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

canvas to jpg or bmp

ну хоть название исполнителя написали ) а то ведь заинтриговали )

Офлайн

#10 Авг. 8, 2013 06:51:45

RoDebian
Зарегистрирован: 2013-06-26
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

canvas to jpg or bmp

функция отрисовки графика на канвас:
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 то все построилось. В чем может быть проблема?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version