简 介: 本文给出了自动将AI Studio工作环境中的GIF目录下的动图图片完成压缩,下载并上载到CSDN的整个过程。给出了实现的详细代码。利用这个工具便可以完成更加丰富多彩的数据展示的功能。
关键词
: GIF,AISTudio,CSDN
▲ 图1 旋转的数字
§01 GIF文件
1.1 GIF文件简介
GIF文件 ,也被称为“动图”【Graphics Interchange Format】是由COmpuServe公司Wilhite于1987年开发的位图图像格式,采用了LZW无损数据压缩技术压缩GIF图像而又不降低视觉质量。现在被广泛应用在网页中表现动态变化的图像。
▲ 图1.1 GIF懂图形牧场变化的函数
巧妙应用动图及其压缩方式 可以用于传递更加丰佛的动态细节, 演示数据内部变化规律 , 将现象与数据之间协同展示 ,特别是 对于负载网络以及高维度数据形成多视角的展现 。
▲ 图1.2 展示SOFM网络变化过程
▲ 图1.3 显示3D动态曲线
利用 MATPLOTLIB 可以生成数据的一维、二维的图片,存储之后便可以通过相应的Python软件包形成GIF文件了。
1.2 Studio环境
AI Studio是 有百度提供的基于网页的云端人工智能实验环境。它为使用者提供了强大的算力环境。基于Notebook的编程调试环境也方便开发者搭建相应的算法。建立和消除环境对于用户本地计算机没有任何影响,大大方便开发者学习研究。
在AI Studio下生成的动态文件可以存储在本地的目录中,利用BML CodeLab提供的压缩下载命令可以方便下载到计算机本地,进行后期的处理。
但是,现在还没有找到AI Studio下动态下载文件的方法。 也许这是百度公司有意将选赢得功能进行了屏蔽。
那么如何能够自动完成相应的稳健的下载呢? 对于需要生成大量GIF图像的应用来说,手工下载显得不方便。
▲ 图1.2.1 AI Studio BML CodeLab编程界面
下面介绍了自动下载压缩文件的解决方案。
§02 自动下载文件
2.1 主要思路
2.1.1 自动下载文件
BML CodeLab允许是使用键盘右键给出文件的下载链接。利用这个链接,可以在Chrome浏览器的地址栏输入,自动完成文件的下载。
https://aistudio.baidu.com/ibjcpu2/user/262579/3390934/files/gif.zip?_xsrf=2%7C7bb56695%7C79552b127773c1eee41d78c4e29a4104%7C1641455345
▲ 图2.1.1 AI Studio查看文件下载链接
在浏览器地址栏输入下载链接之后形成自动下载对话框,这样就可以将AI Studio BML Codelab中的文件,特别是GIF压缩文件进行下载了。
▲ 图2.1.2 在浏览器地址栏输入下载链接之后形成自动下载对话框
2.1.2 压缩GIF文件
由于GIF文件包括有大量的图片,所以在下载之前需要将他们进行压缩打包,然后再使用上面的“自动下载”的方案完成文件的下载。
完成这个过程则是通过动态粘贴执行如下的端程序,利用Notebook程序的功能完成GIF闻见录的打包。
AIStudio_Title = 'BML CodeLab'
opstr = (
"import sys,os,math,time",
"sys.path.append('/home/aistudio/external-libraries')",
"import matplotlib.pyplot as plt",
"from numpy import *",
"import zipfile",
"filedim = os.listdir('/home/aistudio/GIF')",
"with zipfile.ZipFile('/home/aistudio/gif.zip', 'w') as zf:",
" for f in filedim:",
" if f.find('points') > 0: continue",
" fn = os.path.join('/home/aistudio/GIF', f)",
" zf.write(fn)",
)
clipboard.copy('\r\n'.join(opstr))
rect = tspgetwindowrect(AIStudio_Title)
pyautogui.click((rect[2] - 150), rect[1] + 320)
tspsendwindowkey(AIStudio_Title, "a", control=1, noreturn=1)
tspsendwindowkey(AIStudio_Title, "av", control=1, noreturn=1)
tspsendwindowkey(AIStudio_Title, "\r", shift=1, noreturn=1)
time.sleep(.5)
2.1.3 解压缩生成GIF文件
对于下载到本地的ZIP文件,进行动态解压缩,然后在进行生成GIF文件。如果后面带有参数,则直接上载到CSDN网页中。
这部分的功能则有 zip2gif程序来完成。
2.2 自动下载文件程序
2.2.1 工作条件
为了可能够实现动图直接从AI Studio到CSDN,需要准备一下工作条件:
- 打开AI Studio,进入 BML CodeLab
- 对于/home/aistudio中的GIF.zip,获得其下载链接信息,并保存在TEASOFT的DOP中,
- 打开一个新的Chrome浏览器,不输入任何有效地址,它的Title为“新标签页”。
2.2.2 工作代码
自动下载Python程序为 zip2gif。在之前通过参数“.”表示自动将AI Studio工作目录中的GIF文件夹中的文件进行压缩下载,然后完成后面的动态解压缩生成GIF文件,并上载到CSDN。使用方法为:
zip2gif … 演示图片
下面就是将AI Studio GIF目录中的动图完成自动下载,生成GIF,上载到CSDN的效果。
▲ 图 演示动图上载到CSDN
(1)py程序代码
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# ZIP2GIF.PY -- by Dr. ZhuoQing 2021-12-17
#
# zip2gif num # process only head num file
# zip2gif #timespace # gif time space
# zip2gif cdpgargument #
# zip2gif * # Get all the select DOP into gif
# zip2gif . # Compress AI Studio GIF,download
#
# Note:
#============================================================
from headm import *
import zipfile
import shutil
import pyautogui
#------------------------------------------------------------
filename = r'D:\Temp\GIF.zip'
if not os.path.isfile(filename):
filename = r'C:\Users\SCW4000\Downloads\GIF.zip'
filename1 = filename
cdpgarg = ""
giftime = 0
#------------------------------------------------------------
if len(sys.argv) > 1:
if sys.argv[1][0] == '#':
giftime = int(sys.argv[1][1:])
sys.argv[1:] = sys.argv[2:]
#------------------------------------------------------------
AIStudio_Title = 'BML CodeLab'
if len(sys.argv) > 1:
if sys.argv[1][0] == '.':
if sys.argv[1] == '.':
sys.argv[1:] = sys.argv[2:]
else: sys.argv[1] = sys.argv[1][1:]
#----------------------------------------------------
opstr = (
"import sys,os,math,time",
"sys.path.append('/home/aistudio/external-libraries')",
"import matplotlib.pyplot as plt",
"from numpy import *",
"import zipfile",
"filedim = os.listdir('/home/aistudio/GIF')",
"with zipfile.ZipFile('/home/aistudio/gif.zip', 'w') as zf:",
" for f in filedim:",
" if f.find('points') > 0: continue",
" fn = os.path.join('/home/aistudio/GIF', f)",
" zf.write(fn)",
)
clipboard.copy('\r\n'.join(opstr))
rect = tspgetwindowrect(AIStudio_Title)
pyautogui.click((rect[2] - 150), rect[1] + 320)
tspsendwindowkey(AIStudio_Title, "a", control=1, noreturn=1)
tspsendwindowkey(AIStudio_Title, "av", control=1, noreturn=1)
tspsendwindowkey(AIStudio_Title, "\r", shift=1, noreturn=1)
time.sleep(1)
#----------------------------------------------------
url_title = '新标签页'
url = 'https:' + tspstring2text('https:')
rect = tspgetwindowrect(url_title)
if sum(rect) == 0:
printf("Can not find %s window.\a"%url_title)
exit()
clipboard.copy(url)
pyautogui.click((rect[0]+rect[2])//2, rect[1]+65)
tspsendwindowkey(url_title, "dd", alt=1, noreturn=1)
tspsendwindowkey(url_title, "v", control=1, noreturn=1)
tspsendwindowkey(url_title, "\r")
saveas_title = "另存为"
for _ in range(5):
time.sleep(.5)
if sum(tspgetwindowrect(saveas_title)) != 0:
tspsendwindowkey(saveas_title, "s", alt=1)
break
clipboard.copy("")
time.sleep(2)
#------------------------------------------------------------
gifdir = r'd:\temp\GIF'
if not os.path.isdir(gifdir):
os.mkdir(gifdir)
else:
filedim = os.listdir(gifdir)
for s in filedim:
fn = os.path.join(gifdir, s)
if os.path.isfile(fn):
os.remove(fn)
#------------------------------------------------------------
if len(sys.argv) > 1:
if sys.argv[1] == '*':
dopid = tspgetselectid()
count = 0
for id in dopid:
filename = tspgetdopfile(id)
if not os.path.isfile(filename): continue
extstr = filename.split('.')[-1]
outfn = os.path.join(gifdir, '%03d.%s'%(count, extstr))
count += 1
shutil.copyfile(filename, outfn)
if giftime == 0:
dir2gif(gifdir = gifdir)
else: dir2gif(gifdir = gifdir, period=giftime, last=giftime)
giffilename = r'd:\temp\gif1.gif'
printf("Check GIF %s file size.\a"%giffilename)
time.sleep(1)
file_stats = os.stat(giffilename)
printf('Gif %s size:%5.2fM\a'%(os.path.basename(giffilename), file_stats.st_size/(1e6)))
if file_stats.st_size > 5000000:
printf('ERROR: gif size is too big!\a\a')
errorflag = 1
cdpgarg = ' '.join(sys.argv[2:])
if len(cdpgarg) > 0:
tspexecutepythoncmd('cdpg %s'%cdpgarg)
exit()
#------------------------------------------------------------
headnum = 0
#------------------------------------------------------------
fn = ''
if len(sys.argv) > 1:
fn = os.path.join(r'd:\temp', sys.argv[1]+'.zip')
if os.path.isfile(fn):
filename = fn
else:
cdpgarg = ' '.join(sys.argv[1:])
if len(sys.argv) > 1:
if sys.argv[1][0].isdigit():
headnum = int(sys.argv[1])
cdpgarg = ' '.join(sys.argv[2:])
tspdropfile2pastetext()
strall = clipboard.paste().strip()
if os.path.isfile(strall):
if len(strall) > 0:
filename = strall
#------------------------------------------------------------
#filename = filename.replace('\r','').replace('\n','')
filename = filename.strip()
#------------------------------------------------------------
if not os.path.isfile(filename):
filename = r'd:\temp\gif.zip'
if not os.path.isfile(filename):
printf("Can not find zip file: %s\a"%filename)
exit()
if filename.find('.zip') < 0 and filename.find('.ZIP') < 0:
printf("The file is not the zip file: %s"%filename)
exit()
#------------------------------------------------------------
errorflag = 0
with zipfile.ZipFile(filename) as zfile:
nl = zfile.namelist()
fdim = []
count = 0
for f in nl:
if f.find('Thumbs') >= 0: continue
zfile.extract(f, gifdir)
fn = os.path.join(gifdir, f)
fdim.append(fn.replace('/', '\\'))
count += 1
if headnum > 0:
if count >= headnum: break
#--------------------------------------------------------
if len(fdim) == 0: exit()
gifpath = os.path.dirname(fdim[0])
scanfile = os.listdir(gifpath)
for f in scanfile:
fn = os.path.join(gifpath, f)
try:
id = fdim.index(fn)
except:
os.remove(fn)
printf("Begin to unzip file: %s[%d/%d] and change to GIF1.GIF.\a"%(os.path.basename(filename), headnum, len(nl)))
if len(fdim) > 0:
if giftime == 0:
dir2gif(gifdir = gifpath)
else: dir2gif(gifdir = gifpath, period=giftime, last=giftime)
for f in fdim:
os.remove(f)
#------------------------------------------------------------
giffilename = r'd:\temp\gif1.gif'
printf("Check GIF %s file size.\a"%giffilename)
time.sleep(1)
file_stats = os.stat(giffilename)
printf('Gif %s size:%5.2fM\a'%(os.path.basename(giffilename), file_stats.st_size/(1e6)))
if file_stats.st_size > 5000000:
printf('ERROR: gif size is too big!\a\a')
errorflag = 1
#------------------------------------------------------------
if errorflag == 0:
os.remove(filename)
#------------------------------------------------------------
if len(cdpgarg) > 0 and errorflag == 0:
tspexecutepythoncmd('cdpg %s'%cdpgarg)
#------------------------------------------------------------
# END OF FILE : ZIP2GIF.PY
#============================================================
※ 总 结 ※
本文给出了自动将AI Studio工作环境中的GIF目录下的动图图片完成压缩,下载并上载到CSDN的整个过程。给出了实现的详细代码。利用这个工具便可以完成更加丰富多彩的数据展示的功能。
■ 相关文献链接:
● 相关图表链接:
- 图1 旋转的数字
- 图1.1 GIF懂图形牧场变化的函数
- 图1.2 展示SOFM网络变化过程
- 图1.3 显示3D动态曲线
- 图1.2.1 AI Studio BML CodeLab编程界面
- 图2.1.1 AI Studio查看文件下载链接
- 图2.1.2 在浏览器地址栏输入下载链接之后形成自动下载对话框
- 图 演示动图上载到CSDN