利用python BaseHTTPServer 开发的图片浏览小工具

最近从网上爬了点图片,为了方便浏览就写了这么个小工具。直接上码,解释偏少,代码没有优化,实现比较简略。仅作记录之用。

1.httpd.py

 1 # encoding: UTF-8
 2 #-*-coding:utf-8-*-
 3 import BaseHTTPServer
 4 import config
 5 import urllib
 6 from CreatHtml import CreateHtmlClass
 7 import os
 8
 9 #登录页面代码,做个简单的访问权限控制
10 login_html =‘‘‘<html>
11 <title>Directory listing for </title>
12 <body>
13 <center>
14 <h2> login</h2>
15 <hr>
16     <form action="/login" method="post">
17     <p>UserName: <input type="text" name="une" /></p>
18     <p>PassWord: <input type="password" name="pwd" /></p>
19     <input type="submit" value="Login" />
20     </form>
21 <hr>
22 </center>
23 </body>
24 </html>‘‘‘
25
26
27 ct_obj = CreateHtmlClass()
28
29 class EasyWebRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
30     def do_GET(self):
31         #if self.path == ‘/‘:
32         print self.client_address
33         #print self.headers
34         if self.headers.has_key("Cookie"):
35             print self.headers["Cookie"]
36             err_code,content_type,content = ct_obj.root_html(self.path)
37             self.send_response(err_code)
38             self.send_header("Content-type", content_type)
39             self.send_header("Content-Length", str(len(content)))
40             self.end_headers()
41             self.wfile.write(content)
42         else:
43             print "not login"
44             self.send_response(200)
45             self.send_header("Content-type", "text/html; charset=utf-8")
46             self.send_header("Content-Length", str(len(login_html)))
47             self.end_headers()
48             self.wfile.write(login_html)
49
50     def do_POST(self):
51         print self.path
52         if self.path == "/login":
53             datas = self.rfile.read(int(self.headers[‘content-length‘]))
54             datas = urllib.unquote(datas).decode("utf-8", ‘ignore‘)
55             #datas = transDicts(datas)
56             if datas == "une=xxx&pwd=xxx":
57                 err_code,content_type,content = ct_obj.root_html("/")
58                 self.send_response(err_code)
59                 self.send_header("Content-type", content_type)
60                 self.send_header("Content-Length", str(len(content)))
61                 self.send_header("Set-Cookie","JSESSIONID=JIGUGUJICHACHACHA;Path=/")
62                 self.end_headers()
63                 self.wfile.write(content)
64         else:
65             self.send_response(404)
66             self.send_header("Content-type", "text/html; charset=utf-8")
67             self.send_header("Content-Length", 3)
68             self.end_headers()
69             self.wfile.write("404")
70
71
72
73 server = BaseHTTPServer.HTTPServer((‘‘,18080),EasyWebRequestHandler)
74 print ‘EasyWebServer start...‘
75 server.serve_forever()

