图像热点链接可视化编辑器的测试程序

在做一个小项目,程序运行后可以用鼠标自由选择图像上的区域,生成数据到二进制文件,然后再由其它程序读取这个二进制文件生成一个网页文件,网页文件里的图像就会自动有热点链接了。当然,这个程序需要sprites模块支持,需要测试的同学请用pip install sprites安装好Python精灵模块后,再复制代码去测试研究。别忘了按照程序里说的准备好一张宽度886,高度660的叫a.png的图片。以下是测试版的代码:


"""
   图像热点链接可视化编辑器.py
"""
import pickle
from sprites import *

def draw_rect(rectangle):    
    x1,y1,x2,y2 = rectangle
    screen.cv.create_rectangle(x1,-y1,x2,-y2)

def savedata():
    """把miaolinks存入文件中"""
    f = open('hot.dat',mode='wb')
    pickle.dump(miaolinks,f)
    f.close()
    showinfo('提示','miaolinks数据存入hot.dat成功!')
    
screen_width,screen_height = 900,700
screen = Screen()
screen.setup(900,700)
screen.bgpic('a.png')
screen.addpopup()
# 以下代码修改索引为0的菜单项目
screen.popup. entryconfig(0, label='保存入hot.dat文件:',command=savedata)

imgwidth,imgheight = 886,660            # 图像宽度与高度
w_gap = screen_width/2 - imgwidth/2     # 图像左上角到左边缘的水平间隙
h_gap = screen_height/2 - imgheight/2   # 图像左上角到上边缘的垂直间隙

d = Sprite(visible=False)
if os.path.isfile('hot.dat'):           # 如果存在hot.dat则读取内容
   f = open('hot.dat',mode='rb')
   miaolinks = pickle.load(f)           # 加载所有曾经存储的描点,是一个字典
   f.close()
else:
   miaolinks = {}    # 否则新建这个字典,它是url和热点区域的映射,如 {'www.scratch8.net':[(x1,y1,x2,y2),(a,-b,c,-d)]}
for link in miaolinks:
    r = miaolinks[link]
    draw_rect(r[-1])
leftkey = Mouse()                       # 鼠标左键

click = 0
item = None
stack = []
while True:
    if leftkey.down() and click==0:
        x1,y1 = mouse_pos()             # 记录第一个点
        y1 = -y1
        click = 1
    if leftkey.down():
        x2,y2 = mouse_pos()
        y2 = -y2
        if item!=None:screen.cv.delete(item)
        item = screen.cv.create_rectangle(x1,y1,x2,y2)
    if leftkey.downup():
        click=0
        if abs(x1-x2)<5 or abs(y1-y2)<5:continue
        item = screen.cv.create_rectangle(x1,y1,x2,y2)
##        x1,y1,x2,y2 = x1+screen_width/2,y1+screen_height/2,x2+screen_width/2,y2+screen_height/2  # 转换为相对于左上角为原点的坐标
##        x1,y1,x2,y2 = x1 - w_gap,y1 - h_gap,x2 - w_gap,y2 - h_gap
##        print(x1,y1,x2,y2)
        a,b,c,d = x1,y1,x2,y2       # 原先的保存下
        x1 = x1 + imgwidth/2
        y1 = y1 + imgheight/2
        x2 = x2 + imgwidth/2
        y2 = y2 + imgheight/2
        
        url = screen.textinput('网址','请输入网址:')
        if url:
            print(url,':',x1,y1,x2,y2)
            # x1,y1,x2,y2是在网页图像上的rect矩形区域,而a,-b,c,-d则是在本程序屏幕上为create_rectange画矩形准备的参数
            miaolinks[url] = [(x1,y1,x2,y2),(a,-b,c,-d)]  # 会覆盖以前的键值对            
        
    screen.update()

关于李兴球

李兴球的博客是Python创意编程原创博客
此条目发表在python, sprites分类目录,贴了标签。将固定链接加入收藏夹。

发表回复