第一个小例子来自 中国大学MOOC 用python玩转数据 课程 第6章 python的理工类应用
from PIL import Image
im1 = Image.open('1.jpg')
im1.size #图像的大小
im1.format #图像的格式
im1.mode #
im1.save('2.png') #另存为png格式
out = im1.rotate(45) #旋转图片
out1 = out.thumbnail((100,100)) #生成缩略图
im1.paste(out1,(50,50)) #把两个图片粘贴到一起,第二个参数指定粘贴的位置,好像是粘贴图片左上角的起始位置
im1.crop((0,0,50,50)) #裁剪图片,图片左上角的坐标是(0,0)越往右,往下坐标越大
im.save('3.png')
new_image = Image.new('RGB',(474,474),'white') #新建图片,三个参数,分别是mode,size,color。第一次重复时遇到了错误,提示我 TypeError: function takes exactly 1 argument (3 given),暂时没有搞明白是什么意思,第二次尝试没有遇到这个错误,暂时还没有找到原因
第二个例子重复自公众号 python 分享的文章 《用Python给朋友圈添加一些有意思的小东西》
主要内容是将一张图片分割成九份便于发九宫格的朋友圈,原文将代码全都封装成了函数,自己这方面还差得很远,仅仅完成了一个简易版(函数,类,实例,继承,多态这些概念和应用还是不理解呀!)
代码
from PIL import Image
image = Image.open("1.jpg")
width, height = image.size
item_width = int(width/3)
#这一步主要是为了获得裁剪图片所需要的坐标
box_list = []
for i in range(0,3):
for j in range(0,3):
box = (j*item_width,i*item_width,(j+1)*item_width,(i+1)*item_width)
box_list.append(box)
image_list = [image.crop(box) for box in box_list]
index = 1
for im in image_list:
im.save(str(index)+'.png','PNG')
index = index + 1
注意:如果处理的是一个正方形图片,以上代码应该没有问题;如果是长方形,最后裁剪出的图片大小可能不一样,如果宽比长大得多可能还会遇到报错;原文的解决办法是以原图片max(width,height)新建一个正方形的图片,然后再将要裁剪的图片粘贴到新建图片的居中位置
完善代码
from PIL import Image
image = Image.open("1.jpg")
width,heigth = image.size
new_image_length = width if width > height else height #这样也可以,学到了一个新的表达方式
new_image = Image.new('RGB',(new_image_length,new_image_length),'white')
if width > height:
new_image.paste(image,(0,int((new_image_length-height)/2)))
else:
new_image.paste(image,(int((new_image_length-height)/2,0)))
item_width = int(new_image_length/3)
box_list = []
for i in range(0,3):
for j in range(0,3):
box = (j*item_width,i*item_width,(j+1)*item_width,(i+1)*item_width)
box_list.append(box)
image_list = [new_image.crop(box) for box in box_list]
index = 1
for im in image_list:
im.save(str(index)+'.png','PNG')
index = index + 1
刚刚发现了一款手机电脑互传文件的APP Xender 还挺好用的可以试一下!
更新20180922
第三个小栗子:下载网页上的图片
对爬虫的粗浅理解:网页分为静态网页和动态网页,动态网页更为复杂;静态网页相对简单,因为网页的内容基于一定的语法,如果想要爬取静态网页上的内容,一个比较简单的做法是使用正则表达式匹配特定的内容即可,实际例子可以参考https://www.cnblogs.com/mqxs/p/7771835.html ;自己尝试使用这个教程中的代码抓取一张自己想要的图片;图片的连接地址可以用Chrome 浏览器将光标放到图片上右键检查元素即可
import urllib
form PIL import Image
url = "https://ihc2018.org/files/images/layout/en/ihc-2018-logo.png"
picture = urllib.request.urlopen(url).read()
fw = open("ihc-2018-logo.png","wb")
fw.write(picture)
fw.close()
im1 = Image.open("ihc-2018-logo.png")
im1
更新:图片白色背景变为透明
import Image
def transPNG(srcImageName,dstImageName):
img = Image.open(srcImageName)
img = img.convert("RGBA")
datas = img.getdata()
newData = list()
for item in datas:
if item[0] >220 and item[1] > 220 and item[2] > 220:
newData.append(( 255, 255, 255, 0))
else:
newData.append(item)
img.putdata(newData)
img.save(dstImageName,"PNG")
if __name__ == '__main__':
transPNG("apple.png","apple2.png")
以上代码完全复制自文章Python PIL图片透明化
抽时间仔细研究