基于python的PIL图像处理

转换图像格式

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()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值