前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python功能笔记——杂七杂八

python功能笔记——杂七杂八

作者头像
py3study
发布2020-01-15 11:40:11
3360
发布2020-01-15 11:40:11
举报
文章被收录于专栏:python3python3

×××复习阶段,无聊弄点东西玩一下,实现功能有(控制浏览器访问学校校历,截图保存下来,通过图片处理,最终将其设置为桌面):

    1.控制浏览器访问网页;

    2.将网页截图;

    3.图片处理(图片合并、图片换色);

    4.调用win32Api,将图片设置为壁纸;

    5.py脚本转exe可执行程序;

    6.获取鼠标所在位置的xy值和RGB值。

 所编写内容均来自互联网,下面进行记录(完整的代码放到http://188.131.140.135/softwareList/Mine/):

一、获取网页截图与环境配置(所有安装的包如图所示)

    下面不再赘述包的安装,如果报错,可以使用pip安装对应的包

TIM截图20180913144947.png
TIM截图20180913144947.png

    可以到http://188.131.140.135/softwareList/ 下载不好找的包和ChromeDriver(用于控制谷歌浏览器的驱动)(对应的是Chrome最新的版本)

        ChromeDriver不需要安装,只要放到谷歌浏览器的安装目录下即可,默认是:C:\Program Files (x86)\Google\Chrome\Application下

            然后修改一下系统变量,如下图所示:

TIM截图20180913151052.png
TIM截图20180913151052.png
TIM截图20180913151008.png
TIM截图20180913151008.png

        接下来就可以通过selenium获取网页的截图了,参考代码如下(来自于互联网):

代码语言:javascript
复制
from selenium import webdriver
from PIL import Image
import os
#引入chromedriver.exe
option = webdriver.ChromeOptions()#引入参数
#option.add_argument('headless')#屏蔽浏览器显示,效果是不打开浏览器就实现功能,但是为了截图,还是要打开比较好
chromedriver = "chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
browser = webdriver.Chrome(chromedriver,chrome_options=option)
#设置浏览器需要打开的url
url = "http://202.206.243.9/xiaoli.asp"  
browser.maximize_window()#将浏览器窗口最大化
browser.get(url)
browser.execute_script("""
  (function () {
    var y = 50;
    var step = 100;
    window.scroll(0, 0);
     function f() {
      if (y < document.body.scrollHeight) {
        y += step;
        window.scroll(0, y);
        setTimeout(f, 50);
      } else {
        window.scroll(0, 0);
        document.title += "scroll-done";
      }
    }
    setTimeout(f, 1000);
  })();
""")#执行截图脚本
for i in range(30):
  if "scroll-done" in browser.title:
    break
    time.sleep(1)
browser.save_screenshot("schoolCalenderSource.png")#将截图保存
browser.close()#关闭浏览器
browser.quit()#关闭Chrome Driver

    如果一切顺利的话,就可以在当前目录下得到一张名为schoolCalenderSource.png的截图了,如下图所示:

schoolCalenderSource.png
schoolCalenderSource.png

二、对获取到的截图进行处理

    上面获取到的这个图片并不能直接用来做桌面,所以需要进行裁剪,将中间显示日历的部分裁剪出来,使用到的包是上边已经导过的PIL(通过安装Pillow),代码如下:

代码语言:javascript
复制
im = Image.open("schoolCalenderSource.png")
# 图片的宽度和高度
img_size = im.size
x = 400
y = 260
w = 1100
h = 570
region = im.crop((x, y, x+w, y+h))  #在这里可以多试几次,以裁出一个最合适的大小
region.save("./schoolCalenderBeCut.png")

        裁取后将图片保存为schoolCalenderBeCut.png,如下图所示:

schoolCalenderBeCut.png
schoolCalenderBeCut.png

    在截取之后,可以直接将其设置为桌面背景,但是不太好看,所以可以通过win10自带的绘图软件自己绘制一个背景图片,将其命名为base.png,如下图所示(随便画):

base.png
base.png

    制作好了背景图之后,就可以将两张图片进行拼合,过程是将截图缩小,然后粘贴到背景图上,代码如下所示:

代码语言:javascript
复制
#加载底图
base_img = Image.open('base.png')
base_img = base_img.resize((1920,1600))
# 可以查看图片的size和mode,常见mode有RGB和RGBA,RGBA比RGB多了Alpha透明度
# print base_img.size, base_img.mode
box = (500, 600, 1600, 1170)  # 底图上需要P掉的区域,这些数字通过自己来多次尝试,才能试出一个合适的数字
#1100 570  
#加载需要P上去的图片
tmp_img = Image.open('schoolCalenderBeCut.png')
#这里可以选择一块区域或者整张图片
#region = tmp_img.crop((0,0,304,546)) #选择一块区域
#或者使用整张图片
region = tmp_img
#使用 paste(region, box) 方法将图片粘贴到另一种图片上去.
# 注意,region的大小必须和box的大小完全匹配。但是两张图片的mode可以不同,合并的时候回自动转化。如果需要保留透明度,则使用RGMA mode
#提前将图片进行缩放,以适应box区域大小
# region = region.rotate(180) #对图片进行旋转
region = region.resize((box[2] - box[0], box[3] - box[1]))
base_img.paste(region, box)
#base_img.show() # 查看合成的图片
base_img.save('./schoolCalenderBeCombine.png') #保存图片

    保存的图片schoolCalenderBeCombine.png如下图所示:

schoolCalenderBeCombine.png
schoolCalenderBeCombine.png

    到了这一步,已经可以将其设置为桌面了,但是通过实际的尝试体验之后,发现白色背景的桌面是真的难看,而且还和桌面上的文件名的颜色有冲突,导致文件名看不清,所以下面将此图片修改一下颜色,例如可以修改为浅×××,代码如下:

代码语言:javascript
复制
img = Image.open("schoolCalenderBeCombine.png")#读取图片
width = img.size[0]#长度
height = img.size[1]#宽度
i = 1
j = 1
for i in range(0,width):#遍历所有长度的点
    for j in range(0,height):#遍历所有宽度的点
        data = (img.getpixel((i,j)))#打印该图片的所有点
        if (data[0]>=220 and data[1]>=220 and data[2]>=220):#RGBA的r值大于170,并且g值大于170,并且b值大于170
            img.putpixel((i,j),(230,228,205,20))#则这些像素点的颜色改色
        #############下面的几行代码是在×××的日期#12月22号#处画个方块##############
        x=1050
        y=715 #每个32
        color=(241,148,148,255)
        if (j>=x and j<=x+35):#真实+260[1050,1060]
            if(i>=y and i<= y+10):#[715,725]
                img.putpixel((i,j),color)
        if (j>=x and j<=x+10):#真实+260[1050,1060]
            if(i>=y and i<= y+30):#[715,725]
                img.putpixel((i,j),color)
        if (j>=x+25 and j<=x+35):#真实+260[1050,1060]
            if(i>=y and i<= y+30):#[715,725]
                img.putpixel((i,j),color)
        if (j>=x and j<=x+35):#真实+260[1050,1060]
            if(i>=y+30 and i<= y+40):#[715,725]
                img.putpixel((i,j),color)
        #############到这里结束##############
img = img.convert("RGB")#把图片强制转成RGB
img.save("schoolCalenderColorChange.png")#保存修改像素点后的图片

    保存后的效果如下图所示:

schoolCalenderColorChange.png
schoolCalenderColorChange.png

三、设为桌面壁纸

    当调出了一张比较满意的壁纸之后,就可以通过Windows的api来进行控制(需要安装的包是pywin32),通过下面的代码(只需要改调用函数时传入的图片地址即可)来进行桌面壁纸的设置(详细的API可以自行去搜):

代码语言:javascript
复制
def setWallpaper( bmp ):
    import win32api, win32con, win32gui
    k = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER,"Control Panel\\Desktop",0,win32con.KEY_SET_VALUE)
    win32api.RegSetValueEx(k, "WallpaperStyle", 0, win32con.REG_SZ, "0")
    win32api.RegSetValueEx(k, "TileWallpaper", 0, win32con.REG_SZ, "0")
    win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, bmp, 1+2)
