​    最近某音上的动漫特效特别火,很多人都玩着动漫肖像,我媳妇儿也不例外。看着她这么喜欢这个特效,我决定做一个图片处理工具,这样媳妇儿的动漫头像就有着落了。
编码
    为了快速实现我们的目标,我们就不自己写图片处理程序了,我们直接调用百度AI开放平台提供的接口实现我们的需求。
    这一次我们导入如下两个库

 # -*- coding:utf-8 -*-
#author:菜鸟小白的学习分享 import requests, base64

我们需要进行百度AI开放平台的接口认证,代码如下:

# -*- coding:utf-8 -*-
#author:菜鸟小白的学习分享
# 百度AI开放平台鉴权函数
def get_access_token():
url = 'https://aip.baidubce.com/oauth/2.0/token'
data = {
'grant_type': 'client_credentials', # 固定值
'client_id': 'A3ppUrgl6H*******NjDN4Bb', # 在开放平台注册后所建应用的API Key
'client_secret': 'SqaeFpiPPC**********H1lsb0xO3w' # 所建应用的Secret Key
}
res = requests.post(url, data=data)
res = res.json()
access_token = res['access_token']
return access_token
因为百度AI平台提供了多种图像处理方式,请求URL主体都相同,但是传参不同,所以我们需要对不同的处理方式进行参数处理,代码如下:
 # -*- coding:utf-8 -*-
#author:菜鸟小白的学习分享
def get_config():
img_before = input("请输入当前文件夹下需要处理的图片名称:")
process_action = ['','selfie_anime','colourize','style_trans']
print("支持以下处理动作:\n1:为人像动漫化\n2:图像上色\n3:为图像风格化")
# 处理动作: selfie_anime 为人像动漫化,colourize 图像上色,style_trans 为图像风格化
i = int(input("请输入需要处理的动作:"))
"""
cartoon:卡通画风格
pencil:铅笔风格
color_pencil:彩色铅笔画风格
warm:彩色糖块油画风格
wave:神奈川冲浪里油画风格
lavender:薰衣草油画风格
mononoke:奇异油画风格
scream:呐喊油画风格
gothic:哥特油画风格"""
others = ['','cartoon','pencil','color_pencil','warm','wave','lavender','mononoke','scream','gothic']
j = 0
if process_action[i] == 'style_trans':
print("支持转化的风格有:\n\
1:卡通画风格\n\
2:铅笔风格\n\
3:彩色铅笔画风格\n\
4:彩色糖块油画风格\n\
5:神奈川冲浪里油画风格\n\
6:薰衣草油画风格\n\
7:奇异油画风格\n\
8:呐喊油画风格\n\
9:哥特油画风格\n")
j = int(input("请输入需要转化的风格类型(数字):"))
return img_before,process_action[i],others[j]

我们获取到图片和处理参数之后,就拿着这些信息去请求百度AI开放平台了
 # -*- coding:utf-8 -*-
#author:菜鸟小白的学习分享
def image_process(img_before, img_after, how_to_deal,others):
# 函数的三个参数,一个是转化前的文件名,一个是转化后的文件名,均在同一目录下,第三个是图像处理能力选择
request_url = 'https://aip.baidubce.com/rest/2.0/image-process/v1/' + how_to_deal

file = open(img_before, 'rb') # 二进制读取图片
origin_img = base64.b64encode(file.read()) # 将图片进行base64编码
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
data = {
'access_token': get_access_token(),
'image': origin_img,
'option': others
}

res = requests.post(request_url, data=data, headers=headers)
res = res.json()

if res:
f = open(img_after, 'wb')
after_img = res['image']
after_img = base64.b64decode(after_img)
f.write(after_img)
f.close()

最后,我们再把主函数调用写一下
 # -*- coding:utf-8 -*-
#author:菜鸟小白的学习分享
if __name__ == '__main__':
# 选择输入信息
img_before, process_action, others = get_config()
img_after = img_before.split('.') # 将原文件名分成列表
img_after = img_after[0] + '_1.' + img_after[1] # 新生成的文件名为原文件名上加 _1
image_process(img_before, img_after, process_action,others)
print('done!')
 
实现效果

原始图片:

卡通化的转化效果:

彩铅风格转换效果:

其它效果就由小伙伴们自行实验吧,时间太晚了,我就不一一尝试了。

程序获取

考虑到有的小伙伴还没有python环境也想体验工具效果,我把也代码打包成了可执行程序,关注公众号“菜鸟小白的学习分享”回复“图片处理程序”即可获取。

有兴趣自己研究的小伙伴想要获取源码的话,关注公众号“菜鸟小白的学习分享”回复“图片处理源码”即可获取。

如果你也认可菜鸟小白的学习分享的话,请给我一个在看、点赞、关注+赞赏,因为有你们,所以我一直在努力。

