​    最近某音上的动漫特效特别火,很多人都玩着动漫肖像,我媳妇儿也不例外。看着她这么喜欢这个特效,我决定做一个图片处理工具,这样媳妇儿的动漫头像就有着落了。
编码
    为了快速实现我们的目标,我们就不自己写图片处理程序了,我们直接调用百度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. Python中的计时函数

    我们已经知道使用cell magic或者line magic里面的%%time或者%time能够对Python程序中某一模块的运行时间进行计算,下面是一种更为灵活的计时方法,利用了计时函数time.t ...

  2. Probius:一个功能强大的自定义任务系统

    断更的这些日子,我又折腾了一个轮子,文末参考源码 大约在一年半以前写过一篇文章『探秘varian:优雅的发布部署程序』,里边有讲到我们采用类似lego的模块化方式来构建CICD的流程,虽能满足我们的需 ...

  3. vc6.0创建文件时,出现很多烫烫烫解决方法

    vc6.0创建文件时,出现很多烫烫烫烫解决方法 SWM2烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫.IA 如果项目文件放在桌面上 如:C:\Documents and Settings\txwtec ...

  4. 网站搬家之mysql 5.7 date类型默认值不能设置‘0000-00-00’的问题

    网站搬家,mysql版本由5.6升级到5.7,遇到问题: mysql 5.7之后版本datetime默认值设置'0000-00-00',出现异常:Invalid default value for ' ...

  5. Java WebService _CXF、Xfire、AXIS2、AXIS1_四种发布方式(优缺点对比)

    xis,axis2,Xfire以及cxf对比 http://ws.apache.org/axis/ http://axis.apache.org/axis2/java/core/ http://xfi ...

  6. java 中的线程池

    1.实现下面的一个需求,控制一个执行函数只能被五个线程访问 package www.weiyuan.test; public class Test { public static void main( ...

  7. Selenium+Python调Chrome浏览器时报Traceback (most recent call last): File "C:/Users/EDZ/Desktop/selenium_demo/demo001.py", line 12, in <module>

    上次使用Selenium+Python还是好几个月前了 今天想再用一下,结果写个打开网站的小demo报错,报错如下: 检查了一下,查看报错日志,应该是chrome版本和driver版本不一致导致的. ...

  8. 2020_06_18Mysql事务

    1.事务的基本介绍 1.概念:一个包含多个步骤的事务,被事务管理,要么同时成功,要么同时失败. 2.操作: 2.1 开启事务:start transaction; 2.2 回滚:rollback; 2 ...

  9. dart快速入门教程 (7.4)

    7.12.多态 多态字面上理解就是多种状态,通俗的说,多态表现为父类定义一个方法不去实现,子类继承这个方法后实现父类的方法,这个方法有多种表现 // import 'person.dart'; voi ...

  10. node+ajax实战案例(3)

    3.用户注册实现 3.1.注册用户功能的实现逻辑 1 用户在表单上输入注册信息 2 点击注册后,收集用户在表单上输入的注册信息并且发送给后台 3 后台接收用户发送过来的注册信息 4 后台需要处理数据并 ...