setWallpaper(os.getcwd()+'\\schoolCalenderColorChange.png') #地址要写绝对地址,否则设置完之后,桌面会是一片灰色,同理,如果设置完之后,桌面是什么都没有的灰色,那就说明设置失败了,代码有问题

        设置完成之后的效果如下图所示:

TIM截图20180913160021.png
TIM截图20180913160021.png

    当设置完壁纸之后,工作就结束了,接下来要进行的是后续的清理工作,首先要将生成的几张图片删除掉,代码如下:

代码语言:javascript
复制
os.remove('schoolCalenderSource.png')
os.remove('schoolCalenderBeCut.png')
os.remove('schoolCalenderBeCombine.png')
os.remove('schoolCalenderColorChange.png')

        当然,还可以修改代码,将所有图片存在内存中,不用非得保存在硬盘上,但是由于我为了看每一步的效果才这么做的,以后有时间再进行完善吧!

四、Python脚本转为EXE可执行文件

    这一步很简单,需要用到的包为PyInstaller,直接使用pip进行安装即可(pip install pyinstaller)

        这一步需要在python shell中完成,首先将已经编写好的Python脚本单独放到一个文件夹中(因为接下来的操作会生成很多的目录和文件,很可能就不知道那些是原来存在的,那些是生成的没用的),现在我的这个文件在桌面上,接下来打开CMD(WIN+R),先打个“cd ”然后将这个文件拖到CMD中,如下图所示:

TIM截图20180913161317.png
TIM截图20180913161317.png

    这样就快速的切换到脚本保存目录中,通过“dir”命令就可以看到其中的Python脚本了,接下来通过命令来进行编译:

代码语言:javascript
复制
pyinstaller -F getSchoolCalenderAndSetBackground.py

        如图所示:

TIM截图20180913161727.png
TIM截图20180913161727.png

        当控制台输出这条消息之后,就代表已经编译成功了

TIM截图20180913161835.png
TIM截图20180913161835.png

    然后回到文件夹中,就可以看到编译后的文件了,不过会同时生成很多没用的东西,真正的好东西在“dist”目录下,将这个目录中的".exe"文件取出,就可以运行了(需要注意的是,要在此exe运行的目录下放上之前使用到的“base.png”这个背景图片)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图片处理
图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档