恩 其實最近都有看python 但是總是寫不出一篇筆記
然而 不寫不行了啊?。?!
所以有了它
首先,python3下載的是pillow不是PIL,因為PIL不支持
對于import只能導入PIL的我的理解:
我先查了一下pillow的位置
/usr/local/lib/python3.6/site-packages
看了一下里面的東西,似乎是明白了
pillow是PIL基礎上產(chǎn)生的安裝包名,但他產(chǎn)生的仍然是名為PIL的文件夾,即包(python模塊)名
import的只可以是pip下載的默認文件夾中的包名 所以只能import PIL
安裝要打pillow則是因為在wheel等包管理工具中是這個名字
而這個默認文件夾路徑是怎么確定的我查了很久感覺路徑應該在某個py文件中 但我還沒找到 只查到了一個叫做virtualenv的東西,在教程PIL下面一章有說,但我覺得不是我要找的就沒看
所以安裝的方法雖然是pillow 但我們在導入的時候需要導入的是安裝后產(chǎn)生的包名,我們需要到自己的默認下載路徑去查看叫什么。其他的安裝包也是如此。
然后再開始我的表演
圖片的縮放
教程中的代碼如下
from PIL import Image
im = Image.open('test.jpg’)
w, h = im.size
im.thumbnail((w//2, h//2))
im.save('thumbnail.jpg', 'jpeg') ```
1.open方法可以讓圖片變成PIL圖片文件,即此時的im是一個PIL圖像文件
im
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=750x1091 at 0x106282668>```
這里有點奇怪的是,每一次導入內(nèi)存位置都會改變,而不像數(shù)據(jù),導入后就在一個固定位置。
2.thumbnail()方法:產(chǎn)生一個縮略圖,后面的參數(shù)是圖片大小
3.save()方法中,后面的參數(shù)沒用吧??不管改成什么,圖像格式只和前面的后綴名保持一致啊,不過文件大小倒是被改變了
我覺得大概是會轉(zhuǎn)成后面的后綴名的文件,然后再根據(jù)圖片名后面的后綴給再次改掉了格式,所以大小會變。
模糊效果
from PIL import Image, ImageFilter
im = Image.open('test.jpg')
im2 = im.filter(ImageFilter.BLUR)
im2.save('blur.jpg')
其中ImageFilter應該是存了各種圖片濾鏡的函數(shù)的包
方法為filter()
ImageFilter.BLUR為模糊方法
另外,convert() 方法實現(xiàn)顏色轉(zhuǎn)換
convert('L') 變成黑白的圖像
批量轉(zhuǎn)換圖像格式
這里用到了OS模塊,所以去做了一下功課,之后應該也會寫一個專門關于這個的筆記
OS模塊簡單的來說可以處理文件和目錄這些我們?nèi)粘J謩有枰龅牟僮?br>
從文件名列表中讀取所有的圖像文件,并轉(zhuǎn)換成 JPEG 格式
這是教程的代碼:
from PIL import Image
import os
for infile in filelist:
outfile = os.path.splitext(infile)[0] + ".jpg"
if infile != outfile:
try:
Image.open(infile).save(outfile)
except IOError:
print "cannot convert", infile```
`os.path.splitext(path) `分離文件名與擴展名,默認返回(文件名,拓展名) 元組,可做分片操作,就是加一個后綴名輸出,和前面的原理一樣
但是這里的filelist如何指定呢?
我的問題就在于:如何把一個目錄賦值給一個變量?
`os.listdir('dirname') `列出指定目錄下的所有文件和子目錄,包括隱藏文件,并以列表方式打印
于是我嘗試:
test = os.listdir('/Users/apple/Desktop/python/test')
test
['1.jpeg', '22.jpeg', 'aaa.jpg', 'abc', 'bbb', 'ccc.jpg', 'test.jpeg', 'thumbnail.jpg’]```
似乎是可以
但是 然而 可是
>>> for infile in test:
... outfile = os.path.splitext(infile)[0] + ".jpg"
... if infile != outfile:
... try:
... Image.open(infile).save(outfile)
... except IOError:
... print("cannot convert", infile)
...
cannot convert 1.jpeg
cannot convert 22.jpeg
cannot convert abc
cannot convert bbb
cannot convert test.jpeg```
去掉錯誤調(diào)試看看是什么錯,顯示
`FileNotFoundError: [Errno 2] No such file or directory: '1.jpeg’`
文件找不到,一定是因為文件前面得加上路徑
真不知道教程的代碼是怎么寫的,一點都不清楚哼!
還好我機智啊??!用一個列表生成器
test = [os.path.join('/Users/apple/Desktop/python/test',f) for f in os.listdir('/Users/apple/Desktop/python/test’)]````
注意路徑path得加引號
這下總可以了吧??!
恩 看一下目錄 good 成功啦??!