PIL-python-imaging-library

越来越觉得PIL的重要性,决定认认真真地学上一两天,嗯~ o( ̄▽ ̄)o!

PIL

内容基本都是从文档上来的。
文档链接
下面这个网站对PIL的介绍很详细,想了解更多可以看这个。
PIL

使用Image类

从文件载入,或者句柄载入

1
2
import Image
im = Image.open("lena.ppm")
1
2
3
import Image
fp = open("lena.ppm","rb")
im = Image.open(fp)

查看一些对象属性

1
2
print im.format,im.size,im.mode
PPM (512,512) RGB

mode如果是L,代表灰度图像,RGB是彩色图像,CMYK是pre-press图像,这个图像是啥,我还不太清楚。

显示图像

1
im.show()

对图像进行读写

保存图像

1
im.save(outfile,format,options...)

format如果省略,则python自动按插件识别结果保存。如果没有安装扩展插件,需要明确保存格式。

保存为jpeg格式

1
2
3
4
5
6
7
8
9
10
11
import os,sys
import Image

for infile in sys.argv[1:]:
f,e = os.path.splitext(infile)
outfile = f + ".jpg"
if outfile != infile:
try:
image.open(infile).save(outfile)
except IOError:
print "cannot convert",infile

上述代码将把命令行读入的所有指定文件保存为jpg格式,不能保存的抛出异常。

图像缩放

1
2
3
4
5
6
7
8
9
10
11
12
13
import sys
import Image

size = 128,128

for infile in sys.argv[1:]:
outfile = os.path.splitext(infile)[0] + ".thumbnail"
try:
im = Image.open(infile)
im.thumbnail(size)
im.save(outfile,"jpeg")
except:
print "cannot create thumbnail for",infile

截取,粘贴,融合图像

截取图像的一部分

使用crop方法从一张图片上截取子矩形

1
2
box = (100,100,400,400)
region = im.crop(box)

从左上角到右下角

旋转180,再贴回去

1
2
region = region.transpose(Image.ROTATE_180)
im.paste(region,box)

滚动图像(交换图像位置)

1
2
3
4
5
6
7
8
9
10
11
12
13
def roll(image,delta):

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

分割RGB

1
2
r,g,b = im.split()
im = Image.merge("RGB",(b,g,r))

几何变换

简单变换

1
2
out = im.resize(128,128)
out = im.rotate(45) #逆时针旋转

变换图像

1
2
3
4
5
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)

颜色变换(在不同mode下转换)

1
im = Image.open("lena.ppm").convert("L")

滤镜

1
2
import ImageFilter
out = im.filter(ImageFilter.DETAIL)

有很多滤镜的功能,在ImageFilter模块里,具体可以参考文档。
ImageFilter

点操作(提取不同通道像素)

读取每一帧

1
2
3
4
5
6
7
8
import Image

im = Image.open("animation.gif")
try:
im.seek(im.tell() + 1)
im.save(str(im.tell()) + ".jpg")
except EOFError:
pass

个人博客建成

使用jekyll + Github Pages的方法搭建,windows上搭建jekyll失败,换成Ubuntu,总算是安装好了jekyll,更换主题以后,修改配置,背景时,被搞晕了,找的主题没一个符合我这个菜鸟的,可能是自己太菜,配置不好……
后来幸得师兄提醒,换了Hexo + Github Pages,Hexo果然适合我这种啥web都不懂的菜鸟,总算是会配置一下了……心累!
配置环境还是官方文档简单靠谱!
Hexo
jekyll

找到了用hexo无法部署到github上的原因,真的好鸡冻!hexo还是和jekyll在部署到github上不同的,jekyll使用git的push操作,而hexo则是hexo generate一下,生成静态页面,然后再hexo deploy,就部署到github上了。

昨天的b萌Chtholly对战英莉莉输了,嘛,虽然预计在情理之中,额,还是挺不开心的!最后,欢迎柯朵莉回家^_^
柯朵莉

hexo用法

hexo部署到远程仓库

配置根目录下_config.yml,修改如下:
deploy:
type: git
repo: git@github.com:Your_github_name/Your_github_name.github.io.git
branch: master

1
2
3
$ hexo clean
$ hexo generate
$ hexo deploy

如果hexo deploy出现ERROR:Deployer not found: git,那么安装一下hexo-deployer-git就好!

1
npm install hexo-deployer-git

Create a new post

1
$ hexo new "my new post"

More info: Writing

Run server

1
$ hexo serve

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

Git-Learing

本地建站,写文章成功。但是push到Github Pages时出现问题,长时间无法解决,于是决定好好看看git。

简单的使用和说明->Git

Git的说明

Git是分布式版本控制系统

版本控制系统: 类似于玩RPG类游戏,可以存档和读档一样,轻松更换版本。
分布式: 集中式版本控制,顾名思义,就是集中存放在中央服务器,中央服务器就类似于一个图书馆,修改书籍的人,需要先从图书馆借阅来书籍,本地修改以后,再把书籍还回去。最大的毛病就是需要联网,那么一定会有带宽,速度的问题。而分布式的版本库在本地,就像东西在自己家一样,无论如何都很方便。

Git的暂存区和工作区

工作区: .git同级的其他目录以及文件
暂存区: .git目录里的stage就是暂存区,当我们git add之后,文件就会存放在这个区里;当我们git commit之后,暂存区里的内容就会提交到当前分支,默认是master分支。git status就是查看文件从工作区到当前分支的状态的。

Git的使用

版本库创建,添加文件,提交到仓库

1
$ git init

建立好以后,本地当前目录下就会多出来一个隐藏目录.git,使用ls -ah可以查看,这个目录是Git用来管理跟踪版本库(仓库respository)的。
将文件先添加,后提交到仓库。

1
2
$ git add Filename
$ git commit -m "对该次添加(修改)的说明(备注)"

查看仓库状态

1
$ git status

能清楚地了解该仓库的文件添加状态,提交状态等

比较文件异同

1
$ git diff Filename

版本回退(读档)

1
2
3
$ git log  打印出各版本信息(备注,commit-ID等)
$ git reflog 打印出你之前的git操作,能得到commit-ID
$ git reset --hard HEAD~100/commit-ID 版本库回退,HEAD~100指前100次的版本库

远程仓库的建立

创建SSH Key。

1
$ ssh-keygen -t rsa -C "youremail@example.com"

然后一路回车,.ssh目录创建,里面id_rsa是私钥,id_rsa.pub是公钥,进入自己的github添加rsa密钥即可。
在Github上也建立一个仓库,假设名字为xxx.github.io,Github账户名为xxx,现在我们将本地仓库和远程仓库相关联

1
$ git remote add origin git@github.com:xxx/xxx.github.io.git

添加后,远程库的名字就是origin,Git默认叫法。下一步,将本地库的内容推送到远程库上。

1
$ git push -u origin master

即:将名为master分支的内容推送到名为origin的远程库
以后通过如下命令就可以将最新修改push到Github上了

1
$ git push origin master

从远程库克隆

1
$ git clone git@github.com:xxx/xxx.github.io.git

删除版本库

1
$ git remote remove origin

origin是版本库名