# -*- coding:utf-8 -*-#author:菜鸟小白的学习分享if __name__ == '__main__':    # 选择输入信息    img_before, process_action, others = get_config()    img_after = img_before.split('.')  # 将原文件名分成列表    img_after = img_after[0] + '_1.' + img_after[1]  # 新生成的文件名为原文件名上加 _1    image_process(img_before, img_after, process_action,others)    print('done!')

媳妇儿喜欢玩某音中的动漫特效,那我就用python做一个图片转化软件。的更多相关文章

  1. HMS Core Discovery第17期直播预告|音随我动,秒变音色造型师

    [导读] 随着音视频内容品类的不断丰富及音乐创作门槛不断降低,大量用户正热切的参与到全民创作的大潮中.我们应该怎么去拥抱移动端影音潜力市场?音频编辑又可以有什么新玩法? 本期直播<音随我动,秒变 ...

  2. HMS Core Discovery第17期回顾|音随我动,秒变音色造型师

    HMS Core Discovery第17期直播<音随我动,秒变音色造型师>,已于8月25日圆满结束,本期直播我们邀请了HMS Core音频编辑服务的产品经理.技术专家以及创新娱乐类应用& ...

  3. 华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大!

    华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大! 在华为最新发布的nova 3手机上,抖音通过华为himedia SDK集成了60fps.超级慢动作等华为媒体开放能力,在加持这些能力后,抖音 ...

  4. 玩转HTML5移动页面(动效篇)(转载)

    本文转载自: 玩转HTML5移动页面(动效篇)

  5. 玩转HTML5移动页面(动效篇)

    原文:http://www.grycheng.com/?p=458 作为一名前端,在拿到设计稿时你有两种选择: 1.快速输出静态页面 2.加上高级大气上档次狂拽炫酷屌炸天的动画让页面动起来 作为一个有 ...

  6. 玩转PHP中的正则表达式

    玩转PHP中的正则表达式 检验用户输入.解析用户输入和文件内容,以及重新格式化字符串 级别: 中级 正则表达式提供了一种处理文本的强大方法.使用正则表达式,您可以对用户输入进行复杂的检验.解析用户输入 ...

  7. Google I/O 官方应用中的动效设计

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jILRvRTrc/article/details/82881743 作者:Nick Butcher, ...

  8. Android 使用pl.droidsonroids.gif.GifImageView在安卓中显示动图遇到的问题

    在做一款聊天软件,其中聊天界面需要发送表情,而表情都是动图,在安卓中想要显示动图,就要借助第三方框架,我选的是pl.droidsonroids.gif.GifImageView. 使用方法如下:你在g ...

  9. 喜欢玩warcraft的ltl

    喜欢玩warcraft的ltl 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 描写叙述 ltl 很喜欢玩warcraft.由于warcraft十分讲究团队总体实力,而他自己如 ...

随机推荐

  1. TCP和UDP的Socket编程实验

    Linux Socket 函数库是从 Berkeley 大学开发的 BSD UNIX 系统中移植过来的.BSD Socket 接口是在众多 Unix 系统中被广泛支持的 TCP/IP 通信接口,Lin ...

  2. django 网站域名解析 IP绑定 新建站 新域名

    备案成功后,我们要用域名来访问服务器,这个不仅要修改nginx的配置文件,还要设置域名的解析,下面是我的一个调试经验过程:直接上图了. 1.问题查找

  3. 谈谈java中的并发(一)

    一.并发的定义 并发:对于这个概念一直就是没怎么搞懂,就是感觉特别的生疏,(自己从从字面上理解就是多个东西,一起出发),所以就上网上查了一些资料: 同时拥有两个或多个线程,如果程序在单核处理器上运行, ...

  4. Python-argparse模块-获取命令行参数

    #!/usr/bin/python3 """ Author : Jet Bi License : www.cyeap.com Summary : 获取命令行的参数 Not ...

  5. Oracle的number数据类型

    https://www.cnblogs.com/oumyye/p/4448656.html NUMBER ( precision, scale) precision表示数字中的有效位;如果没有指定pr ...

  6. 《HelloGitHub》第 51 期

    兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程.对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编 ...

  7. 最新的一波Vue实战技巧,不用则已,一用惊人

    在Vue中,不同的选项有不同的合并策略,比如 data,props,methods是同名属性覆盖合并,其他直接合并,而生命周期钩子函数则是将同名的函数放到一个数组中,在调用的时候依次调用 在Vue中, ...

  8. MongoDB快速入门教程 (3.2)

    3.2.索引 索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,建立索引,通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条 ...

  9. git和github入门指南(2.1)

    2.git常用命令 2.1.git的三个区 1.工作区 工作区就是你项目所在目录,这个目录是可以非常直观的看到的,编写代码主要在这个目录进行,例如: 2.暂存区 暂存区从字面上去理解就是用来暂时保存项 ...

  10. RS232/485通信方式 保存和加载时数据的处理

    RS232/485通信方式 数据以RS232/485方式通信时,以0xA5作为开始码,以0xAE作为结束码.在开始码和结束码之间的0xA5, 0xAA, 0xAE数据需要进行转码. PC端发送数据时将 ...