python调用wget
Ⅰ docker容器下搭建python环境
1)进入容笑伏器
docker exec -it 容器id(或容器名) /bin/bash
查看当前操作系统cat /etc/issue
Debian GNU/Linux 10 \n \l
这里查到薯升亮的是Debian系统(不是ubuntu, 也不是centos),这里yum是没有的,所以不能用yum安装了,这里用apt-get代替yum
先执行更新apt-get
apt-get update
2)在当前容器目录下(自己的虚拟机:/usr/local/tomcat)
mkdir python3
cd python3/
执行命令:wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
解压:tar -xvf Python-3.6.8.tgz
cd Python-3.6.8/
然后执行:./configure --prefix=/usr/local/tomcat/python3,会报错:configure: error: no acceptable C compiler found in $PATH
apt-get 安装依赖包
这个是因为缺少gcc相关依赖包,使用apt-get代替yum安装相关依赖包
apt-get -y install gcc automake autoconf libtool make
apt-get -y install make*
apt-get -y install zlib*
apt-get -y install openssl libssl-dev
apt-get install sudo
make编译安装
./configure --prefix=/usr/local/tomcat/python3 --with-ssl
make
make install
最后:添加软链接
添加python3软链接
ln -s /var/jenkins_home/python3/bin/python3.6 /usr/bin/python3
添加pip3软链接
ln -s /var/jenkins_home/python3/bin/pip3 /usr/bin/pip3
注:
ssl问题
如果pip3安装的时候遇到报ssl相关问题:pip is configured with locations that require TLS/SSL, however the ssl mole in Python is not available.
这个是因为缺少ssl依赖包,网上的解决方案是yum install openssl-devel ,由于Debian系统没有数宽yum,用apt-get安装
apt-get -y install openssl libssl-dev
安装完成之后只能解决系统自带的python2对应的pip安装问题,无法解决python3的pip3安装问题。
解决办法:上面编译的时候需加上参数 --with-ssl
./configure --prefix=/usr/local/tomcat/python3 --with-ssl
重新执行make和make install 就可以了
Ⅱ python 多进程和多线程配合
由于python的多线程中存在PIL锁,因此python的多线程不能利用多核,那么,由于现在的计算机是多核的,就不能充分利用计算机的多核资源。但是python中的多进程是可以跑在不同的cpu上的。因此,尝试了多进程+多线程的方式,来做一个任务。比如:从中科大的镜像源中下载多个rpm包。
#!/usr/bin/pythonimport reimport commandsimport timeimport multiprocessingimport threadingdef download_image(url):
print '*****the %s rpm begin to download *******' % url
commands.getoutput('wget %s' % url)def get_rpm_url_list(url):
commands.getoutput('wget %s' % url)
rpm_info_str = open('index.html').read()
regu_mate = '(?<=<a href=")(.*?)(?=">)'
rpm_list = re.findall(regu_mate, rpm_info_str)
rpm_url_list = [url + rpm_name for rpm_name in rpm_list] print 'the count of rpm list is: ', len(rpm_url_list) return rpm_url_
def multi_thread(rpm_url_list):
threads = [] # url = 'https://mirrors.ustc.e.cn/centos/7/os/x86_64/Packages/'
# rpm_url_list = get_rpm_url_list(url)
for index in range(len(rpm_url_list)): print 'rpm_url is:', rpm_url_list[index]
one_thread = threading.Thread(target=download_image, args=(rpm_url_list[index],))
threads.append(one_thread)
thread_num = 5 # set threading pool, you have put 4 threads in it
while 1:
count = min(thread_num, len(threads)) print '**********count*********', count ###25,25,...6707%25
res = [] for index in range(count):
x = threads.pop()
res.append(x) for thread_index in res:
thread_index.start() for j in res:
j.join() if not threads:
def multi_process(rpm_url_list):
# process num at the same time is 4
process = []
rpm_url_group_0 = []
rpm_url_group_1 = []
rpm_url_group_2 = []
rpm_url_group_3 = [] for index in range(len(rpm_url_list)): if index % 4 == 0:
rpm_url_group_0.append(rpm_url_list[index]) elif index % 4 == 1:
rpm_url_group_1.append(rpm_url_list[index]) elif index % 4 == 2:
rpm_url_group_2.append(rpm_url_list[index]) elif index % 4 == 3:
rpm_url_group_3.append(rpm_url_list[index])
rpm_url_groups = [rpm_url_group_0, rpm_url_group_1, rpm_url_group_2, rpm_url_group_3] for each_rpm_group in rpm_url_groups:
each_process = multiprocessing.Process(target = multi_thread, args = (each_rpm_group,))
process.append(each_process) for one_process in process:
one_process.start() for one_process in process:
one_process.join()# for each_url in rpm_url_list:# print '*****the %s rpm begin to download *******' %each_url## commands.getoutput('wget %s' %each_url)
def main():
url = 'https://mirrors.ustc.e.cn/centos/7/os/x86_64/Packages/'
url_paas = 'http://mirrors.ustc.e.cn/centos/7.3.1611/paas/x86_64/openshift-origin/'
url_paas2 ='http://mirrors.ustc.e.cn/fedora/development/26/Server/x86_64/os/Packages/u/'
start_time = time.time()
rpm_list = get_rpm_url_list(url_paas) print multi_process(rpm_list) # print multi_thread(rpm_list)
#print multi_process()
# print multi_thread(rpm_list)
# for index in range(len(rpm_list)):
# print 'rpm_url is:', rpm_list[index]
end_time = time.time() print 'the download time is:', end_time - start_timeprint main()123456789101112131415161718
代码的功能主要是这样的:
main()方法中调用get_rpm_url_list(base_url)方法,获取要下载的每个rpm包的具体的url地址。其中base_url即中科大基础的镜像源的地址,比如:http://mirrors.ustc.e.cn/centos/7.3.1611/paas/x86_64/openshift-origin/,这个地址下有几十个rpm包,get_rpm_url_list方法将每个rpm包的url地址拼出来并返回。
multi_process(rpm_url_list)启动多进程方法,在该方法中,会调用多线程方法。该方法启动4个多进程,将上面方法得到的rpm包的url地址进行分组,分成4组,然后每一个组中的rpm包再最后由不同的线程去执行。从而达到了多进程+多线程的配合使用。
代码还有需要改进的地方,比如多进程启动的进程个数和rpm包的url地址分组是硬编码,这个还需要改进,毕竟,不同的机器,适合同时启动的进程个数是不同的。
Ⅲ 树莓派怎么样用 Python 控制 GPIO 来发送串口指令
python GPIO
1、先安装python-dev,输入以下指令。
sudo
apt-get install python-dev
2、安装RPi.GPIO,依次输入以下指令。
1)下载:$ wget http://raspberry-gpio-python.googlecode.com/files/RPi.GPIO-0.5.3a.tar.gz
2)解压缩:$ tar xvzf RPi.GPIO-0.5.3a.tar.gz
3)进入解压之后的目录 :$ cd RPi.GPIO-0.5.3a
4)启动安装 :$ sudo python setup.py install
3、例子:
[python] view plain
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time
# BOARD编号方式,基于插座引脚编号
GPIO.setmode(GPIO.BOARD)
# 输出模式
GPIO.setup(11, GPIO.OUT)
while True:
GPIO.output(11, GPIO.HIGH)
time.sleep(1)
GPIO.output(11, GPIO.LOW)
time.sleep(1)
4、执行:
sudo python led.py
5、说明:
1)GPIO.setmode(GPIO.BOARD),采用插座引脚编号方式。
2)由于采用插座引脚编号方式,此处的11脚相当于BCM2835寄存器编号方式的引脚11。
python GPIO
1、说明:
WiringPi是应用于树莓派平台的GPIO控制库函数,WiringPi遵守GUN Lv3。wiringPi使用C或者C++开发并且可以被其他语言包转,例如python、ruby或者PHP等。
wiringPi包括一套gpio控制命令,使用gpio命令可以控制树莓派GPIO管脚。用户可以利用gpio命令通过shell脚本控制或查询
GPIO管脚。wiringPi是可以扩展的,可以利用wiringPi的内部模块扩展模拟量输入芯片,可以使用
MCP23x17/MCP23x08(I2C
或者SPI)扩展GPIO接口。另外可通过树莓派上的串口和Atmega(例如arino等)扩展更多的GPIO功能。另外,用户可以自己编写扩展模
块并把自定义的扩展模块集成到wiringPi中。WiringPi支持模拟量的读取和设置功能,不过在树莓派上并没有模拟量设备。但是使用
WiringPi中的软件模块却可以轻松地应用AD或DA芯片。
Ⅳ python 如何使用wget
你可以使用 subprocess 模块,检查执行 subprocess.call("Your-Command") 后的返回值:
Ⅳ 如何使用python绘制gwas分析中的曼哈顿图和qq图
曼哈顿图
将示例数据下载下来:
wget https://raw.githubusercontent.com/ShujiaHuang/geneview-data/master/GOYA.csv
先简单地查看一下数据的格式:
chrID,rsID,position,pvalue
1,rs3094315,742429,0.144586
1,rs3115860,743268,0.230022
1,rs12562034,758311,0.644366
1,rs12124819,766409,0.146269
1,rs4475691,836671,0.458197
1,rs28705211,890368,0.362731
1,rs13303118,908247,0.22912
1,rs9777703,918699,0.37948
1,rs3121567,933331,0.440824
一共是4列(逗号分隔),分别为:[1]染色体编号,[2]SNP rs 编号,[3] 位点在染色体上的位置,[4]显着性差异程度(pvalue)。在本例曼哈顿图中我们只需要使用第1,3和4列;而QQ图则只需要第4列——pvalue。
下面先从绘制曼哈顿图开始。我们先将需要的数据读取到一个列表中,可以这样做:
import csv
data = []
with open("GOYA.csv") as f:
f_csv = csv.reader(f)
headers = next(f_csv)
data = [[row[0], int(row[2]), float(row[3])] for row in f_csv]
现在GOYA.csv中的数据就都存放在data列表中了,由于Python在读取文件中数据时,都是以string类型存放,因此对于第3和第4列的数据有必要事先把做点类型转换。
接下来,调用geneview中的曼哈顿图函数。
import matplotlib.pyplot as plt
from geneview.gwas import manhattanplot
ax = manhattanplot(data, xlabel="Chromosome", ylabel="-Log10(P-value)") # 这就是Manhattan plot的函数
plt.show()
只需这样的一句代码就能创建一个漂亮的曼哈顿图,有必要再次指出的是,geneview是以matplotlib为基础开发出来的,所创建的图形对象实际上仍属于matplotlib,geneview内部自定义了很多图形风格,同时封装了大量只属于基因组数据的图表类型,但图形的输出格式以及界面显示都仍和matplotlib一样,因此在这里我们使用matplotlib.pyplot的show()函数(上例中:plt.show())将所绘制出来的曼哈顿图显示出来。如果要将图形保存下来,则只需执行`plt.savefig("man.png")`,这样就会在该目录下生成一个名为‘man.png’png格式的曼哈顿图,若是要存为pdf格式,则只需将所要保存的文件名后缀改成‘.pdf’(plt.savefig("man.pdf"))就可以了。下面这些格式:emf,
eps, pdf, png, jpg, ps, raw, rgba, svg,
svgz等都是支持的,至于最新的还有多少种,还请参照matplotlib文档中说明。
此外,geneview中的每个画图函数都有着足够的灵活性,我们也可以根据自己的需要做一些调整,比如:
xtick = ['1', '2','3','4','5','6','7','8','9','10','11','12','13','14','16','18', '20','22']
manhattanplot(data,
xlabel="Chromosome", # 设置x轴名字
ylabel="-Log10(P-value)", # 设置y轴名字
xtick_label_set = set(xtick), # 限定横坐标轴上的刻度显示
s=40, # 设置图中散点的大小
alpha=0.5, # 调整散点透明度
color="#f28b1e,#9a0dea,#ea0dcc,#63b8ff", # 设置新的颜色组合
)
实现新的颜色组合、限定x轴上的刻度显示和散点大小的调节。甚至还可以将散点改为线:
manhattanplot(data,
xlabel="Chromosome", # 设置x轴名字
ylabel="-Log10(P-value)", # 设置y轴名字
xtick_label_set = set(xtick), # 限定横坐标轴上的刻度显示
alpha=0.5, # 调整散点透明度
color="#f28b1e,#9a0dea,#ea0dcc,#63b8ff", # 设置新的颜色组合
kind="line"
)
其它方面的调整请查看geneview文档中的相关说明。
Q-Q图
qq图只需用到上例中的pvalue那一列:
import csv
import matplotlib.pyplot as plt
from geneview.gwas import qqplot
pvalue=[]
with open("GOYA.csv") as f:
f_csv = csv.reader(f)
headers = next(f_csv)
pvalue = [float(row[3]) for row in f_csv]
ax = qqplot(pvalue, color="#00bb33", xlabel="Expected p-value(-log10)", ylabel="Observed p-value(-log10)") # Q-Q 图
plt.show()
同样,也可以根据自己的需要对改图进行相关的调整。
以上,便是如何使用Python来制作Manhattan图和QQ图的方法,geneview的集成函数简化了这样的一个过程。
另外,如果你也看过丹麦人的这个GOYA研究,就会发现实际以上的两个图和其文章中的基本是一致的,当然我自己做了些数据清洗的操作,结果上仍然会有些许的不同。虽然此刻下结论还有点为时尚早,但总的来讲,我应该也可以通过这个数据集比较顺利的将其结果重复出来了。
最后,附上利用geneview画曼哈顿图和QQ图的代码:
(1)曼哈顿图:
(2)QQ图:
Ⅵ Python包管理工具pip的安装和使用
Python有两个着名的包管理工具easy_install.py和pip。在Python2.7的安装包中,easy_install.py是默认安装的,而pip需要我们手动安装。
方法1:利用常用curl获取
>>后面是指定获取的pip脚本的名字,也可以是curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
方法2:利用wget获取,先要安装wget
备注:看网上还有利用easy_install安装pip,但是我尝试了并没有成功
原因是 Python.org sites 终止支持TLS1.0和1.1版本,TLS需要>=1.2
参考: https://stackoverflow.com/questions/49768770/not-able-to-install-python-packages-ssl-tlsv1-alert-protocol-version
主要命令:
所有命令中,最重要的两个命令是install和uninstall。
pip支持四种方式安装python包。
从PyPI安装一个包
安装一个全局区域的包,一般需要sudo权限。在mac系统上,即使是管理员也无法安装,自从OS X El Capitan及以后的版本包含了一套安全技术(System Integrity Protection简称为SIP)来防止恶意软件修改系统保护区域。具体可参考SIP。因此,我们有时候需要将PyPI包安装到用户区,这个时候,可以用.
pip在升级软件包之前会自动卸载旧的软件包。
可以将所有需要安装的包放入一个requirements.txt文件中,然后可以一次安装。requirements.txt 文件的每一行都要表明安装的内容,而且尽量不要依赖文件中指定包的前后安装顺序。
从git安装
从svn安装
从一个分支安装
还有很多其他的包安装功能,但是上面的已经满足了大部分需求。其他的请参考 文档 。
pip uninstall可以卸载大部分的包,除了一下两种情况
使用方式主要有两种:
卸载单个包
卸载多个包
pip check用来验证已安装的包是否有兼容的依赖性问题。
上面的结果说明matplotlib包有两个依赖包没有安装。
pip search用来搜索名字或者摘要中包含搜索关键字的PyPI包。
选项只有一个,就是指定PyPI的url,默认url为 https://pypi.python.org/pypi
例如,search frida
以下两者都可以用,结果同上。
pip list命令会按照字典序排列列举已安装的包,包括可编辑的包。
主要有如下选项:
输出格式:
legacy:将要被废弃
freeze
columns
json
当某些时候debug的时候,需要提供一个完整的python环境,python freeze提供了此功能,它能够输出机器上python环境的快照(所有已安装的包)。
下面是freeze命令的选项:
输出用户区安装的前5个安装包:
pip show可以用来显示每个包的具体信息。show命令只有一个选项 -f,用来显示安装包的文件列表。
$ pip show -f|--files packageName
更多命令请参考 文档
pip默认的index-url是 https://pypi.python.org/pypi/ ,
为了提高速度,我们可以更改pip源为国内的阿里云源。更改方法如下:
创建配置文件
添加阿里源
pip.conf内容如下:
Ⅶ 怎么样在Python编程中使用Pillow来处理图像
安装
刚接触Pillow的朋友先来看一下Pillow的安装方法,在这里我们以Mac OS环境为例: (1)、使用 pip 安装 Python 库。pip 是 Python 的包管理工具,安装后就可以直接在命令行一站式地安装/管理各种库了(pip 文档)。
$ wget http://pypi.python.org/packages/source/p/pip/pip-0.7.2.tar.gz$ tar xzf pip-0.7.2.tar.gz$ cd pip-0.7.2$ python setup.py install
(2)、使用 pip 下载获取 Pillow:
$ pip install pillow
(3)、安装过程中命令行出现错误提示:”error: command ‘clang' failed with exit status
1”。上网查阅,发现需要通过 Xcode 更新 Command Line Tool。于是打开
Xcode->Preferences->Downloads-Components选项卡。咦?竟然没了 Command Line
Tools。再查,发现 Xcode 5 以上现在需要用命令行安装:
$ xcode-select —install
系统会弹出安装命令行工具的提示,点击安装即可。
此时再 pip install pillow,就安装成功了。
pip freeze 命令查看已经安装的 Python 包,Pillow 已经乖乖躺那儿了。
好了,下面开始进入教程~
Image类
Pillow中最重要的类就是Image,该类存在于同名的模块中。可以通过以下几种方式实例化:从文件中读取图片,处理其他图片得到,或者直接创建一个图片。
使用Image模块中的open函数打开一张图片:
>>> from PIL import Image>>> im = Image.open("lena.ppm")
如果打开成功,返回一个Image对象,可以通过对象属性检查文件内容
>>> from __future__ import print_function>>> print(im.format, im.size, im.mode)
PPM (512, 512) RGB
format属性定义了图像的格式,如果图像不是从文件打开的,那么该属性值为None;size属性是一个tuple,表示图像的宽和高(单位为像素);mode属性为表示图像的模式,常用的模式为:L为灰度图,RGB为真彩色,CMYK为pre-press图像。
如果文件不能打开,则抛出IOError异常。
当有一个Image对象时,可以用Image类的各个方法进行处理和操作图像,例如显示图片:
>>> im.show()
ps:标准版本的show()方法不是很有效率,因为它先将图像保存为一个临时文件,然后使用xv进行显示。如果没有安装xv,该函数甚至不能工作。但是该方法非常便于debug和test。(windows中应该调用默认图片查看器打开)
读写图片
Pillow库支持相当多的图片格式。直接使用Image模块中的open()函数读取图片,而不必先处理图片的格式,Pillow库自动根据文件决定格式。
Image模块中的save()函数可以保存图片,除非你指定文件格式,那么文件名中的扩展名用来指定文件格式。
图片转成jpg格式
from __future__ import print_functionimport os, sysfrom PIL import Imagefor infile in sys.argv[1:]: f, e = os.path.splitext(infile) outfile = f + ".jpg" if infile != outfile: try: Image.open(infile).save(outfile) except IOError: print("cannot convert", infile)
save函数的第二个参数可以用来指定图片格式,如果文件名中没有给出一个标准的图像格式,那么第二个参数是必须的。
创建缩略图
from __future__ import print_functionimport os, sysfrom PIL import Imagesize = (128, 128)for infile in sys.argv[1:]: outfile = os.path.splitext(infile)[0] + ".thumbnail" if infile != outfile: try: im = Image.open(infile) im.thumbnail(size) im.save(outfile, "JPEG") except IOError: print("cannot create thumbnail for", infile)
必须指出的是除非必须,Pillow不会解码或raster数据。当你打开一个文件,Pillow通过文件头确定文件格式,大小,mode等数据,余下数据直到需要时才处理。
这意味着打开文件非常快,与文件大小和压缩格式无关。下面的程序用来快速确定图片属性:
确定图片属性
from __future__ import print_functionimport sysfrom PIL import Imagefor infile in sys.argv[1:]: try: with Image.open(infile) as im: print(infile, im.format, "%dx%d" % im.size, im.mode) except IOError: pass
裁剪、粘贴、与合并图片
Image类包含还多操作图片区域的方法。如crop()方法可以从图片中提取一个子矩形
从图片中复制子图像
box = im.() #直接复制图像box = (100, 100, 400, 400)region = im.crop(box)
区域由4-tuple决定,该tuple中信息为(left, upper, right, lower)。 Pillow左边系统的原点(0,0)为图片的左上角。坐标中的数字单位为像素点,所以上例中截取的图片大小为300*300像素^2。
处理子图,粘贴回原图
region = region.transpose(Image.ROTATE_180)im.paste(region, box)
将子图paste回原图时,子图的region必须和给定box的region吻合。该region不能超过原图。而原图和region的mode不需要匹配,Pillow会自动处理。
另一个例子
Rolling an imagedef roll(image, delta): "Roll an image sideways" image = image.() #复制图像 xsize, ysize = image.size delta = delta % xsize if delta == 0: return image part1 = image.crop((0, 0, delta, ysize)) part2 = image.crop((delta, 0, xsize, ysize)) image.paste(part2, (0, 0, xsize-delta, ysize)) image.paste(part1, (xsize-delta, 0, xsize, ysize)) return image
分离和合并通道
r, g, b = im.split()im = Image.merge("RGB", (b, g, r))
对于单通道图片,split()返回图像本身。为了处理单通道图片,必须先将图片转成RGB。
几何变换
Image类有resize()、rotate()和transpose()、transform()方法进行几何变换。
简单几何变换
out = im.resize((128, 128))out = im.rotate(45) # 顺时针角度表示
置换图像
out = im.transpose(Image.FLIP_LEFT_RIGHT)out = im.transpose(Image.FLIP_TOP_BOTTOM)out = im.transpose(Image.ROTATE_90)out = im.transpose(Image.ROTATE_180)out = im.transpose(Image.ROTATE_270)
transpose()和象的rotate()没有性能差别。
更通用的图像变换方法可以使用transform()
模式转换
convert()方法
模式转换
im = Image.open('lena.ppm').convert('L')
图像增强
Filter ImageFilter模块包含很多预定义的增强filters,通过filter()方法使用
应用filters
from PIL import ImageFilterout = im.filter(ImageFilter.DETAIL)
像素点处理
point()方法通过一个函数或者查询表对图像中的像素点进行处理(例如对比度操作)。
像素点变换
# multiply each pixel by 1.2out = im.point(lambda i: i * 1.2)
上述方法可以利用简单的表达式进行图像处理,通过组合point()和paste()还能选择性地处理图片的某一区域。
处理单独通道
# split the image into indivial bandssource = im.split()R, G, B = 0, 1, 2# select regions where red is less than 100mask = source[R].point(lambda i: i < 100 and 255)# process the green bandout = source[G].point(lambda i: i * 0.7)# paste the processed band back, but only where red was < 100source[G].paste(out, None, mask)# build a new multiband imageim = Image.merge(im.mode, source)
注意到创建mask的语句:
mask = source[R].point(lambda i: i < 100 and 255)
该句可以用下句表示
imout = im.point(lambda i: expression and 255)
如果expression为假则返回expression的值为0(因为and语句已经可以得出结果了),否则返回255。(mask参数用法:当为0时,保留当前值,255为使用paste进来的值,中间则用于transparency效果)
高级图片增强
对其他高级图片增强,应该使用ImageEnhance模块 。一旦有一个Image对象,应用ImageEnhance对象就能快速地进行设置。 可以使用以下方法调整对比度、亮度、色平衡和锐利度。
图像增强
from PIL import ImageEnhanceenh = ImageEnhance.Contrast(im)enh.enhance(1.3).show("30% more contrast")
动态图
Pillow支持一些动态图片的格式如FLI/FLC,GIF和其他一些处于实验阶段的格式。TIFF文件同样可以包含数帧图像。
当读取动态图时,PIL自动读取动态图的第一帧,可以使用seek和tell方法读取不同郑
from PIL import Imageim = Image.open("animation.gif")im.seek(1) # skip to the second frametry: while 1: im.seek(im.tell()+1) # do something to imexcept EOFError: pass # end of sequence
当读取到最后一帧时,Pillow抛出EOFError异常。
当前版本只允许seek到下一郑为了倒回之前,必须重新打开文件。
或者可以使用下述迭代器类
动态图迭代器类
class ImageSequence: def __init__(self, im): self.im = im def __getitem__(self, ix): try: if ix: self.im.seek(ix) return self.im except EOFError: raise IndexError # end of sequencefor frame in ImageSequence(im): # ...do something to frame...Postscript Printing
Pillow允许通过Postscript Printer在图片上添加images、text、graphics。
Drawing Postscriptfrom PIL import Imagefrom PIL import PSDrawim = Image.open("lena.ppm")title = "lena"box = (1*72, 2*72, 7*72, 10*72) # in pointsps = PSDraw.PSDraw() # default is sys.stdoutps.begin_document(title)# draw the image (75 dpi)ps.image(box, im, 75)ps.rectangle(box)# draw centered titleps.setfont("HelveticaNarrow-Bold", 36)w, h, b = ps.textsize(title)ps.text((4*72-w/2, 1*72-h), title)ps.end_document()
更多读取图片方法
之前说到Image模块的open()函数已经足够日常使用。该函数的参数也可以是一个文件对象。
从string中读取
import StringIOim = Image.open(StringIO.StringIO(buffer))
从tar文件中读取
from PIL import TarIOfp = TarIO.TarIO("Imaging.tar", "Imaging/test/lena.ppm")im = Image.open(fp)
草稿模式
draft()方法允许在不读取文件内容的情况下尽可能(可能不会完全等于给定的参数)地将图片转成给定模式和大小,这在生成缩略图的时候非常有效(速度要求比质量高的场合)。
draft模式
from __future__ import print_functionim = Image.open(file)print("original =", im.mode, im.size)im.draft("L", (100, 100))print("draft =", im.mode, im.size)
Ⅷ 如何在CentOS6上安装Python2.7和Python3.3
一、安装检查
一般在centos中都会默认装一个python,版本不一定,如果是2.7,则安装时只装3.3就可以了(现在最新已经到3.6了,可以装一个3.6版本的)
which python #查看当前centos中使用的python解释器位置
python --version #查看当前安装的python版本
二、python的安装
1.wget相应的python包(https://www.python.org/downloads/source/)
如图,右键-复制链接,就可以得到对应的包了。
1.下载get-pip.py
wgethttps://bootstrap.pypa.io/get-pip.py
2.执行命令pythonget-pip.py
3.更新,运行命令
pipinstall-Upip