#!/usr/bin/env python # -*- coding: utf-8 -*- -#import os -#import sys - #将 lib 目录添加到系统路径,以便导入 lib 目录下的模块 -#app_root = os.path.dirname(__file__) -#sys.path.insert(0, os.path.join(app_root, 'lib')) - -#if sys.getdefaultencoding() != 'utf-8': - #reload(sys) - #sys.setdefaultencoding('utf-8') - -import tempfile -import StringIO +import cStringIO import urllib import web import qrcode @@ -42,7 +31,6 @@ def GET(self): return render.index() -# TODO 返回具体错误信息 class QR(object): """处理传来的数据并显示 QR Code 二维码图片 """ @@ -51,7 +39,7 @@ def handle_parameter(self, chl, chld, chs): """ if len(chl) > 2953: # 最大容量 raise web.badrequest() - chld = chld.upper() # 转换为大写字母 + chld = chld.upper() # chld 是非必需参数,有默认值 if not chld: chld = 'M|4' @@ -71,7 +59,7 @@ def handle_parameter(self, chl, chld, chs): border = 4 try: - chs = chs.lower() # 转换为小写字母 + chs = chs.lower() size = tuple([int(i) for i in chs.split('x')]) except: raise web.badrequest() @@ -139,9 +127,6 @@ def handle_parameter(self, chl, chld, chs): raise web.badrequest() error_correction = qrcode.constants.ERROR_CORRECT_H - # print len(chl) - # print version - # print size, border # 根据 python-qrcode 源码、square_size 及 version 参数求 box_size box_size = square_size / ((version * 4 + 17) + border * 2) # print box_size @@ -181,30 +166,27 @@ def show_image(self, **args): raise web.internalerror() # im.show() - # 将生成的二维码图片保存到临时文件中,用于下面的缩放处理 - tempfile.tempdir = 'temp' - temp_img = tempfile.TemporaryFile() + # 将生成的二维码图片保存到内存中,用于下面的缩放处理 + temp_img = cStringIO.StringIO() im.save(temp_img, 'png') - temp_img.seek(0) - img_data = temp_img.read() # 获取图片内容 - im = Image.open(StringIO.StringIO(img_data)) - x, y = im.size - rx, ry = size - # TODO 缩放太小不能识别则显示空白,判断图片清晰度 + img_data = temp_img.getvalue() # 获取图片内容 + im = Image.open(cStringIO.StringIO(img_data)) + x, y = im.size # 生成的二维码图片大小 + rx, ry = size # 用户请求的图片大小 + new_im = Image.new("1", (rx, ry), "white") - # 将二维码图片粘贴到空白图片中,保持二维码图片居中 + # 将二维码图片粘贴到空白图片中并保持二维码图片居中 paste_size = ((rx - x) / 2, (ry - y) / 2, (rx - x) / 2 + x, (ry - y) / 2 + y) # 粘贴位置 - new_im.paste(im, paste_size) - temp_img.close() # 删除临时文件 + new_im.paste(im, paste_size) # 若位置全为负值则缩放并填充整个目标图片 - temp_img = tempfile.TemporaryFile() + temp_img.write('') new_im.save(temp_img, 'png') # 保存粘贴好的图片 - temp_img.seek(0) - new_im_data = temp_img.read() + new_im_data = temp_img.getvalue() # 图片 MIME 类型 MIME = ImageMIME().get_image_type(new_im_data) - temp_img.close() + + temp_img.close() # 释放内存 return (MIME, new_im_data) def GET(self):
相关推荐
f = cStringIO.StringIO(res.read()) f 是一个文件对象, 它和:f = open(‘c:/1.jpg’,’rw’) 打开的文件一样 可以向操作本地文件一样对内存文件进行读写 希望本文所述对大家的Python程序设计有所帮助。
这在很多情况下非常有用,例如,在需要进行文件操作的代码中临时使用字符串代替文件,或是在处理文本数据时无需实际在磁盘上创建文件。 StringIO模块通常用于以下场景: 1. 作为字符串的缓存,当你需要处理一些...
本文实例讲述了python从网络读取图片并直接进行处理的方法。分享给大家供大家参考。具体实现方法如下: ... file = cStringIO.StringIO(urllib2.urlopen(url).read()) img = Image.open(file) im
buf = cStringIO.StringIO() image.save(buf, image.format,quality=75) data = buf.getvalue() a = u.writeFile(‘/this/logo.jpg’,data,True) 应用在 使用django,用户上传图片后,将图片转存到...
1. 核心模块 o 1.1. 介绍 o 1.2. _ _builtin_ _ 模块 o 1.3.... cStringIO 模块 o 2.7. mmap 模块 3. 线程和进程 o 3.1. 概览 o 3.2. threading 模块 o 3.3. Queue 模块 o 3.4. thread 模块 o 3.5. comm
这可以通过将远程图片的响应内容读取到内存中的一个流对象(如`cStringIO.StringIO`)来实现,然后使用`PIL`(Python Imaging Library)的`Image`模块解析这个流对象,从而获取图片的格式、尺寸和模式。 以下是获取...
然后,`cStringIO.StringIO(image_data)`将图片数据转换为一个可以像文件一样读写的内存对象。最后,`Image.open(tmpIm)`读取这个内存中的图片数据并返回一个Image对象,我们可以像处理本地图片那样获取其格式和尺寸...
在上述代码中,`genCSV`是一个生成器函数,它负责将数据写入`cStringIO.StringIO`对象并逐块生成。`getContent`函数用于获取当前`StringIO`对象中的数据。在`StreamingHttpResponse`中,我们传入`genCSV`作为数据源...
s = StringIO.StringIO(“JGood is a handsome boy”) s.write(“JGood is a handsome boy \r\n”) s.write(‘okkkk中国’) s.seek(0) print s.read() #最后4个字节 s.seek(-4, 2) print s.read() #—-
- `cStringIO.StringIO([string])`: 创建一个内存中的文本流。 **2.7 mmap模块** - **作用**:提供了内存映射文件的支持。 - **常见函数**: - `mmap.mmap(fd, length, tagname=None, access=mmap.ACCESS_READ, ...
2.5. StringIO 模块 2.6. cStringIO 模块 2.7. mmap 模块 2.8. UserDict 模块 2.9. UserList 模块 2.10. UserString 模块 2.11. traceback 模块 2.12. errno 模块 2.13. getopt 模块 2.14. getpass 模块 ...
output = cStringIO.StringIO() df.to_csv(output, sep='\t', index=False, header=False) output.getvalue() # 重置输出流的指针,以便从头开始读取 output.seek(0) # 获取数据库连接并创建游标 connection = ...
本文实例讲述了Python实现批量读取图片并存入mongodb数据库的方法...from cStringIO import StringIO from pymongo import MongoClient import gridfs import os import matplotlib.pyplot as plt import matplotlib.im
self.queue = cStringIO.StringIO() self.writer = csv.writer(self.queue, dialect=dialect, **kwds) self.stream = f self.encoder = codecs.getincrementalencoder(encoding)() def writerow(self, row): ...
在Jython中,字符串模块主要通过StringIO和cStringIO来实现类似文件的操作。StringIO模块提供了一个可以读写字符串缓冲区的类,就像是内存中的文件一样。cStringIO模块是StringIO的优化版,提供了更快的性能,但它是...
3. **文件操作**:使用cStringIO.StringIO将网页内容转换为输入流,便于逐行读取。 4. **循环控制**:使用for循环遍历输入流中的每一行,判断是否含有特定的关键字(如商品状态信息)。 5. **条件判断**:使用if-...