2. CreatHtml.py

  1 # encoding: UTF-8
  2 #-*-coding:utf-8-*-
  3 import os
  4 import config
  5 from PIL import Image
  6
  7
  8 image_dic = {
  9     ‘png‘:‘image/png‘,
 10     ‘jpg‘:‘image/jpeg‘,
 11     ‘jpeg‘:‘image/jpeg‘,
 12     ‘bmp‘:‘image/bmp‘,
 13 }
 14
 15 class CreateHtmlClass:
 16     """docstring for CreateHtml"""
 17     def __init__(self):
 18         self.root = config.root
 19
 20 #    def check_image(self,path):
 21 #        type_pos = path.rfind(‘.‘)
 22 #        type_str = path[type_pos+1:]
 23 #        if not image_dic.has_key( type_str.lower() ):
 24 #            return False,0
 25 #
 26 #        im = Image.open(path)
 27 #        width = im.size[0]
 28 #        height = im.size[1]
 29 #        ratio = width/1400.0
 30 #        if  ratio > 1.0 :
 31 #            return True,str(int(height/ratio))
 32 #        else:
 33 #            return False,1
 34     def check_image(self,path):
 35         type_pos = path.rfind(‘.‘)
 36         type_str = path[type_pos+1:]
 37         if not image_dic.has_key( type_str.lower() ):
 38             return False,0
 39         try:
 40             im = Image.open(path)
 41             width = im.size[0]
 42             height = im.size[1]
 43             ratio = width/1400.0
 44             if  ratio > 1.0 :
 45                 return True,str(int(height/ratio))
 46             else:
 47                 return False,1
 48         except Exception, e:
 49             print e
 50             return False,1
 51
 52     def creat_dir_html(self,path):
 53         if path == ‘/‘:
 54             path = ""
 55         local_path = self.root + path
 56         content = ""
 57         local_path_about = local_path + ‘/about.info‘
 58         if os.path.exists(local_path_about):
 59             f = open(local_path_about,‘r‘)
 60             h2 = f.readline()
 61             f.close()
 62
 63             content = ‘<title>Directory listing for ‘+ h2+‘</title><body><center><h2>‘+ h2 +‘</h2><hr><ul>‘
 64             for f in os.listdir(local_path):
 65                 if str(f) != ‘about.info‘:
 66                     is_image,height = self.check_image(local_path + ‘/‘ + str(f))
 67                     if is_image:
 68                         content += ‘<li style=" list-style:none"><img src="‘ + path + ‘/‘ + str(f) + ‘" alt="‘ + str(f) + ‘" width="1400" height="‘+ height +‘"/></li><br/><br/>‘
 69                     elif height == 1:
 70                         content += ‘<li style=" list-style:none"><img src="‘ + path + ‘/‘ + str(f) + ‘" alt="‘ + str(f) + ‘" /></li><br/><br/>‘
 71             content += ‘</ul></center><hr></body></html>‘
 72         else:
 73             content = ‘<title>Directory listing for ‘+ path+‘</title><body><h2>‘+ path +‘ /</h2><hr><ul>‘
 74             for f in os.listdir(local_path):
 75                 content += ‘<li><a href="‘ + path + ‘/‘ + str(f) + ‘">‘ + str(f) + ‘</a></li>‘
 76             content += ‘</ul><hr></body></html>‘
 77         return content
 78
 79     def read_local_file(self,path):
 80         f = open(path,‘rb‘)
 81         read = f.read()
 82         f.close()
 83         #print path
 84         return read
 85
 86     def write_local_file(self,path,content):
 87         f = open(path,‘w‘)
 88         f.write(content)
 89         f.close()
 90
 91     def get_dir_html(self,path,refresh_pos):
 92         content = None
 93         content_type = None
 94         error_code = 200
 95         local_path = self.root + path
 96         path_name_pos = path.rfind(‘/‘)
 97         path_name = path[path_name_pos+1:]
 98         local_path_html = local_path + ‘/‘+path_name+‘.html‘
 99         print local_path_html
100         content_type = "text/html; charset=utf-8"
101         if path == ‘/‘ :
102             content = self.creat_dir_html(path)
103         elif refresh_pos == -1 and os.path.exists(local_path_html):
104             content = self.read_local_file(local_path_html)
105         else:
106             content = self.creat_dir_html(path)
107             self.write_local_file(local_path_html,content)
108
109         return error_code,content_type,content
110
111     def get_404_html(self):
112         content = "404"
113         error_code = 404
114         content_type = "text/html; charset=utf-8"
115         return error_code,content_type,content
116
117     def get_file_content(self,path):
118         if path==‘/‘:
119             path = ""
120         local_path = self.root + path
121         type_pos = path.rfind(‘.‘)
122         type_str = path[type_pos+1:]
123         content_type = "*/*"
124         print type_str
125         error_code = 200
126         if image_dic.has_key(type_str.lower()):
127             content_type = image_dic[type_str.lower()]
128
129         if os.path.exists(local_path):
130             content = self.read_local_file(local_path)
131         else:
132             return self.get_404_html()
133         return error_code,content_type,content
134
135     def root_html(self,path):
136         refresh_pos = path.find(‘refresh‘)
137         if refresh_pos != -1:
138             path = path[0:refresh_pos-1]
139         content = None
140         content_type = None
141         error_code = None
142         local_path = self.root + path
143
144
145         if os.path.isdir(local_path):
146             error_code,content_type,content = self.get_dir_html(path,refresh_pos)
147         else:
148             error_code,content_type,content = self.get_file_content(path)
149
150         return error_code,content_type,content

3.config.py

