转换图像格式
from PIL import Image
#打开文件
im = Image.open("D:/image/logo.webp")
print("图像模式信息:",im.mode)
# 包括了每英寸像素点大小和截图软件信息
print("图像信息:",im.info)
#图片四通道如果改成RGB为三通道《红蓝绿》
im = im.convert("RGBA")
#保存
im.save("D:/image/logo.png")
图像添加水印。
from PIL import Image,ImageDraw,ImageFont
"""
添加水印(函数式编程)
"""
font=ImageFont.truetype('C:/Windows/Fonts/msyh.ttc',size=30)
def creating_watermark(im,text,font=font):
# 给水印添加透明度,因此需要转换图片的格式
im_rgba=im.convert('RGBA')
im_text_canvas=Image.new('RGBA',im_rgba.size,(255,255,255,0))
print(im_rgba.size[0])
draw=ImageDraw.Draw(im_text_canvas)
#设置文字大小
text_x_width,text_y_height=draw.textsize(text,font=font)
print(text_x_width,text_y_height)
text_xy=(im_rgba.size[0]-text_x_width,im_rgba.size[1]-text_y_height)
print(text_xy)
# 设置文本颜色(绿色)和透明度(半透明)
draw.text(text_xy,text,font=font,fill=(255,255,255,128))
#将原图与文字混合
im_text=Image.alpha_composite(im_rgba,im_text_canvas)
return im_text
image=Image.open("C:/Users/123/Pictures/Saved Pictures/favicon.png")
image.show()
image_water=creating_watermark(image,'水印')
image_water.show()
image_water.save("C:/Users/123/Pictures/Saved Pictures/ttttt.png")
图像批量处理。
import os
from PIL import Image
#读取图片目录
fileNmae=os.listdir('C:/Users/123/Pictures/Saved Pictures/bizhi/')
print(fileNmae)
#设计尺寸大小
width=888
height=888
#如果目录不存在,则创建目录
if not os.path.exists('C:/Users/123/Pictures/Saved Pictures/xiugai/'):
os.mkdir('C:/Users/123/Pictures/Saved Pictures/xiugai/')
# 循环读取每一张图片
for img in fileNmae:
olld=Image.open('C:/Users/123/Pictures/Saved Pictures/bizhi/'+img)
olld=olld.convert("RGB")
new_im=olld.resize((width,height),Image.BILINEAR)
new_im.save('C:/Users/123/Pictures/Saved Pictures/xiugai/'+img)
ft=os.listdir('C:/Users/123/Pictures/Saved Pictures/xiugai/')
t=4
for ii in ft:
ot=Image.open('C:/Users/123/Pictures/Saved Pictures/xiugai/'+ii)
ot=ot.convert("RGBA")
ot.save('C:/Users/123/Pictures/Saved Pictures/xiugai/'+'xg'+str(t)+'.png')
t+=1
图像合成gif
import os
import random
from PIL import Image
def png_to_gif(png_path,gif_name):
"""png合成gif图像"""
frames = []
# 返回文件夹内的所有静态图的列表
png_files = os.listdir(png_path)
# 打印返回的列表
print(png_files)
# 读取文件内的静态图
for frame_id in range(1,len(png_files)+1):
frame = Image.open(os.path.join(png_path,'image%d.png'%frame_id))
frames.append(frame)
# 以第一张图片作为开始,将后续5张图片合并成 gif 动态图
# save_all 保存图像;transparency 设置透明背景色;duration 单位毫秒,动画持续时间,
# loop=0 无限循环;disposal=2 恢复原背景颜色
frames[0].save(gif_name,save_all=True,append_images=frames[1:],transparency=0,duration=2000,loop=0,disposal=2)
#调用函数,传入对应的参数
png_to_gif("D:/Desktop/shili/",'D:/Desktop/shili/zz.gif')
图像几何变换
from PIL import Image
"""
Image.FLIP_LEFT_RIGHT:左右水平翻转;
Image.FLIP_TOP_BOTTOM:上下垂直翻转;
Image.ROTATE_90:图像旋转 90 度;
Image.ROTATE_180:图像旋转 180 度;
Image.ROTATE_270:图像旋转 270 度;
Image.TRANSPOSE:图像转置;
Image.TRANSVERSE:图像横向翻转。
"""
#####################################################
# im = Image.open("C:/Users/123/Pictures/Saved Pictures/favicon.png")
# #返回一个新的Image对象
# im_out=im.transpose(Image.FLIP_LEFT_RIGHT)
# im_out.show()
# im_out.save("C:/Users/123/Pictures/Saved Pictures/水平翻转.png")
#####################################################
"""
angle:表示任意旋转的角度;
resample:重采样滤波器,默认为 PIL.Image.NEAREST 最近邻插值方法;
expand:可选参数,表示是否对图像进行扩展,如果参数值为 True 则扩大输出图像,如果为 False 或者省略,则表示按原图像大小输出;
center:可选参数,指定旋转中心,参数值是长度为 2 的元组,默认以图像中心进行旋转;
translate:参数值为二元组,表示对旋转后的图像进行平移,以左上角为原点;
fillcolor:可选参数,填充颜色,图像旋转后,对图像之外的区域进行填充。
"""
# im = Image.open("C:/Users/123/Pictures/Saved Pictures/favicon.png")
# #translate的参数值可以为负数,并将旋转图之外的区域填充为绿色
# #返回同一个新的Image对象
# im_out=im.rotate(45,translate=(0,-25),fillcolor="green")
# im_out.show()
# im_out.save("C:/Users/123/Pictures/Saved Pictures/旋转图像.png")
#####################################################
"""
size:指定新图片的大小;
method:指定图片的变化方式,比如 Image.EXTENT 表示矩形变换;
data:该参数用来给变换方式提供所需数据;
resample:图像重采样滤波器,默认参数值为 PIL.Image.NEAREST。
"""
#设置图像大小250*250,并根据data的数据截取原图像的区域,生成新的图像
im = Image.open("C:/Users/123/Pictures/Saved Pictures/favicon.png")
im_out=im.transform((250,250),Image.EXTENT,data=[0,0,30 + im.width//4,im.height//3])
im_out.show()
im_out.save("C:/Users/123/Pictures/Saved Pictures/变换.png")
#####################################################
自动化
from selenium import webdriver
import time
import pymongo
from selenium.webdriver.common.by import By
class JdSpider(object):
def __init__(self):
self.url='http://www.jd.com/'
self.browser = webdriver.Chrome()
self.i=0
def get_html(self):
self.browser.get(self.url)
self.browser.find_element(by=By.XPATH,value='//*[@id="key"]').send_keys('python书籍')
self.browser.find_element(by=By.XPATH,value="//*[@class='form']/button").click()
def get_data(self):
self.browser.execute_script( 'window.scrollTo(0,document.body.scrollHeight)')
time.sleep(4)
li_list=self.browser.find_element(by=By.XPATH,value='//*[@id="J_goodsList"]/ul/li')
for li in li_list:
item={}
item['name']=li.find_element(by=By.XPATH,value='.//div[@class="p-name"]/a/em').text.strip()
item['price'] = li.find_element_by_xpath('.//div[@class="p-price"]').text.strip()
item['count'] = li.find_element_by_xpath('.//div[@class="p-commit"]/strong').text.strip()
item['shop'] = li.find_element_by_xpath('.//div[@class="p-shopnum"]').text.strip()
print(item)
self.i+=1
def run(self):
self.get_html()
while True:
if self.browser.page_source.find('pn-next disabled')==-1:
self.browser.find_element(by=By.CLASS_NAME,value='pn-next').click()
time.sleep(3)
else:
print('数量',self.i)
break
if __name__=='__main__':
spider=JdSpider()
spider.run()