1 # encoding: UTF-8
2 #-*-coding:utf-8-*-
3 root="E:/"

使用细节:

1.注意在存放图片文件夹内新建一个about.info 的文件,内部填写的是图片简介(utf-8)编码保存

时间: 2024-10-19 16:44:10

利用python BaseHTTPServer 开发的图片浏览小工具的相关文章

Python - 开发截图识别OCR小工具

一.简介 你一定用过那种“OCR神器”,可以把图片中的文字提取出来,极大的提高工作效率. 今天,我们就来做一款实时截图识别的小工具.顾名思义,运行程序时,可以实时把你截出来的图片中的文字识别出来. 二.模块 import keyboard # 用于监控键盘按下,触发事件(pip install keyboard) import time from aip import AipOcr # 调用百度接口(pip install baidu-aip) from PIL import ImageGrab

常用的iOS开发或者优化的小工具

下面介绍一下我常用的iOS开发或者优化的小工具 由于很多工具大多数博客都已经介绍过了,我就列举一些我认为还不错但是大家不常列举的: Crafter https://github.com/krzysztofzablocki/crafter 你是否经常见一个Project之后你经常会建立一个Podfile,然后把自己一些几乎每个项目都要用的第三方库加进去或者,添加ignore文件等等重复的事情,Crafter 是一个可以自动化初始化你xcode工程的默认配置,是由Ruby语言写的.一个script即

一个用来提取网页中图片的小工具

public Array MatchHtml(string html,string com) { List<string> urls = new List<string>(); html = html.ToLower(); //获取SRC标签中的URL Regex regexSrc = new Regex("src=\"[^\"]*[(.jpg)(.png)(.gif)(.bmp)(.ico)]\""); foreach(Match

利用Python制作王者荣耀出装小助手,引来了老板的注意!

导语 T_T并不玩这些游戏... 单纯来蹭个热点... 大概是因为蹭热点需要的技术含量比较低? 就这样吧~~~ 利用Python制作命令行版的王者荣耀出装小助手. Let's Go! 开发工具 Python版本:3.6.4 相关模块: requests模块: 以及一些Python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 主要思路 爬的是<英雄联盟盒子>这个APP.用Fiddler抓包找到需要的Get请求地址即可... 不过显示的Get请求很长,在

IOS开发之图片浏览

这是整体的效果图: 其中main.stroyboard中的控件有2个button,2个label,一个imageView. 设置他们的位置大小和背景颜色和图片. 让main.storyboard连接ViewController.m 下面是它的代码: #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UILabel *topLabel; @propert

web图片转换小工具制作

HTML 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>图片在线webp/png/jpeg格式转换工具</title> 6 <meta name="description" content="图片在线转换工具:可以选择.webp .png .jpeg格式图片转换器" />

python抓取网页图片的小案例

1.分析 ,要抓取的页面的信息以及对应的源码信息 blog.sina.com.cn/s/blog 93dc666c0101b1bj.html 2.代码模块: 导入正则表达的模块 导入url相关的模块 利用page.read()获取页面的信息,再将页面当做字符串,传入到getImg方法内,利用正则表达式,匹配你要的字符串信息,然后,在利用urllib包的urlretrieve()下载,你要的图片. 这个是urllib模块内的方法的详解:http://www.jb51.net/article/426

利用python+tkinter开发一个点名软件

最近上课学生多名字记不住,名册忘记了带,要点名怎么办,好久没有写代码了,于是自己写了个点名软件,记录下吧,第一次接触TK也不是太熟悉,写的不太好,记录下源代码 以后遇到要写桌面软件还是可以耍耍的. tk:文档  https://wiki.python.org/moin/TkInter tk是python 自带的一个GUI模块 效果: 背景图: icon图标: 源码: from win32com.client import Dispatch from tkinter import * import

利用Python多线程爬虫——爬图片

程序功能大概就是爬取每个网页中的图片,并根据标题,分文件保存至指定目录,使用threading实现多线程. 主要流程为每访问一个网页,将此网页中的图片链接依次放入队列,根据图片数量依次开启下载线程,传入队列和编号,然后启动线程开始下载,主线程查询当前正在活动的线程数量,当数量为1的时候,即只剩主线程的时候,表示所有图片下载完毕,开始下一个网页. class threadDownload(threading.Thread): def __init__(self,que,no): threading